如何使用 pymodbus 读取寄存器

Sur*_*e D 5 python modbus

如何使用 pymodbus 读取 Register 内容?

我正在尝试这段代码:

import pymodbus
from pymodbus.pdu import ModbusRequest
from pymodbus.client.sync import ModbusSerialClient as ModbusClient 
#initialize a serial RTU client instance
from pymodbus.transaction import ModbusRtuFramer

#count= the number of registers to read
#unit= the slave unit this request is targeting
#address= the starting address to read from

client = ModbusClient(method = 'rtu', port='/dev/extcomm/0/0', stopbits = 1, bytesize = 8, parity = 'N' , baudrate= 38400)

#Connect to the serial modbus server
 connection = client.connect()
 print(connection)

#Starting add, num of reg to read, slave unit.
coil  = client.read_holding_registers(0x01,1,unit=1)# address, count, 
slave address
print(coil)

#Closes the underlying socket connection
client.close()
Run Code Online (Sandbox Code Playgroud)

这给了我这个错误:

    Modbus Error: [Input/Output] Modbus Error: [Invalid Message] Incomplete message received, expected at least 2 bytes (0 received)
Run Code Online (Sandbox Code Playgroud)

我的从属ID是数字1,我​​想读取的寄存器也是数字1,但我不知道为什么仍然不想工作。

小智 2

这段代码也适用于我:

from pymodbus.client.sync import ModbusSerialClient as ModbusClient

client = ModbusClient(method='rtu', port='COM5', baudrate=9600, timeout=0.5)

client.connect()
read=client.read_holding_registers(address = 0x00,
                                 count =65,
                                 unit=1)

data=read.registers[int(64)] #read register id 64
print(data) #print register data
Run Code Online (Sandbox Code Playgroud)

也许你应该尝试这个:

print(coil.registers)
Run Code Online (Sandbox Code Playgroud)