Pymodbus reading from multiple energy meters
Question:
in our company we will install multiple energy meters (abb m4m ethernet 20). This energy meter works via modbus tcp/ip.
I have a working python script for reading registers from one that we already have but the problem is that when we will have multiple of them how will i be able to read data from all at once?
*This is my first time working with modbus and python and i dont know how this is done.
Current code (not all of it but main):
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")
Thank you.
Answers:
here is my code example for it:
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")
in our company we will install multiple energy meters (abb m4m ethernet 20). This energy meter works via modbus tcp/ip.
I have a working python script for reading registers from one that we already have but the problem is that when we will have multiple of them how will i be able to read data from all at once?
*This is my first time working with modbus and python and i dont know how this is done.
Current code (not all of it but main):
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")
Thank you.
here is my code example for it:
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")