计算modbus RTU 3.5字符时间

use*_*453 6 communication modbus serial-communication rs485

不熟悉Modbus并使用Modbus RTU开发应用程序.我想知道如何找出RTU消息帧分离时间.在Modbus RTU规范中,它提到了3.5个字符时间,但没有更多关于我如何决定这个间隔的数据.和wat是计算分离时间的步骤?

Mr.*_*itt 11

请查看Modbus串行线路协议和实施指南V1.02的第13页

在底部,您将找到解释字符间超时(t1.5)和帧间延迟(t3.5)值的注释.

对于超过19200的波特率,固定值.对于较慢的波特率,需要计算它们(从Arduino的SimpleModbusMaster库中提取):

// Modbus states that a baud rate higher than 19200 must use a fixed 750 us 
// for inter character time out and 1.75 ms for a frame delay.
// For baud rates below 19200 the timeing is more critical and has to be calculated.
// E.g. 9600 baud in a 10 bit packet is 960 characters per second
// In milliseconds this will be 960characters per 1000ms. So for 1 character
// 1000ms/960characters is 1.04167ms per character and finaly modbus states an
// intercharacter must be 1.5T or 1.5 times longer than a normal character and thus
// 1.5T = 1.04167ms * 1.5 = 1.5625ms. A frame delay is 3.5T.    

if (baud > 19200)
{
    T1_5 = 750; 
    T3_5 = 1750; 
}
else 
{
    T1_5 = 15000000/baud; 
    T3_5 = 35000000/baud; 
}
Run Code Online (Sandbox Code Playgroud)

  • 应该注意的是,Modbus RTU每个字符使用11位(8*数据,奇偶校验,启动,停止),而不是10.上述值对于使用10位的非标准实现是正确的,通常是通过省略奇偶校验位和没有通过添加另一个停止位来补偿它.对于11位,它们应分别为"16500000 /波特"和"38500000 /波特". (4认同)