Modbus TCP 中的多主站

Posted

技术标签:

【中文标题】Modbus TCP 中的多主站【英文标题】:Multi-master in Modbus TCP 【发布时间】:2017-10-31 17:03:42 【问题描述】:

我对 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”。

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

【问题讨论】:

【参考方案1】:

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

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

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

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

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

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

【讨论】:

以上是关于Modbus TCP 中的多主站的主要内容,如果未能解决你的问题,请参考以下文章

ejabberd 集群:多主或主从

如何在 Perl 中设置与 DBIx::Class 的多主列 1:n 关系?

MariaDB Galera Cluster实现mariadb的多主复制

基于SymmetricDS的多主一从数据库同步方案

MySQL组复制:配置多主模型的组复制

python 基于modbus_tk库实现modbusTCP 主站和从站[非常详细]