Modbus RTU传输时字符之间是否需要间隙?

Dav*_*veR 1 serial-port modbus

我对 Modbus 中的字符间间隙以及主机向从机发送消息时是否需要它感到有点困惑。协议规范规定传输时字节之间的间隔不能超过 3.5 个字符,但是字节之间是否有特定的最小时间间隔?

我编写了一个 Modbus 驱动程序(主),它能够与各种设备通信,并且大多数设备在接收消息时似乎并不关心字符之间的任何间隙。然而,我遇到过一些设备,如果不在字节之间添加某种延迟(以微秒为单位),我就无法可靠地进行通信,这是由波特率决定的。

字符间隙是绝对要求还是取决于设备的制造以及如何实施 Modbus 协议?

saw*_*ust 6

Modbus RTU传输时字符之间是否需要间隙?

事实上,
Modbus规范在第2.5.1.1 MODBUS 消息 RTU 帧中规定整个消息帧必须作为连续的字符流进行传输”。要求字符间间隙与指定“连续流”
是矛盾的。

协议规范规定传输时字节之间的字符间隔不能超过 3.5 个...

您错误引用了协议规范。
RTU 消息中的字符之间仅允许 1.5 个字符间隙。

根据 Modbus 规范:“如果两个字符之间出现超过 1.5 个字符时间的静默间隔,则消息帧被声明为不完整,应被接收器丢弃。”

消息之前必须有一个持续时间为 3.5 个字符的静默(空闲)行。
IOW 2 个(即大于 1.5 且小于 3.5)个字符的间隙将过早结束当前消息,并且(该格式错误的消息的)后续字符将不会视为新消息的开始,并且必须被丢弃(直到线路空闲至少 3.5 个字符)。

...字节之间必须有任何特定的最短时间吗?

Modbus 规范没有提及任何此类要求。
这样的要求是不切实际的。

UART(通常)不具备通过在字符帧传输之间插入延迟来计量其输出的能力。
添加这样的延迟会带来额外的处理器负担以及计时器的使用。
相反,UART 已经发展到以波特率允许的最快速度传输字符,同时处理器干预最少,例如硬件 FIFO 和 DMA。

“字节之间必须有的最短时间”只是有效数据速率的降低。
因此,适当降低波特率将实现完全相同的数据速率。


字符间隙是绝对要求还是取决于设备的制造以及如何实施 Modbus 协议?

不,对于相关设备/环境,您可能使用的波特率太快。

微处理器或微控制器应该能够使 UART 保持忙碌并在没有任何字符间间隙的情况下进行传输。
在接收过程中需要间隙的 UART 在我看来是一个过载系统并且已损坏。
为了实现可靠的通信(无流量控制),请使用足够低的波特率,以便无需计量传输的字符。


附录

显然,至少有一个 UART(来自西门子)可以通过在字符帧之间保持线路空闲 N 位时间来测量其输出。