首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB通信软件轮询4个单片机,来帮忙

2012-01-10 
VB通信软件轮询4个单片机,高手进来帮忙啊我要编一个通信软件,来轮询4个下位机,实时获取设备的状态,使用MSC

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来取得.

热点排行