响应延迟不正确的现场 Modbus RTU 硬件

Modbus RTU Hardware in the Field with Incorrect Response Delay

我们的现场硬件使用 RS-485/Modbus RTU(1200、9600 到 115200)以各种不同的波特率进行通信。

我们设备上的固件 运行 有一个小错误,其中 Modbus RTU 响应延迟是固定的,并根据 运行 在 115200 波特率下计算。直到最近我们的一位客户开始使用 1200 波特率时才注意到这个问题。看来 115200 响应延迟足以满足低至 9600 的所有要求。

虽然在 1200 波特率下,响应数据包的第一个字节被丢失(我假设是由于在 1200 波特率下从发送切换到接收需要时间)。如果请求大数据包,一切正常(因为设备将数据包放在一起所花费的时间弥补了延迟的不足),尽管大多数数据包都已损坏。

不幸的是,升级这些已经在现场的设备上的固件以使用 correct/longer 响应延迟不是一种选择。有没有人知道我们如何以 1200 波特率检索完整数据包? (当前导致 1 个字节丢失的错误响应延迟)

我能想到的唯一想法是在每次请求时从软件请求过多的寄存器,从而导致延迟增加。

如果我正确理解你的问题,我曾经遇到过同样的问题。

我被要求对一个非常不可靠的 Modbus link 进行故障排除,该 Modbus 经常出现故障,但在短时间内,它工作正常。

在检查了所有其他明显的参数后,我连接了示波器,这就是我所看到的:

事实证明,从属设备上的固件存在问题:它在收到查询的停止位后立即触发其 Modbus 应答。所以部分答案在之前大师有时间释放总线(图中黄色箭头)

当时我们对在 salve 上更新固件的前景不满意,所以我们首先探索了其他选择。我们想出的最好的办法是在主机(Schneider Electric 的 PLC)上进行设置,允许调整总线在其停止位后由主机断言的时间。

manual 中是这样定义的:

我依稀记得我们能够改善这种情况,但是每次出现错误时都有一个看门狗在某处触发警报,所以这个解决方案被认为是不可接受的,我们不得不更新固件。

与您的问题有些相关,我曾经测量过使用硬件方向控制与软件解决方案释放总线所需的时间。你可以看到一些细节here. If updating the firmware is a no-go for you I guess messing with the transceiver won't be an option either... At the end of this 我link设计了一个电路来自动切换RS485的方向控制线link。如果您的 Master 不能更快地切换,那可能是一个(公认的糟糕)解决方案。