modbus——通讯协议

Modbus RTU模式的协议字段

在这里插入图片描述
Modbus协议RTU模式要求每一帧的起始和结束都以至少3.5个字符为间隔。

每个字符间隔是字符位数/波特率,以1位起始位,8位数据,1位停止位,无奇偶校验位的10位数据。

以波特率为9600b/s为例,字符间隔为1.04ms,也就是每一帧的开始和结束都伴随着至少3.5*1.04=3.64ms的时间间隔。

在字节流中以1.5个字符时间作为帧间间隔,以上面的通信速率,则1.5*1.04=1.56ms,即字符流中出现1.56ms的间隔时可能意味着一帧数据结束。

但必须同时满足其后的一段时间内(2个字符)不会再接收到字符,否则认为结束的该帧为错误帧。

由于收到的每个字节都有可能成为一帧数据的最后一个字节,因此,每接收一个字节,关闭上一个已经开启的3.5个字符时间和1.5个字符时间的定时器,处理完接收到得数据后再次启动3.5个字符时间和1.5个字符时间的定时器,以检测该帧数据的结束。

这也就是上面所说的在帧间间隔后的一段时间内(2个字符)不能接收到数据,否则该帧为错误帧。1.5个字符时间和3.5个字符时间的定时起点是一致的,这是Modbus协议RTU模式的关键之处。

当然这也增加了系统的中断负荷。在发生1.5个字符时间中断后,处理其接收到得数据(这里未考虑设备地址、超时、奇偶校验等错误),计算接收到的字符数-2个字节的CRC校验和,将计算结果与接收到得最后两个字节(当做发送的CRC校验)进行比较,从而得知这是否是完整的一帧数据。CRC校验正确,说明这是一帧完整的数据,CRC校验错误,说明这是一帧错误的数据帧,数据帧不完整。

发布了32 篇原创文章 · 获赞 6 · 访问量 8757

猜你喜欢

转载自blog.csdn.net/linxue110/article/details/90081769