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

问题描述 投票:0回答:1

我对Modbus中的字符间空隙有点困惑,以及当主站向从站发送消息时是否需要它。 协议规范说,传输时字节之间的间隔不能超过3.5个字符,但是否有任何具体的最小时间间隔?

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

字符间隙是一个绝对的要求,还是取决于设备的制造和如何实现Modbus协议?

serial-port modbus
1个回答
2
投票

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

不,事实上 Modbus规格 在本节中指出 2.5.1.1 MODBUS报文RTU帧化"整个电文框必须作为连续的字符流传送。 "要求字符间的空白与规定 "字符间的空白 "是矛盾的。"源源不断".

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

你曲解了协议规范。RTU信息中的字符之间只能有1.5个字符的间隙。

从Modbus规范中: "如果在两个字符之间出现超过1. 5个字符的静默间隔,消息帧将被宣布为不完整,并应被接收方丢弃。"

一个持续时间为3.5个字符的静音(空闲)行必须在消息前出现。即2个(即大于1.5而小于3.5)字符的空隙将过早地结束当前的报文,而下面的字符(该畸形报文的)将是 被认为是一个新消息的开始,并被丢弃。

... 是否有任何特定的最小时间量,你必须有一个字节之间?

Modbus规范中没有提到任何这样的要求。这样的要求是不切实际的。

UART不具备通过在字符帧的传输之间插入延迟来测量其输出的能力。增加这样的延迟是一个额外的处理器负担,也是一个定时器的使用。相反,UART已经发展到在波特率允许的情况下以最少的处理器干预来传输字符,例如硬件FIFO和DMA。

A "你必须有最小的时间间隔的字节" 只是降低了有效的数据速率。因此,适当降低波特率可以达到完全相同的数据速率。


字符间隙是一个绝对的要求,还是取决于设备的制造和如何实现Modbus协议?

不,您可能使用了过快的波特率来满足相关设备的需求。

一个微处理器或微控制器应该能够让UART保持忙碌,并且在传输过程中没有任何字符间的间隙。一个在接收过程中需要间隙的UART是一个过载的系统,并且是坏的。对于可靠的通信(没有流量控制),使用足够低的波特率,这样就不需要对传输的字符进行计量。


1
投票

就是在信息结束时,应该有3.5个字符或更长时间的停顿。

通常在数据传输协议中,在字节序列的前几位,都包含了后面的字节数,但Modbus RTU并没有发送这个长度,决定信息结束的是3.5个字符的停顿。

如果一次发送字节序列,字符之间就不应该有任何停顿。

如果你写的是主站,你就不用担心这个问题,因为是从站必须等待3.5个字符,才能知道主站请求什么时候结束,你从主站那边只要等待从站的回复就可以了,因为你知道从站要发送多少字节,在请求中你已经发送了你要读取多少位或16位的字。

而如果你和一些设备的通信有问题,很可能是由于通信速度和线路质量不好共同造成的。试试更低的波特率吧,但是在字符之间增加等待对我来说意义不大。

© www.soinside.com 2019 - 2024. All rights reserved.