5

我有一些在 pymodbus 1.2 下编写的 modbus TCP 代码,相关代码是

result = modbus_client.read_holding_registers(40093, 3)

更新到 pymodbus 1.4.0 后,它无法工作,直到我将新的 unit 参数添加到函数调用中(示例中都有 unit=1):

result = modbus_client.read_holding_registers(40093, 3, unit=1)

pymodbus read_holding_registers()中的unit参数是什么意思?我似乎无法在任何地方找到解释。消息来源说“:param unit:此请求所针对的从属单元”,但我不明白这是什么意思,也不明白除了 1 之外的其他选择。

4

1 回答 1

6

Modbus 协议最初是在 TCP/IP 流行之前很久(我认为是 70 年代后期)开发的。它主要用于串行连接。一些串行硬件协议(如 RS485)允许菊花链。modbus 主机(在您的情况下为 Python)可以在单个串行端口上轮询许多从机。只有被请求的从站才会响应。在这种情况下,从站的地址是单元。一旦 Modbus 适应 TCP/IP,该协议就允许使用此“单元地址”在单个 IP 地址后面创建多个从站。大多数情况下,如果使用 TCP/IP,则只有一个地址 1。在 Wikipedia 上,他们将此称为“站地址”。

我不确定为什么你需要在方法调用中包含它,因为它是一个默认为 1 的 kwarg。

于 2018-05-15T23:09:25.050 回答