【发布时间】:2019-01-01 19:56:26
【问题描述】:
我正在尝试运行这段代码:
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
import logging
logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.DEBUG)
client = ModbusClient(method='rtu', baudrate=9600, parity='E', port='/dev/ttyUSB0', timeout=1)
client.connect()
rr = client.read_holding_registers(40000, 7, unit=0x01)
print rr
client.close()
但我只得到这个:
DEBUG:pymodbus.transaction:Running transaction 1
DEBUG:pymodbus.factory:Factory Response[131]
DEBUG:pymodbus.transaction:adding transaction 0
DEBUG:pymodbus.transaction:getting transaction 1
Exception Response(131, 3, IllegalAddress)
另一方面,这个 C 代码(使用 libmodbus)正在运行:
modbus_t *mb;
int16_t hregs[9];
mb = modbus_new_rtu('/dev/ttyUSB0', 9600, 'E', 8, 1);
modbus_set_slave(mb, 1);
modbus_read_registers(mb, 0x40000, 7, hregs)
我做错了什么?
【问题讨论】:
-
您确定您的 libmodbus 代码正常工作吗?您正在读取地址 0x40000 (262144),没有 Modbus 从站将接受此地址。
-
是的,我确定 C 代码可以正常工作。
-
您是否尝试过使用
0x40000或0x400(在许多情况下是默认设置)?0x40000(十六进制)与40000(十进制)不同