有没有一种方法可以用python库minimalmodbus读取设备上的一组寄存器?还是我需要像这样一个接一个地读取_register?
instrument.read_register(0x0033,1)
查看read_registers()
的minimalmodbus文档。您不需要更改函数代码参数。
假设您想要前125个寄存器,从寄存器0开始:
registers = instrument.read_registers(0, 125)
如果你想打印这些寄存器:
for idx in range(len(registers)):
print(f"Register {idx:3d} : {registers[idx]:5d} ({hex(registers[idx])})")
这将输出类似于:
Register 0 : 0 (0x0)
Register 1 : 1 (0x1)
Register 2 : 2 (0x2)
Register 3 : 3 (0x3)
Register 4 : 4 (0x4)
…
编辑:查看规范文件的第9页,有16位和32位寄存器混合在一起。明确地阅读它们会更容易。否则,您将需要对两个16位寄存器进行移位和组合,这很烦人,并且minimalmodbus具有使其更容易出错的功能。
例如
# 0000h 2 V L1-N INT32 Value weight: Volt*10
# read_long(registeraddress: int, functioncode: int = 3, signed: bool = False, byteorder: int = 0) → int
L1_N_voltage = instrument.read_long(0, signed=True) / 10
# 0028h 2 W sys INT32 Value weight: Watt*10
sys_wattage = instrument.read_long(0x28, signed=True) / 10
请注意,read_long()
不支持number_of_decimals
,因此需要手动将读数除以10。对于电流和功率因数,您需要除以1000。