56 lines
1.8 KiB
Python
Executable File
56 lines
1.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
from pymodbus.client import ModbusTcpClient
|
|
|
|
NODES = [
|
|
{"machine_id": "CORT-01", "source_node": "wise-cort-00", "ip": "10.43.54.249"},
|
|
{"machine_id": "CORT-00", "source_node": "wise-cort-01", "ip": "10.43.54.251"},
|
|
{"machine_id": "CORT-02", "source_node": "wise-cort-02", "ip": "10.43.54.55"},
|
|
]
|
|
|
|
UNIT = 1
|
|
|
|
|
|
def u32_lo_hi(lo, hi):
|
|
return (lo & 0xFFFF) + ((hi & 0xFFFF) << 16)
|
|
|
|
|
|
for node in NODES:
|
|
print()
|
|
print("==================================================")
|
|
print(node["machine_id"], node["source_node"], node["ip"])
|
|
print("==================================================")
|
|
|
|
client = ModbusTcpClient(node["ip"], port=502, timeout=3)
|
|
|
|
if not client.connect():
|
|
print("ERROR: no conecta")
|
|
continue
|
|
|
|
try:
|
|
rr_di = client.read_discrete_inputs(address=0, count=2, device_id=UNIT)
|
|
if rr_di.isError():
|
|
print("ERROR DI:", rr_di)
|
|
else:
|
|
print("DI0 marcha:", bool(rr_di.bits[0]))
|
|
print("DI1 estado:", bool(rr_di.bits[1]))
|
|
|
|
rr_cnt = client.read_holding_registers(address=0, count=4, device_id=UNIT)
|
|
if rr_cnt.isError():
|
|
print("ERROR counter:", rr_cnt)
|
|
else:
|
|
regs = rr_cnt.registers
|
|
di0_counter = u32_lo_hi(regs[0], regs[1])
|
|
di1_counter = u32_lo_hi(regs[2], regs[3])
|
|
print("DI0 counter:", di0_counter)
|
|
print("DI1 counter:", di1_counter)
|
|
print("raw counter:", regs)
|
|
|
|
rr_energy = client.read_holding_registers(address=1000, count=20, device_id=UNIT)
|
|
if rr_energy.isError():
|
|
print("ERROR energy:", rr_energy)
|
|
else:
|
|
print("Energy registers OK, first values:", rr_energy.registers[:6])
|
|
|
|
finally:
|
|
client.close()
|