Pymodbus - 简单的程序

时间:2015-07-24 08:06:08

标签: python tcp modbus

我一直在使用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获得的输出不匹配。

1 个答案:

答案 0 :(得分:1)

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

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