Warn the user faster, if the cycle time is exhausted

This commit is contained in:
2021-10-24 10:50:42 +02:00
parent b90e858fef
commit bc8a13da1b
3 changed files with 11 additions and 6 deletions

View File

@@ -22,7 +22,7 @@ __author__ = "Sven Sager <akira@revpimodio.org>"
__copyright__ = "Copyright (C) 2020 Sven Sager" __copyright__ = "Copyright (C) 2020 Sven Sager"
__license__ = "LGPLv3" __license__ = "LGPLv3"
__name__ = "revpimodio2" __name__ = "revpimodio2"
__version__ = "2.5.8b" __version__ = "2.5.8c"
# Global package values # Global package values
OFF = 0 OFF = 0

View File

@@ -512,6 +512,7 @@ class ProcimgWriter(Thread):
"""Startet die automatische Prozessabbildsynchronisierung.""" """Startet die automatische Prozessabbildsynchronisierung."""
fh = self._modio._create_myfh() fh = self._modio._create_myfh()
mrk_delay = self._refresh
mrk_warn = True mrk_warn = True
bytesbuff = bytearray(self._modio._length) bytesbuff = bytearray(self._modio._length)
@@ -521,13 +522,14 @@ class ProcimgWriter(Thread):
while not self._work.is_set(): while not self._work.is_set():
ot = default_timer() ot = default_timer()
# Lockobjekt holen und Fehler werfen, wenn nicht schnell genug # At this point, we slept and have the rest of delay from last cycle
if not self.lck_refresh.acquire(timeout=self._refresh): if not self.lck_refresh.acquire(timeout=mrk_delay):
warnings.warn( warnings.warn(
"cycle time of {0} ms exceeded during executing function" "cycle time of {0} ms exceeded in your cycle function"
"".format(int(self._refresh * 1000)), "".format(int(self._refresh * 1000)),
RuntimeWarning RuntimeWarning
) )
mrk_delay = self._refresh
# Nur durch cycleloop erreichbar - keine verzögerten Events # Nur durch cycleloop erreichbar - keine verzögerten Events
continue continue
@@ -609,15 +611,18 @@ class ProcimgWriter(Thread):
self._eventq.put(tup_fire, False) self._eventq.put(tup_fire, False)
del self.__dict_delay[tup_fire] del self.__dict_delay[tup_fire]
mrk_delay = default_timer() % self._refresh
# Second default_timer call include calculation time from above
if default_timer() - ot > self._refresh: if default_timer() - ot > self._refresh:
warnings.warn( warnings.warn(
"cycle time of {0} ms exceeded - can not hold cycle time!" "cycle time of {0} ms exceeded - can not hold cycle time!"
"".format(int(self._refresh * 1000)), "".format(int(self._refresh * 1000)),
RuntimeWarning RuntimeWarning
) )
mrk_delay = 0.0
else: else:
# Sleep and not .wait (.wait uses system clock) # Sleep and not .wait (.wait uses system clock)
sleep(self._refresh - (default_timer() % self._refresh)) sleep(self._refresh - mrk_delay)
# Alle am Ende erneut aufwecken # Alle am Ende erneut aufwecken
self._collect_events(False) self._collect_events(False)

View File

@@ -17,7 +17,7 @@ setup(
license="LGPLv3", license="LGPLv3",
name="revpimodio2", name="revpimodio2",
version="2.5.8b", version="2.5.8c",
packages=["revpimodio2"], packages=["revpimodio2"],
python_requires="~=3.2", python_requires="~=3.2",