Camax Powercom3 User Manual page 20

Undercover modbus unit
Table of Contents

Advertisement

readMD.py
import sys
import getopt
import struct
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
def getIntBigEndian(client,unit, address):
regs = client.read_input_registers(address=address, count=2, unit=unit).registers
i = regs[0] * 0x10000 + regs[1]
return i
def getDoubleBigEndian(client, unit, address):
try:
except:
try:
except Exception, e:
def getIntArray(client,unit,address,count):
values = []
startAddress = address
for i in xrange(0, count):
f = getIntBigEndian(client=client,unit=unit, address=startAddress)
values.append(f)
startAddress = startAddress + 2;
return values
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 = ['MD1', 'MD2', 'MD3', 'MD4']
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 readMD.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=500, count=4)
ts = getIntArray(client=client,unit=address, address=516, count=4)
for ndx in range(len(values)):
print labels[ndx], '\t', values[ndx], ts[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 20

Advertisement

Table of Contents
loading

Table of Contents