Camax Powercom3 User Manual page 18

Undercover modbus unit
Table of Contents

Advertisement

readCumulatives.py
import sys
import getopt
import struct
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
def getFloatBigEndian(client,unit, address):
regs = client.read_input_registers(address=address, count=2, unit=unit).registers
ii = regs[0] * 0x10000 + regs[1]
f = struct.unpack('f', struct.pack('I', ii))
return f[0]
def getDoubleBigEndian(client, unit, address):
try:
except:
try:
except Exception, e:
def getDoubleArray(client,unit,address,count):
values = []
startAddress = address
for i in xrange(0, count):
f = getDoubleBigEndian(client=client,unit=unit, address=startAddress)
values.append(f)
startAddress = startAddress + 4;
return values
if name == ' main ':
labels = ['ImportWh', 'ExportWh', 'Q1varh', 'Q2varh', 'Q3varh', 'Q4varh', 'VAh']
optlist, arglist = getopt.getopt(sys.argv[1:], 'p:a:')
serialPort = None
address = None
for option, value in optlist:
if option == '-p':
elif option == '-a':
if serialPort is None or address is None:
print "Usage: python readCumulatives.py -p <serial port> -a <modbus address>"
sys.exit()
client = ModbusClient(method='rtu', port=serialPort, parity='N', baudrate=9600, timeout=0.1)
values = getDoubleArray(client=client,unit=address, address=200, count=7)
for ndx in range(len(values)):
print labels[ndx], '\t', values[ndx]
tmpaddress = int(address)
tmpunit = int(unit)
return None
regs = client.read_input_registers(address=tmpaddress, count=4, unit=tmpunit).registers
p = struct.pack('!HHHH', regs[0], regs[1], regs[2], regs[3])
f = struct.unpack('!d', p)
return f[0]
print 'Modbus error reading '+str(address)+' from unit '+str(unit)+':', str(e)
return None
serialPort = str(value)
address = int(value)
Page 18

Advertisement

Table of Contents
loading

Table of Contents