当前位置:编程学习 > VB >>

用VB做LED电子屏二次开发问题?请大家指教

    公司有一部电脑用RS485的方式连接了6 个电子屏,很久以前就存在了。电子屏经销商提供了一个用C写的OCX的接口控件,还有一个调用该控件的用VC写的程序在正常使用。现在上司要求用VB重新写一个新的多电子屏控制程序。现在的问题是经销商留下的VB DEMO都不能正常控制电子屏,唯有那个旧程序可以,我把VB DEMO的参数改成那个旧程序的,但是不行,烦恼中,有什么思路,请大家指教一下 这个必须要有更多的资料,比如开发资料。程序代码。不然大家也不知道怎么给你一些建议。 ' 通用文本整理程序
' VB 的字符串全是16位代码,控件要求使用8位ASCII码,因此需要用下面的程序
' 将16位字符串整理为8位的ASCII码串,并且整理成 C 语言的以0结束的格式
Private Sub StringToByte(ByVal S As String, ByRef ByteBuf() As Byte)
Dim i As Integer
Dim j As Integer
Dim v As Integer
Dim xv As Integer
Dim Lv As Long
    j = 0
    For i = 0 To Len(S) - 1
        v = Asc(Mid(S, i + 1, 1))           '取一个16位字符       
        If v > 0 Then                       '普通字符
            ByteBuf(j) = v
            j = j + 1          
        Else                                '小于0则为中文字,实际是大于等于32768
            Lv = 65536 + v
            xv = Lv \ 256
            ByteBuf(j) = xv
            j = j + 1
            xv = Lv Mod 256
            ByteBuf(j) = xv            
            j = j + 1
        End If        
    Next i
    ByteBuf(j) = 0                          'CL2005Ocx 控件是C语言编写的,字符串必须以0结尾   
End Sub

Private Sub BtnSendText_Click()
Dim S As String
Dim TxtBuf(0 To 1023) As Byte
Dim bOK As Boolean
    S = "`02绿`01红`03黄"
    Call StringToByte(S, TxtBuf)
    bOK = CL2005.ComInitial(ComPort, ComBaudRate, ComDelay)    
    If bOK Then bOK = CL2005.SetLEDProperty(CardType, LedNum, LedWidth, LedHeight, LedColor, 1)
    If bOK Then bOK = CL2005.ShowString(0, 0, 0, 1, VarPtr(TxtBuf(0)))
    If bOK Then bOK = CL2005.SwitchToBank(0)
    CL2005.CloseCL2005
     
    If bOK Then
        bOK = MsgBox("发送成功", vbOKOnly, "显示文字")
    Else
        bOK = MsgBox("发送失败", vbOKOnly, "显示文字")
    End If 每次运行到ShowString都是返回FALSE,会不会是OCX被占用的问题
引用 3 楼 garycjq 的回复:
每次运行到ShowString都是返回FALSE,会不会是OCX被占用的问题


ocx都是映射到你的程序的进程中,不存在被占用的问题 个人觉得还是你的字符串处理有些问题。
你的LED是串口通信吗?
如果是,那你可以绕过对方给你开发的OCX控件,用串口调试器试一试

此外,转换字符串到数组可以这样:
strP = "`02绿`01红`03黄"
    bytA = StrConv(strP, vbFromUnicode) 这是一个VB6编写的串口调试器,含代码 出于兴趣,臆想着瞎写了点点代码,我把我的串口短接(发什么,收什么),通过测试

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
    Dim bytOut() As Byte
    Dim strOutCmd As String
    strOutCmd = "`02绿`01红`03黄"
    bytOut = StrConv(strOutCmd, vbFromUnicode)
    MSComm1.Output = bytOut
End Sub

Private Sub Form_Load()
    With MSComm1
        .CommPort = 1                       '设置串口号,根据你的实际情况修改
        .Settings = "9600,N,8,1"            '设置通信参数,波特率、教研方式,数据位,停止位,根据实际情况修改
        .InputLen = 1                       '每次读取串口接受缓冲区中字符的个数(设置为:1,每次读一个)
        .RThreshold = 1                     '定义接受到1个字符,产生一个OnComm事件
        .InBufferSize = 1024                '定义接收缓冲区的大小
        .OutBufferSize = 1024               '定义发送缓冲区的大小
        .InputMode = comInputModeBinary     '这个很重要,必须要设置为这个
        If Not .PortOpen Then .PortOpen = True
    End With
End Sub

Private Sub MSComm1_OnComm()
    Dim varP As Variant
    Dim intP As Integer
    Dim bytRead(0 To 99) As Byte    '接收结果的字符串
    If MSComm1.CommEvent = 2 Then
        MSComm1.RThreshold = 0  '设置此属性为:0,取消OnComm事件的触发
        Sleep 10    '延迟10ms,以等待数据全部上传,这个时间可以修改,但必须确保数据完全上传
        Do
            varP = MSComm1.Input
            If Not IsNull(varP) Then
                bytRead(intP) = varP(0)
                intP = intP + 1
            End If
        Loop Until MSComm1.InBufferCount = 0
        Debug.Print StrConv(bytRead, vbUnicode)
        MSComm1.RThreshold = 1  '恢复触发
    End If
End Sub


只是给你参考一下,也许根本就没有用。呵呵 调才行。LZ哪儿的?近的话,可以去现场帮忙。 有开发资料就行,也就是发送字符的一些特殊格式和定义
补充:VB ,  控件
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,