VB通信软件轮询4个单片机,高手进来帮忙啊
我要编一个通信软件,来轮询4个下位机,实时获取设备的状态,使用MSCOMM控件,发送一帧命令帧给下位机,下位机返回数据,接收缓冲区内数据字节数满一定数后触发oncomm事件,在事件中对数据进行处理,然后在定时器中调用该事件以达到轮询的目的,即
Private Sub Timer2_Timer()
MSComm1_OnComm
End Sub
但是问题来了,在接收数据的时候老是出现问题,提示说“下标越界”(就是我定义的接收缓冲区数据的数组下标越界),但是我一把定时器关了程序就能正常运行了,我怀疑是在oncomm事件中没能对事件的打开和关闭进行合理的处理。请高手发表一下看法了,多谢了!!
[解决办法]
提个问题还这么懒
[解决办法]
代码好乱, 谁先执行, 谁后执行, 搞得很乱:
Case comEvReceive '接收事件发生
av = MSComm1.Input
length = UBound(av)
ReDim inbuf(length)
For i = 0 To length
inbuf(i) = av(i)
Next i
MSComm1.RThreshold = 0
.....
[解决办法]
http://community.csdn.net/Expert/topic/5382/5382437.xml?temp=.3019373
http://community.csdn.net/Expert/topic/5366/5366904.xml?temp=9.821719E-02
http://community.csdn.net/Expert/topic/5383/5383313.xml?temp=7.020205E-02
请参阅本人在上述网址的答贴.
请注意几点:
1)MSCOMM的属性RThreshold设置为你接收数据的字接长度.
2)接收到数据字节流后应对接收数组清0,等待下次接收事件.
[解决办法]
Private Sub Timer2_Timer()
MSComm1_OnComm
End Sub
上面的代码不要用,
监测一下出现下标越界时接受的数据,就应该明了。
[解决办法]
av = MSComm1.Input
inbuf = av
length = MSComm1.InBufferCount
For i = 0 To length - 1
inbuf(i) = av(i)
Next i
-------------------------------------------
下标怎么不越界?已经把数据INPUT了,还期望MSComm1.InBufferCount等于原来的数值么?单步走走看,length基本等于0.照jadeluo的做法,length应该用Ubound来取得.