1

我对 Modbus TCP/IP 中的多主机有一个奇怪的问题。我知道 Modbus Serial 不支持多主机。但是当我看到一些文档时,他们说 Modbus TCP 支持多主机。

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

我以为每个master都可以从slave接收数据,但实际上,一个master只能与slave通信良好,其他master无法接收数据。他们只收到返回状态“3”,即“MBCHNL_RESP_STATUS_CANCELED”。

在这个组合中,这种行为是否正确?我想知道堆栈是否不支持“多主/多个相同的请求”,或者还有其他方式来表现多主。

4

1 回答 1

2

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

返回消息“MBCHNL_RESP_STATUS_CANCELED”来自 TMW 堆栈代码中的消息队列,因为有一些代码用于检查以确保这不是重复请求。所以从通道不能同时处理来自三个master的消息,然后每个master的消息都留在自己的队列中。

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

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

沟通比以前更流畅。它看起来更连续。有时,masters 无法接收到几秒钟,但在几秒钟后,它们再次通信良好。

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

于 2017-06-21T08:20:14.677 回答