Pymodbus 从多个电能表读取

问题描述 投票:0回答:1

在我们公司,我们将安装多个电能表(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")

谢谢。

python modbus modbus-tcp pymodbus pymodbustcp
1个回答
0
投票

这是我的代码示例:

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")
© www.soinside.com 2019 - 2024. All rights reserved.