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 方法读取该寄存器。
我一直在使用 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 方法读取该寄存器。