diff --git a/snippets/test7.py b/snippets/test7.py new file mode 100644 index 0000000..6ffd206 --- /dev/null +++ b/snippets/test7.py @@ -0,0 +1,105 @@ +from pymodbus.client.sync import ModbusSerialClient +from pymodbus.pdu import ExceptionResponse +import RS485Ext +import struct +import time + +def registersToIeeeFloat(i): + return struct.unpack('f', bytes( + [((x & 0xff00) >> 8) if y else (x & 0x00ff) + for x in i[::-1] + for y in [False, True] + ] + ) + )[0] + +def registersToIeeeFloatReverse(i): + return struct.unpack('f', bytes( + [((x & 0xff00) >> 8) if y else (x & 0x00ff) + for x in i + for y in [False, True] + ] + ) + )[0] + +class ModbusException(Exception): + def __init__(self, resp): + self.msg = str(result) + + def __str__(self): + return self.msg + + + +ser=RS485Ext.RS485Ext(port='/dev/ttyAMA0', baudrate=1200, stopbits=1, + timeout=1) + +client = ModbusSerialClient(method='rtu') +client.socket = ser +client.connect() + +delay = 0.05 + +while True: + try: + # BG-Tech, Voltage + result = client.read_holding_registers(address=0x2000, count=2, unit=1) + if type(result) == ExceptionResponse: + raise ModbusException(result) + print("Voltage: {:.2f}".format(registersToIeeeFloat(result.registers))) + + time.sleep(delay) + + # BG-Tech, Frequency + result = client.read_holding_registers(address=0x2020, count=2, unit=1) + if type(result) == ExceptionResponse: + raise ModbusException(result) + print("Frequency: {:.2f}".format(registersToIeeeFloat(result.registers))) + + time.sleep(delay) + + # BG-Tech, Current + result = client.read_holding_registers(address=0x2060, count=2, unit=1) + if type(result) == ExceptionResponse: + raise ModbusException(result) + print("Current: {:.2f}".format(registersToIeeeFloat(result.registers))) + + time.sleep(delay) + + # Hottis Thermometer, Resistance Channel 1 + result = client.read_holding_registers(address=0x0004, count=2, unit=3) + if type(result) == ExceptionResponse: + raise ModbusException(result) + print("Resistance Channel 1: {:.2f}".format(registersToIeeeFloatReverse(result.registers))) + + time.sleep(delay) + + # Hottis Thermometer, Temperature Channel 1 + result = client.read_holding_registers(address=0x000c, count=2, unit=3) + if type(result) == ExceptionResponse: + raise ModbusException(result) + print("Temperature Channel 1: {:.2f}".format(registersToIeeeFloatReverse(result.registers))) + + time.sleep(delay) + + # Hottis Thermometer, Resistance Channel 2 + result = client.read_holding_registers(address=0x0014, count=2, unit=3) + if type(result) == ExceptionResponse: + raise ModbusException(result) + print("Resistance Channel 2: {:.2f}".format(registersToIeeeFloatReverse(result.registers))) + + time.sleep(delay) + + # Hottis Thermometer, Temperature Channel 2 + result = client.read_holding_registers(address=0x001c, count=2, unit=3) + if type(result) == ExceptionResponse: + raise ModbusException(result) + print("Temperature Channel 2: {:.2f}".format(registersToIeeeFloatReverse(result.registers))) + except ModbusException as e: + print("ERROR: %s" % e) + + print("-------------") + time.sleep(10) + +client.close() +