我对Modbus TCP / IP中的多主机有一个奇怪的问题。我知道Modbus Serial不支持多主机。但是当我看到一些文档时,他们说Modbus TCP支持多主机。
我将三个tcp客户端组成Modbus TCP主站,将服务器组成Modbus TCP slave。每个Modbus TCP主站请求Modbus TCP从站定期每2秒获取一次数据。我使用Modbus TCP堆栈作为主设备,由Triangle MicroWorks制作。
我希望每个主人都可以从奴隶接收数据,但实际上是一个 master只与slave通信良好,其他master无法接收数据。他们只收到返回状态“3”,表示“MBCHNL_RESP_STATUS_CANCELED”。
在这个构图中,这种行为是对的吗? 我想知道堆栈是否支持“多主/多个相同请求”,或者还有其他方法来表现多主机。
答案 0 :(得分:1)
我找到了这个问题的答案。 简而言之,主人太快了,奴隶频道很忙。我无法保证所有类型的modbus堆栈都是这样做的,但在那种情况下确实如此。
返回消息“MBCHNL_RESP_STATUS_CANCELED”来自TMW堆栈代码中的消息队列,因为有一些代码用于检查以确保这不是重复请求。因此,从属通道无法同时处理来自三个主服务器的消息,然后每个主服务器的消息都保留在自己的队列中。
我问过Triangle Microworks同样的问题,我上周收到了他们的意见。 “...您可以拥有多个频道(每个频道必须具有唯一的IP /端口组合)。 仅1个频道2秒可能太快。 ...尝试将时间段更改为3秒,依此类推。“
我认为这不是完美的答案,所以我改进了请求如下的逻辑。 - 每2秒发送一次,但如果我只收到回复。
沟通比以往更流畅。它看起来更连续。有时,主人不能收到几秒钟,但几秒钟后,他们再次沟通良好。
我知道这也不是一个完美的答案。如果我找到了更好的答案,我会再写一次。