From 5f3d50090a52b14684d5deb7342bec651dfd1f6d Mon Sep 17 00:00:00 2001 From: Wolfgang Ludger Hottgenroth Date: Mon, 23 Aug 2021 17:55:10 +0200 Subject: [PATCH] coil event processed immediately --- src/ModbusHandler.py | 5 ++++- src/ProcessImage.py | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/ModbusHandler.py b/src/ModbusHandler.py index 22e3e3a..fadc0f6 100644 --- a/src/ModbusHandler.py +++ b/src/ModbusHandler.py @@ -72,7 +72,10 @@ def modbusHandler(config, processImage): logger.error("Exception in inner modbus handler loop: {}".format(e)) client.close() finally: - sleep(modbusRefreshPeriod) + #sleep(modbusRefreshPeriod) + if (processImage.coilEvent.wait(timeout=modbusRefreshPeriod)): + processImage.coilEvent.clear() + except Exception as e: logger.error("Exception in modbus handler: {}".format(e)) diff --git a/src/ProcessImage.py b/src/ProcessImage.py index 81d8d44..85fad99 100644 --- a/src/ProcessImage.py +++ b/src/ProcessImage.py @@ -1,4 +1,4 @@ -from threading import Condition +from threading import Condition, Event from loguru import logger def zippingFilter(a, b): @@ -9,6 +9,7 @@ class NotInitializedException(Exception): pass class ProcessImage(Condition): def __init__(self): super().__init__() + self.coilEvent = Event() self.initialized = False def init(self, numCoils, numDiscreteInputs, numAnalogInputs): @@ -61,6 +62,7 @@ class ProcessImage(Condition): if not self.initialized: raise NotInitializedException self.coils[coilNum] = value + self.coilEvent.set() # def getChangedCoils(self): # if not self.initialized: