pymodbus“单位”参数是啥意思?
Posted
技术标签:
【中文标题】pymodbus“单位”参数是啥意思?【英文标题】:What does the pymodbus "unit" parameter mean?pymodbus“单位”参数是什么意思? 【发布时间】:2018-10-25 20:45:36 【问题描述】:我有一些在 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 之外还有什么选择。
【问题讨论】:
这是 modbus 从站 ID,可能是您有多个链接的 modbus 从站/服务器,每个从站都有一个唯一的unit_ID
。
【参考方案1】:
Modbus 协议最初是在 TCP/IP 流行之前很久(我认为是 70 年代后期)开发的。它主要用于串行连接。一些串行硬件协议(如 RS485)允许菊花链。 modbus 主机(在您的情况下为 Python)可以在单个串行端口上轮询许多从机。只有被请求的从站才会响应。在这种情况下,从站的地址是单元。一旦 Modbus 适应 TCP/IP,该协议就允许使用此“单元地址”在单个 IP 地址后面创建多个从站。大多数情况下,如果使用 TCP/IP,则只有一个地址 1。在 Wikipedia 上,他们将此称为“站地址”。
我不知道为什么你需要在方法调用中包含这个,因为它是一个默认为 1 的 kwarg。
【讨论】:
感谢您的回复。看起来它默认为 0 github上的最新版本。这似乎是一个错误,至少对于 tcp 而言。我明天需要再看一遍。 我相信 unit=0 是一个有效的地址。如果这是真的,这将不是一个错误。如果您的从站的单元地址为 1,您将需要使用 unit kwarg。 我读到 0 表示发送到 modbus RTU 上的每个从站。我对TCP一无所知。看起来有点退化,但我只使用 modbus 几个月,所以我知道什么。 @AdamSolchenbergerunit_ID
在 modbustcp 或 modbusrtu 中是一样的,这是 slave_ID
我最近遇到了一个案例,modbus tcp slave 本身就是一个 modbus rtu master,并且将它自己的 slave 暴露给 tcp,因此尽管连接到单个 IP 地址,但仍需要 slave id。举个具体的例子,一切都清楚了。以上是关于pymodbus“单位”参数是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章