discrete input

This commit is contained in:
2019-07-07 02:35:40 +02:00
parent 55f875e27e
commit 75ddb6069a

View File

@ -40,7 +40,8 @@ class ModbusException(Exception):
return self.msg return self.msg
class ModbusRequestDefinition(object): class ModbusRequestDefinition(object):
def __init__(self, unit, address, count, converter, label): def __init__(self, kind, unit, address, count, converter, label):
self.kind = kind
self.unit = unit self.unit = unit
self.address = address self.address = address
self.count = count self.count = count
@ -53,10 +54,11 @@ reqs = [
# 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'),
ModbusRequestDefinition(3, 0x0004, 2, 'RF', 'Resistance Channel 1'), ModbusRequestDefinition('H', 3, 0x0004, 2, 'RF', 'Resistance Channel 1'),
ModbusRequestDefinition(3, 0x000C, 2, 'RF', 'Temperature Channel 1'), ModbusRequestDefinition('H', 3, 0x000C, 2, 'RF', 'Temperature Channel 1'),
ModbusRequestDefinition(3, 0x0014, 2, 'RF', 'Resistance Channel 2'), ModbusRequestDefinition('H', 3, 0x0014, 2, 'RF', 'Resistance Channel 2'),
ModbusRequestDefinition(3, 0x001C, 2, 'RF', 'Temperature Channel 2'), ModbusRequestDefinition('H', 3, 0x001C, 2, 'RF', 'Temperature Channel 2'),
ModbusRequestDefinition('D', 4, 0x0000, 1, '', 'Discrete Input'),
] ]
@ -75,6 +77,7 @@ while True:
for req in reqs: for req in reqs:
try: try:
time.sleep(delay) time.sleep(delay)
if req.kind == 'H':
# print("Trying to read: {0} {1} {2}".format(req.address, req.count, req.unit)) # print("Trying to read: {0} {1} {2}".format(req.address, req.count, req.unit))
result = client.read_holding_registers(address=req.address, result = client.read_holding_registers(address=req.address,
count=req.count, count=req.count,
@ -84,6 +87,13 @@ while True:
print("{0}: {1:.2f}".format(req.label, print("{0}: {1:.2f}".format(req.label,
dataConverter(req.converter, dataConverter(req.converter,
result.registers))) result.registers)))
elif req.kind == 'D':
result = client.read_discrete_inputs(address=req.address,
count=req.count,
unit=req.unit)
if type(result) in [ExceptionResponse, ModbusIOException]:
raise ModbusException(result)
print("{0}: {1!s}".format(req.label, result.bits))
except ModbusException as e: except ModbusException as e:
print("ERROR when querying '{0}': {1!s}".format(req.label, e)) print("ERROR when querying '{0}': {1!s}".format(req.label, e))
if client.socket is None: if client.socket is None: