loop works

This commit is contained in:
2019-06-19 22:47:06 +01:00
parent 3c582ca833
commit 2ba9f83569

View File

@ -1,5 +1,6 @@
from pymodbus.client.sync import ModbusSerialClient from pymodbus.client.sync import ModbusSerialClient
from pymodbus.pdu import ExceptionResponse from pymodbus.pdu import ExceptionResponse
from pymodbus.exceptions import ModbusIOException
import RS485Ext import RS485Ext
import struct import struct
import time import time
@ -47,6 +48,8 @@ class ModbusRequestDefinition(object):
self.label = label self.label = label
reqs = [ reqs = [
ModbusRequestDefinition(4, 0x2000, 2, 'F', '(ERR) Unavailable device'),
ModbusRequestDefinition(1, 0x2000, 4, 'F', '(ERR) Wrong register size'),
ModbusRequestDefinition(1, 0x2000, 2, 'F', 'Voltage'), ModbusRequestDefinition(1, 0x2000, 2, 'F', 'Voltage'),
ModbusRequestDefinition(1, 0x2020, 2, 'F', 'Frequency'), ModbusRequestDefinition(1, 0x2020, 2, 'F', 'Frequency'),
ModbusRequestDefinition(1, 0x2060, 2, 'F', 'Current'), ModbusRequestDefinition(1, 0x2060, 2, 'F', 'Current'),
@ -57,13 +60,12 @@ reqs = [
] ]
def getSerial():
return RS485Ext.RS485Ext(port='/dev/ttyAMA0', baudrate=1200, stopbits=1,
ser=RS485Ext.RS485Ext(port='/dev/ttyAMA0', baudrate=1200, stopbits=1,
timeout=1) timeout=1)
client = ModbusSerialClient(method='rtu') client = ModbusSerialClient(method='rtu')
client.socket = ser client.socket = getSerial()
client.connect() client.connect()
delay = 0.05 delay = 0.05
@ -72,15 +74,24 @@ while True:
for req in reqs: for req in reqs:
try: try:
time.sleep(delay) time.sleep(delay)
result = client.read_holding_registers(req.address, req.count, req.unit) # print("Trying to read: {0} {1} {2}".format(req.address, req.count, req.unit))
if type(result) in (ExceptionResponse): result = client.read_holding_registers(address=req.address,
count=req.count,
unit=req.unit)
if type(result) in [ExceptionResponse, ModbusIOException]:
raise ModbusException(result) raise ModbusException(result)
print("{0}: {1:.2f}". format(dataConverter(req.converter, result.registers))) print("{0}: {1:.2f}".format(req.label,
dataConverter(req.converter,
result.registers)))
except ModbusException as e: except ModbusException as e:
print("ERROR: %s" % e) print("ERROR when querying '{0}': {1!s}".format(req.label, e))
finally: if client.socket is None:
print("renew socket")
client.socket = getSerial()
print("-------------") print("-------------")
time.sleep(10) time.sleep(10)
client.close() client.close()