用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被占用的问题
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 , 控件