如果我搜索足够长的时间,我通常会找到答案。但是今天是这一天......我从 Aliexpress 购买了一个带有 MODBUS RTU 连接的 EnergyMeter,我正试图读出它。我已经尝试了很多来自互联网的东西。
这是 EnergyMeter 1的数据表
我试过pyModbus和minimalmodbus。
我的两个脚本:
#!/usr/bin/env python3
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
client = ModbusClient(method='rtu', port='/dev/ttyUSB0', timeout=1, stopbits = 1, bytesize = 8, parity='N', baudrate= 9600)
client.connect()
request = client.read_holding_registers(0x00,0x01,unit=2)
print (request.registers)`
和
#!/usr/bin/env python3
import time
import minimalmodbus
rs485 = minimalmodbus.Instrument('/dev/ttyUSB0', 2)
rs485.serial.baudrate = 9600
rs485.serial.bytesize = 8
rs485.serial.parity = minimalmodbus.serial.PARITY_NONE
rs485.serial.stopbits = 1
rs485.serial.timeout = 1
rs485.debug = False
rs485.mode = minimalmodbus.MODE_RTU
print (rs485)
print(rs485.read_register(0, functioncode=4,))
#Volts_A = rs485.read_float(0, functioncode=4, number_of_registers=4)
#print ('Voltage: {0:.1f} Volts'.format(Volts_A))
看来我可以读取数据(第一个脚本输出 17942 和第二个 17248。但老实说,我不知道如何处理它。我也不明白那个代码......手册指出我必须发送一个 Hi 和一个低地址,但我该怎么做?0x00 是六进制 - 我必须转换这个吗?如何?
我必须发送 Adress+functioncode+data+crc 的手动统计信息 - 如何执行此操作,或者 pymod/minimod 是否自动执行此操作?现在如何正确的功能代码等?我完全糊涂了,如果有人可以帮助我,我会很高兴...
谢谢