Modbus 通讯时规定主机发送完一组命令必须间隔3.5个字符再发送下一组新命令,这个3.5字符主要用来告诉其他设备这次命令(数据)已结束,而这个3.5字符的时间间隔采用以下方式计算:
1个字符包括1位起始位、8位数据位(一般情况)、1位校验位(或者没有)、1位停止位(一般情况下)
这样说起来一般情况下1个字符就包括11位
那么3.5个字符就是3.5*11=38.5位
还有比如没有校验位的
1个字符包括1位起始位、8位数据位(一般情况)、1位停止位(一般情况下)
这样说起来一般情况下1个字符就包括10位
那么3.5个字符就是3.5*10=35位
波特率含义是每秒传输的二进制位的个数
比如9600bps,意思就是说每1秒(也就是1000毫秒)传输9600个位,
反过来说传输9600个二进制位需要1000毫秒
那么传输38.5个二进制位需要的时间就是:
38.5/9.6=4.0104167毫秒
MODBUS RTU要求一帧数据起始和结束至少有大于等于3.5个字符的时间
在波特率为9600的情况下,只要大于4.0104167毫秒即可!
采用了RS485通讯,8位数据,无奇偶校验,一个停止位,采用MODBUS RTU模式,那么下面这句话中的“3.5 个字符时间”如何计算?
RTU 模式下,消息发送至少要以 3.5 个字符时间的停顿间隔开始。
1 起始位
8 数据位, 首先发送最低有效位
0 位作为奇偶校验
1 停止位
T=3.5*( 1 +数据位+奇偶校验+ 停止位)/ 波特率
=3.5*(1+8+0+1)/波特率
由于t1.5 和 t3.5 的定时,隐含着大量的对中断的管理。在高通信速率下,这导致CPU 负担加重。因此,在通信速率等于或低于19200 Bps 时,这两个定时必须严格遵守;对于波特率大于19200 Bps 的情形,应该使用2 个定时的固定值:建议的字符间超时时间(t1.5)为750μs,帧间的超时时间(t1.5) 为1.750ms。