import time
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
from pymodbus.payload import BinaryPayloadDecoder
设定串口和波特率
PORT = '/dev/ttyS0'
BAUD_RATE = 9600
初始化Modbus客户端
client = ModbusClient(method='rtu', port=PORT, baudrate=BAUD_RATE, stopbits=1, bytesize=8, parity='N')
client.connect()
try:
while True:
# 读取从机地址0的寄存器值,起始地址为1,读取10个寄存器
result = client.read_holding_registers(1, 10)
if result:
print('Registers:', result.registers)
# 使用BinaryPayloadDecoder解码
decoder = BinaryPayloadDecoder.fromRegisters(result.registers, byteorder=Endian.Big)
# 解码出整数和浮点数
int_value = decoder.decode_32bit_int()
float_value = decoder.decode_32bit_float()
print('Decoded Integers:', int_value)
print('Decoded Floats:', float_value)
time.sleep(1)
except KeyboardInterrupt:
print("Stopped")
finally:
client.close()
这段代码使用了pymodbus库,通过RTU方式连接ModBus从机,并循环读取从机地址0的10个寄存器值,然后使用BinaryPayloadDecoder解码出整数和浮点数。这个例子简单展示了如何使用Python进行ModBus通信,并对获取的数据进行解码。