我一直在使用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获得的输出不匹配。
答案 0 :(得分:1)
Modbus变量在0-65535范围内寻址。最多可以有65536个线圈,离散输入,输入寄存器和保持寄存器。 您不能使用410001作为PyModbus的输入。 410001是表示第10000个保持寄存器的非常传统(非标准)方式。 是的,这很奇怪。在提出他们的记忆地图时,Modbus供应商非常有创意。
您可以使用地址= 10000的read_holding_registers方法读取该寄存器。