在我们公司,我们将安装多个电能表(abb m4m ethernet 20)。该电能表通过 modbus tcp/ip 工作。
我有一个有效的 python 脚本,用于从我们已有的寄存器中读取寄存器,但问题是,当我们拥有多个寄存器时,我将如何一次读取所有数据?
*这是我第一次使用 modbus 和 python,我不知道这是怎么做到的。
当前代码(不是全部但主要):
from pymodbus.client import ModbusTcpClient
from decimal import *
IP = '192.168.30.156'
client = ModbusTcpClient(IP)
power_register = client.read_holding_registers(23322, 2)
energy_register = client.read_holding_registers(20480, 4)
power_calculation = round(((power_register.registers[0] * pow(2, 16) + power_register.registers[1]) * 0.01 / 1000), 2)
energy_calculation = round(((energy_register.registers[2] * pow(2, 16) + energy_register.registers[3]) * 0.01), 1)
print(power_calculation, "kW")
print(energy_calculation, "kWh")
谢谢。
这是我的代码示例:
from pymodbus.client import ModbusTcpClient
from decimal import *
ips = ['192.168.30.156', '192.168.30.157', '192.168.30.158']
clients = []
for ip in ips:
clients.append(ModbusTcpClient(ip))
power_registers = []
energy_registers = []
for client in clients:
power_registers.append(client.read_holding_registers(23322, 2))
energy_registers.append(client.read_holding_registers(20480, 4))
power_calculations = []
energy_calculations = []
for i in range(len(clients)):
power_calculation = round(((power_registers[i].registers[0] * pow(2, 16) + power_registers[i].registers[1]) * 0.01 / 1000), 2)
energy_calculation = round(((energy_registers[i].registers[2] * pow(2, 16) + energy_registers[i].registers[3]) * 0.01), 1)
power_calculations.append(power_calculation)
energy_calculations.append(energy_calculation)
for i in range(len(clients)):
print("Meter", i+1, "power:", power_calculations[i], "kW")
print("Meter", i+1, "energy:", energy_calculations[i], "kWh")