使用 pymodbus 的 Modbus RTU - 无法从 Modbus 数据读取保持寄存器


from pymodbus.client.sync import ModbusSerialClient as ModbusClient
import logging
def readModbusData():
logging.basicConfig()
log = logging.getLogger()
log.setLevel(logging.DEBUG)
client=ModbusClient(method='rtu',port='COM3',
baudrate=9600,timeout=1,parity='N',stopbits=2)
print(client.connect())
client.debug_enabled()
log.debug("Read holding registers")
response=client.read_holding_registers(0,1)
print(response) #This returns the response for whole length of registers
# print(response.getRegister(0));  #This returns value of only one 

client.close()
readModbusData()

控制台日志:

调试:pymodbus.transaction:send: 0x0 0x3 0x0 0x0 0x0 0x1 0x85 0xdb
DEBUG:pymodbus.client.sync:new transaction state 'send'DEBUG:pymodbus.transaction:将事务状态从'SEND'更改为'WAITING FOR REPLY'MODBUS

错误: [输入/输出]Modbus 错误: [无效消息]
收到不完整的消息,预计至少 2 个字节(收到 0 个字节(

检查此stack_post,

您忘记了unit参数并使用print(response.registers)而不是print(response).

您应该具有以下代码片段:

response = client.read_holding_registers(0, 1, unit=<set-the-unit-ID>)  # Note.
if not response.isError():
'''isError() method implemented in pymodbus 1.4.0 and above'''
print(response.registers)  # Note.
else:
# Handle Error.
print('Unable to read or there is the connection problem.')

[]:

  • 在许多情况下,默认unit1从属端。