Pymodbus - 简单程序

Pymodbus - Simple program

我一直在使用 python 中的 pymodbus 库编写一个简单的程序。这是我在库文档中找到的示例程序。代码如下

from pymodbus.client.sync import ModbusTcpClient

client = ModbusTcpClient('192.168.10.3')
client.write_coil(410001, False)
result = client.read_coils(410001,1,unit=1)
print result.bits[0]
client.close()

我遇到错误

Traceback (most recent call last):
  File "start_2407.py", line 4, in <module>
    client.write_coil(410001, False)
  File "build\bdist.win-amd64\egg\pymodbus\client\common.py", line 61, in write_coil
  File "build\bdist.win-amd64\egg\pymodbus\client\sync.py", line 131, in execute
  File "build\bdist.win-amd64\egg\pymodbus\client\sync.py", line 46, in execute
  File "build\bdist.win-amd64\egg\pymodbus\transaction.py", line 243, in buildPacket
  File "build\bdist.win-amd64\egg\pymodbus\bit_write_message.py", line 58, in encode
struct.error: 'H' format requires 0 <= number <= 65535

我需要提供十六进制的地址位置吗?我也试过了,但输出与我从 Modscan2 获得的输出不匹配。

Modbus 变量在 0-65535 范围内寻址。您最多可以有 65536 个线圈、离散输入、输入寄存器和保持寄存器。 不允许使用 410001 作为 PyModbus 的输入。 410001 是一种非常传统(非标准)的方式来表示第 10000 个保持寄存器。 是的,这很奇怪。 Modbus 供应商在提出内存映射时非常有创意。

您可以使用地址=10000 的read_holding_registers 方法读取该寄存器。