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.')
[注]:
- 在许多情况下,默认
unit
1
从属端。