Serial port Modbus RTU在传输时是否要求字符之间有间隙?

Serial port Modbus RTU在传输时是否要求字符之间有间隙?,serial-port,modbus,Serial Port,Modbus,我对Modbus中的字符间隙有点困惑,以及当主设备向从设备发送消息时是否需要这样做。协议规范规定,在传输时,字节之间的间隔不能超过3.5个字符,但字节之间是否有任何特定的最小间隔时间 我已经编写了一个Modbus驱动程序主控程序,它能够与各种设备进行通信,大多数设备在接收消息时似乎并不关心字符之间的任何间隙。然而,我遇到过一些设备,在这些设备中,如果不在字节之间加入某种以微秒为单位的延迟(这是由波特率决定的),我就无法可靠地进行通信 字符间隙是一项绝对要求,还是取决于设备的制造以及设备如何实现M

我对Modbus中的字符间隙有点困惑,以及当主设备向从设备发送消息时是否需要这样做。协议规范规定,在传输时,字节之间的间隔不能超过3.5个字符,但字节之间是否有任何特定的最小间隔时间

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

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

Modbus RTU在传输时是否要求字符之间有间隙

没有。 事实上,第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)以波特率允许的速度传输字符

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

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

不,您可能对所讨论的设备/环境使用了太快的波特率

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

Modbus RTU在传输时是否要求字符之间有间隙

没有。 事实上,第2.5.1.1节MODBUS消息RTU帧中规定,整个消息帧必须作为连续字符流传输。 需要字符间间隙与指定连续流是矛盾的

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

你在错误地引用协议规范。 RTU消息中的字符之间仅允许有1.5个字符的间隔

根据Modbus规范:如果两个字符之间的静默间隔超过1.5个字符,则消息帧被宣布为不完整,接收方应丢弃该消息帧

消息前必须有持续时间为3.5个字符的静默空闲行。 如果间隔为2,即大于1.5个字符且小于3.5个字符,则会过早结束当前消息,并且该格式错误消息的以下字符将不会被视为新消息的开始并被丢弃

。。。在字节之间是否有任何特定的最小时间

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

UART无法通过在字符帧传输之间插入延迟来测量其输出。 增加这样的延迟不仅会增加处理器负担,还会增加计时器的使用。 相反,UART已经发展到以最少的处理器干预以波特率允许的速度传输字符, e、 g.硬件FIFO和DMA

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

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

不,您可能对所讨论的设备/环境使用了太快的波特率

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

消息末尾应暂停3.5个字符或更长时间

通常,在字节序列第一个位置的数据传输协议中,包括后面的字节数,但Modbus RTU不发送该长度,确定消息何时结束的是3.5个字符的暂停

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

如果您正在编写一个主程序,您不必担心这一点,因为从程序必须等待3.5个字符才能知道主程序请求何时完成。 您只需等待从机回复,因为您知道从机将发送多少字节,在请求中,您已经发送了多少位或16位字,您想读取


如果某些设备存在通信问题,可能是由于通信速度和线路质量差的综合原因。尝试较低的波特率,但在字符之间添加等待对我来说没有多大意义。

消息末尾应该有3.5个字符或更长的暂停

通常,在字节序列第一个位置的数据传输协议中,包括后面的字节数,但Modbus RTU不发送该长度,确定消息何时结束的是3.5个字符的暂停

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

如果您正在编写一个主程序,您不必担心这一点,因为从程序必须等待3.5个字符才能知道主程序请求何时完成。 您只需等待从机回复,因为您知道从机将发送多少字节,在请求中,您已经发送了多少位或16位字,您想读取


如果某些设备存在通信问题,可能是由于通信速度和线路质量差的综合原因。尝试较低的波特率,但在字符之间添加等待对我来说没有多大意义。

谢谢,是的,我把数字弄混了。抱歉,谢谢,是的,我把数字弄错了。道歉。