3

有谁知道可以自动设置MODBUS地址的方案?在我的情况下,我将启动许多从属设备,并且需要一些自动分配地址的方法。

4

3 回答 3

1

我知道这是一篇旧帖子,但我只是遇到了这个,并认为我会给出答案,以防有人现在或将来尝试这样做。如果目标是将一个从 ID 分配给一个新的从设备(并且您正在为从设备开发固件),您可以将该 ID 存储在一个可以写入新 ID 的保持寄存器中。这确实需要:

  1. 你已经知道这个ID了。也许所有新的奴隶都有一个默认 ID,比如 ID = 1,所以你事先知道 ID。
  2. 您一次只能添加一个从属设备,并且必须在将另一个从属设备添加到网络之前更改 ID。例如:连接并打开第一个从设备,其默认 ID 为 1。发送一个写入命令,将 ID 更改为 2,并向主设备发送响应(在响应中使用从设备 ID 1,因此它不会'不超时)。现在从站 ID 为 2。接下来,将下一个从站添加到网络,其 ID 为 1。现在网络上有两个具有唯一 ID 的从站。只要重复你需要的次数。
于 2021-09-11T14:22:10.240 回答
0

您是在谈论 SLAVE ID 吗?如果是这样,那将不会发生... SlaveID 对于客户端能够寻址串行网络上的所述从属至关重要。(RS485串行网络,大概……)。

因此,甚至无法发送 Modbus 消息并将其寻址到 SlaveID 1,然后以某种方式将该设备设为 SlaveID 1,因为在这种情况下,所有设备都会尝试响应。更不用说,在 Modbus 中没有任何方法可以为从站分配ID ……另一方面……

您是在谈论执行某种类型的查询以询问从设备它们拥有哪些 Modbus寄存器?同样,没有 Modbus 方法可以做到这一点,但是使用一些代码,您可以查询 40001,如果您收到错误 2,那么您知道该寄存器不可用。如果您然后遍历所有寄存器,跟踪哪些寄存器返回非错误,那么您可以执行一种“自动配置”形式,但是......老实说?我不建议这样做,而且我认为这样做没有多大价值,因为您不仅需要知道寄存器编号,还必须知道 寄存器中的数据实际上意味着什么!

你到底想做什么?也许还有另一种方法可以实现这一目标?

于 2015-08-25T22:06:40.933 回答
-1

您认为您想要的:Modbus RTU 中的自动从站 ID 分配。

您真正想要的是:具有 Modbus TCP 的恒定、通用从站 ID。

简而言之,您所有的 Modbus Slave ID 都设置为一个固定的通用值,然后您将它们与支持链路本地寻址或 DHCP 之类的 TCP 堆栈桥接。然后可以动态处理 TCP 地址分配,同时为每个单元保留一个恒定的 SlaveID。

根据您已经拥有的硬件,这里有三种广泛的选择:

  1. 有可以模拟 TCP over RTU 的商用现成设备(例如this)。我没有深入研究他们支持的内容以及他们的工作情况。

  2. 您还可以将大量 TCP 添加到 RTU 网桥,这些网桥将内置 TCP/IP 层管理,然后使用真正的以太网电缆。对于很多设备来说,这可能会很快变得昂贵,但是使用以太网,您可以获得各种奖励功能,例如基本上无限距离和改进的 CRC。如果您希望以便宜的方式执行此操作,请使用双端口 Linux SBC(例如thisthis)并将 mbusd (从此处)扔到上面。

  3. 如果您有权访问或正在自己开发固件,则可以调整 uIP(更简单)或 lwIP(更快)之类的东西来通过 RS-485 (UART) 进行通信。这肯定是最便宜的选择。请注意,您还应该能够检测 RS-485 上的冲突以正确实施 IP 堆栈——这涉及始终回显接收器并检查数据输入和数据输出是否匹配。

于 2020-06-25T20:04:13.570 回答