VB用串口接收固定长度的数据帧如何处理,比如我的帧格式为:id 12 34 56 32 34 ff

2024-12-29 02:38:15
推荐回答(2个)
回答1:

想每次都刚好接收到符合预期的数据是一种天真的想法。因为下位机向上送数据是有风险的,谁也不能保证数据肯定正确。作为一个考虑完善的程序,不能寄希望于运气好,而应该设法纠错。
对于你这种情况,最好的办法就是设置一个缓冲池,来了数据一股脑扔进去。然后在缓冲池中寻找合适的数据段,如果没有就继续等待,如果有了就提取出来进行处理。

具体的简单说一下:
你先定义一个模块级的 Byte() 作为缓冲池,像你这个应用,15个字节就够了。例如:Dim Buff(15) as Byte。再定义一个尾指针,记录当前池底在几号(其实也可以用Buff(0)来干这活儿)。

你把 RThreshold 改为1,每收到1个字节就放进去。代码我就不写了,很简单。
再后面就是处理过程了。你可以放在 OnComm 事件里,也可以放一个 Timer 定时处理。
从池底向上寻找标记FF,找到后判断这个帧长度够不够,若够再判断是否是正确的帧,最后拿出来处理。

实际上,绝大多数的商业工控软件都是这么写的,好处很多。慢慢体会吧。

回答2:

设置MsComm控件属性
InputMode = comInputModeBinary
RThreshold = 7

在OnComm事件中判断第7字节是255时,进入数据处理