改一下程序结构了:
Private Sub MSComm_OnComm()
if MSComm.CommEvent= comEvReceive then
av = MSComm.Input
buffer(1) = av(0)
If buffer(1) = &HBA Then
MSComm.RThreshold = 0
Do
DoEvents
Loop Until MSComm.InBufferCount >= 4
av = MSComm.Input
buffer(2) = av(0)
av = MSComm.Input
buffer(3) = av(0)
av = MSComm.Input
buffer(4) = av(0)
av = MSComm.Input
buffer(5) = av(0)
Debug.Print buffer(1)
Text1.Text = Text1.Text + Str(buffer)
MSComm.RThreshold = 1
End ifEnd Sub
Private Sub MSComm_OnComm()
if MSComm.CommEvent= comEvReceive then
av = MSComm.Input
buffer(1) = av(0)
If buffer(1) = &HBA Then
MSComm.RThreshold = 0
Do
DoEvents
Loop Until MSComm.InBufferCount >= 4
av = MSComm.Input
buffer(2) = av(0)
av = MSComm.Input
buffer(3) = av(0)
av = MSComm.Input
buffer(4) = av(0)
av = MSComm.Input
buffer(5) = av(0)
Debug.Print buffer(1)
Text1.Text = Text1.Text + Str(buffer)
MSComm.RThreshold = 1
End ifEnd Sub
string1 = &HABAA01 '多此一举,Hex(string1) ="ABAA01"
MSComm.Output = Hex(string1) + Chr$(13) 既然用二进制通信,就得用二进制发送数据,上面用的是文本方式
Dim buffer() As Byte
redim buffer(3)
buffer(0)=ChrB(13)
buffer(1)=&H01
buffer(2)=&HAA
buffer(3)=&HABMSComm.Output = buffer还有,这里比较容易出问题
Do
DoEvents
Loop Until MSComm.InBufferCount >= 4
如果一直等不到数据,那就是死循环了,最好有超时处理,比如
tm1=timer
Do
DoEvents
Loop Until MSComm.InBufferCount >= 4 or timer-tm1>1你的inputLen=0,那读进来的数据是缓冲区里面的全部数据
buffer(0) = av(0)
...
buffer(1) = av(0)
这是错的
直接buffer=Mscomm1.input就行了问题比较多,自己再好好看看资料吧
有的话,烦请邮一个给我,多谢!
[email protected]
MOXA公司的PCOMM好!
www.moxa.com