VB编写MSCOMM比较麻烦
主要是UNICODE的问题
在VB中字是按照字元来表示的
一个汉字和一个字母都是一个字元
所以如果与控制符或ASC码大于128的字符混合发送的时候必须转换一下
sendstring=strconv(sendstring,vbfromunicode)
或者使用字符串函数的B版本
另外接收端肯定要有延时
否则字符还没有到达接收缓冲区
延时时间视情况而定
主要是UNICODE的问题
在VB中字是按照字元来表示的
一个汉字和一个字母都是一个字元
所以如果与控制符或ASC码大于128的字符混合发送的时候必须转换一下
sendstring=strconv(sendstring,vbfromunicode)
或者使用字符串函数的B版本
另外接收端肯定要有延时
否则字符还没有到达接收缓冲区
延时时间视情况而定
如果你能更改下层硬件通信协议的话,可以在发送之前加多一个成功响应标志,程序检验到这个字符,即可开始接收了。没有的话,自己以第一个信号为标志吧,得有些处理。注意监测程序是一个延时的循环,(能超时退出)我的程序中有类似的语句,你可以看看。但那是读串口的,监测的程序你自己编吧。这是我的读写串口函数。我使用了MSCOMM控件。dim inarr as byte()Sub ReadMSComm(MsComm1or2, nNum As Integer)
Dim lcount
ReDim InArr(nNum - 1)
CommErr = False
' wait data return to comm port
lcount = 1
Do
DoEvents
lcount = lcount + 1
Loop Until MsComm1or2.InBufferCount >= nNum Or lcount > 5000
If lcount > 5000 Then
MsgBox "通讯出错, 复位并重新再试!", , "故障"
CommErr = True
Exit Sub
End If
'save bin data to buff
inbuf = MsComm1or2.Input
'trans data to system array
InArr = inbuf
End SubSub WriteMSComm(MsComm1or2 As MSComm, byAscii As Byte)
Dim OutByArr(0) As Byte, OutBuf As Variant
OutByArr(0) = byAscii
OutBuf = OutByArr
MsComm1or2.Output = OutBuf
End Sub
'初始化
If MSComm1.PortOpen = False Then
MSComm1.CommPort = "2400,n,8,1"
MSComm1.Settings = 1
'以上参数由自己定义
MSComm1.InputLen = 1
MSComm1.RThreshold = 1 '设置/返回当接收到多少个字符时发生接收事件,为0时不发生接收事件
MSComm1.SThreshold = 1 '同上,用于发送事件
MSComm1.PortOpen = True
MSComm1.InputMode = comInputModeBinary
End If
'下面外部变量必须这样定义,否则不能正确接收
Dim InString As Variant '接收变量
Dim OutString() As Byte '发送变量'在MSComm1的OnComm事件中加入以下代码
Select Case MSComm1.CommEvent
Case comEvReceive '接收事件
'接收缓冲区收到Rthreshold个字符时触发
If MSComm1.InBufferCount Then
InString = MSComm1.Input
For I = LBound(InString) To UBound(InString)
If Check1.Value <> 1 Then
'用Text1控件来显示接收的数据
Text1.Text = Text1.Text & CStr(Hex(Val(InString(I)))) & " "
End If
Next I
InString = ""
End If
Case comEvSend '发送事件
For I = LBound(OutString) To UBound(OutString)
'用Text2控件来显示接收的数据
Text2.Text = Text2.Text & CStr(Hex(Val(OutString(I)))) & " "
Next
End Select