MSComm通信应答方式

来源:百度知道 编辑:UC知道 时间:2024/07/04 18:37:08
用VB做通讯,怎么采用应答方式?是判断接收缓冲区的字节来判断,应该怎么判断接收的是错误帧,协议是MODBUS,一帧数据有8个字节,总是发送读取1个字节的命令来绘制曲线,请问应该怎么处理
还有点不明白的
1.就是如果出错了那一帧的数据怎么处理,还是继续读下一字节,直到找到起始位?
2.下位机是一下子传8个字节1帧的数据到数据缓冲区吗?

MODBUS 协议既没有起始标志,有没有结束标志,它根本无法判断出哪八个字节是一个包,你只能增加包与包之间的时间间隔(减少同一个包内各个字节之间的时间间隔)来减少出错率。
在保证不串包的前提下,MODBUS 协议中的2个 CRC 字节可以在一定程度上进行错误检测。

另外,有点不太明白你的意思,你的协议中是不是有两种帧,一种包含8个字节,另一种只包含1个字节?

判断缓冲区的字节,并和之前设定好的字节比较,如果一致就开始接收其后的字节,如果不一致就继续比较。
1、一帧可以是连续发送的好多字节,也可以是一个字节,看你设定和需要了,如果第一个字节不对,你可以再读下一帧的第一个字节,直到和你设定的一致为止,不对的帧就不要了。
2、下位机应该连续发8个字节,不然程序会比较麻烦。

1)如果下位机返回数据字节长度始终为8,可以使用MSComm控件的OnComm来实现接收,并将MSComm控件的RThreshold属性设置为8或1.
根据帧数据的特定帧首字节及接收字节长等于8等判断数据是否正确并处理数据.
2)下位机的8字节帧数据不是一下子到达接收缓冲区,而是按每一字节的位(BIT)一一达到接收缓冲区.
补充:
1)做好串口通信的关键是有一个明确的通信协议和数据约定,可依据此作出算法,写好代码.
2)建议LZ的机器最好有2个COM口,可方便调试你的VB代码.