Modbus TCP 中的多主机

Multi-master in Modbus TCP

我在 Modbus TCP/IP 中遇到多主机的奇怪问题。我知道 Modbus Serial 不支持多主机。但是看到一些文档说Modbus TCP支持multi master

我组成了三个tcp 客户端作为Modbus TCP 主站和一个服务器作为Modbus TCP 从站。每个 Modbus TCP 主站每隔 2 秒定期请求 Modbus TCP 从站获取数据。主设备我用的是Modbus TCP协议栈,是Triangle MicroWorks的。

我以为每个master都能收到slave的数据,结果只有一个 master只和slave通信良好,其他master收不到数据。他们只收到 return 状态“3”,这意味着 "MBCHNL_RESP_STATUS_CANCELED".

在这篇作文中,这种行为对吗? 我想知道堆栈是否不支持 "multi-master/multiple same request" 或者是否有其他方式来表现多主机。

我找到了这个问题的答案。 简而言之,masters 太快了,slave channel 很忙。我不能保证所有类型的 modbus 堆栈都这样做,但在那种情况下确实如此。

return 消息 "MBCHNL_RESP_STATUS_CANCELED" 来自 TMW 堆栈代码中的消息队列,因为有一些代码用于检查以确保这不是重复请求。所以slave channel无法承受同时处理来自三个master的消息,然后每个master的消息都留在自己的队列中。

我问过Triangle Microworks同样的问题,我上周收到了他们的意见。 “...您可以拥有多个频道(每个频道必须具有唯一的 ip/port 组合)。 2 秒对于只有 1 个通道来说可能太快了。 ...尝试将周期更改为 3 秒,依此类推。"

我认为这不是完美的答案,所以我改进了如下请求的逻辑。 - 每 2 秒发送一次,但如果我只收到响应。

交流比以前更流畅了。看起来更连续。有的时候,高手有些秒收不到,但过了一些秒,他们又沟通好了。

我知道这也不是一个完美的答案。如果我找到更好的答案,我会再写一次。