From 7c279a71a12ff2bbfe0af4e12af6b187017176b6 Mon Sep 17 00:00:00 2001 From: NaruX Date: Sat, 31 Aug 2019 09:07:24 +0200 Subject: [PATCH] =?UTF-8?q?Fehler=20bei=20NetIO=20im=20Hash=20load=20besei?= =?UTF-8?q?tigt=20Core=20IOs=20geben=20keine=20Fehler=20mehr,=20wenn=20ein?= =?UTF-8?q?=20delay=20event=20draufgelegt=20wird=20Core=20IOs=20k=C3=B6nne?= =?UTF-8?q?n=20nicht=20mehr=20=C3=BCberschrieben=20werden,=20wenn=20.value?= =?UTF-8?q?=20vergessen=20wrid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/revpimodio2.device.html | 22 ++++++++++++++++++++-- revpimodio2/device.py | 21 +++++++++++++++++++++ revpimodio2/helper.py | 21 +++++++++++---------- revpimodio2/netio.py | 5 +++-- 4 files changed, 55 insertions(+), 14 deletions(-) diff --git a/doc/revpimodio2.device.html b/doc/revpimodio2.device.html index 0753f3b..7927204 100644 --- a/doc/revpimodio2.device.html +++ b/doc/revpimodio2.device.html @@ -106,6 +106,9 @@ Class Methods Methods + + + @@ -130,7 +133,13 @@ Static Methods
__setattr__Verhindert Ueberschreibung der LEDs.
__wdtoggle WD Ausgang alle 10 Sekunden automatisch toggeln.
None
- + +

+Connect.__setattr__

+__setattr__(key, value) +

+Verhindert Ueberschreibung der LEDs. +

Connect.__wdtoggle

__wdtoggle() @@ -227,6 +236,9 @@ Methods __errorlimit Verwaltet das Schreiben der ErrorLimits. +__setattr__ +Verhindert Ueberschreibung der LEDs. + _devconfigure Core-Klasse vorbereiten. @@ -306,7 +318,13 @@ Byte Slice vom ErrorLimit
Aktuellen ErrorLimit oder None wenn nicht verfuegbar
- + +

+Core.__setattr__

+__setattr__(key, value) +

+Verhindert Ueberschreibung der LEDs. +

Core._devconfigure

_devconfigure() diff --git a/revpimodio2/device.py b/revpimodio2/device.py index a668c62..d87e4e7 100644 --- a/revpimodio2/device.py +++ b/revpimodio2/device.py @@ -494,6 +494,16 @@ class Core(Base): "_slc_temperature", "_slc_errorlimit1", "_slc_errorlimit2", \ "_slc_frequency", "_slc_led", "a1green", "a1red", "a2green", "a2red" + def __setattr__(self, key, value): + """Verhindert Ueberschreibung der LEDs.""" + if hasattr(self, key) and key in ( + "a1green", "a1red", "a2green", "a2red"): + raise AttributeError( + "direct assignment is not supported - use .value Attribute" + ) + else: + object.__setattr__(self, key, value) + def _devconfigure(self): """Core-Klasse vorbereiten.""" @@ -767,6 +777,17 @@ class Connect(Core): __slots__ = "__evt_wdtoggle", "__th_wdtoggle", "a3green", "a3red", "wd", \ "x2in", "x2out" + def __setattr__(self, key, value): + """Verhindert Ueberschreibung der LEDs.""" + if hasattr(self, key) and key in ( + "a1green", "a1red", "a2green", "a2red", "a3green", "a3red", + "wd", "x2in", "x2out"): + raise AttributeError( + "direct assignment is not supported - use .value Attribute" + ) + else: + object.__setattr__(self, key, value) + def __wdtoggle(self): """WD Ausgang alle 10 Sekunden automatisch toggeln.""" while not self.__evt_wdtoggle.wait(10): diff --git a/revpimodio2/helper.py b/revpimodio2/helper.py index abb8bcc..ab00e1b 100644 --- a/revpimodio2/helper.py +++ b/revpimodio2/helper.py @@ -351,12 +351,13 @@ class ProcimgWriter(Thread): ) else: # Verzögertes Event in dict einfügen - tupfire = ( - regfunc, io_event._name, io_event.value + tup_fire = ( + regfunc, io_event._name, io_event.value, + io_event, ) if regfunc.overwrite \ - or tupfire not in self.__dict_delay: - self.__dict_delay[tupfire] = ceil( + or tup_fire not in self.__dict_delay: + self.__dict_delay[tup_fire] = ceil( regfunc.delay / 1000 / self._refresh ) else: @@ -374,12 +375,13 @@ class ProcimgWriter(Thread): ) else: # Verzögertes Event in dict einfügen - tupfire = ( - regfunc, io_event._name, io_event.value + tup_fire = ( + regfunc, io_event._name, io_event.value, + io_event, ) if regfunc.overwrite \ - or tupfire not in self.__dict_delay: - self.__dict_delay[tupfire] = ceil( + or tup_fire not in self.__dict_delay: + self.__dict_delay[tup_fire] = ceil( regfunc.delay / 1000 / self._refresh ) @@ -525,8 +527,7 @@ class ProcimgWriter(Thread): if self.__eventwork: for tup_fire in tuple(self.__dict_delay.keys()): if tup_fire[0].overwrite and \ - getattr(self._modio.io, tup_fire[1]).value != \ - tup_fire[2]: + tup_fire[3].value != tup_fire[2]: del self.__dict_delay[tup_fire] else: self.__dict_delay[tup_fire] -= 1 diff --git a/revpimodio2/netio.py b/revpimodio2/netio.py index d307d3d..ea00e8d 100644 --- a/revpimodio2/netio.py +++ b/revpimodio2/netio.py @@ -164,11 +164,12 @@ class NetFH(Thread): # Hashwerte empfangen byte_buff = bytearray() zero_byte = 0 - while not self.__sockend.is_set() and zero_byte < 100 \ - and len(byte_buff) < recv_len: + while not self.__sockend.is_set() and len(byte_buff) < recv_len: data = so.recv(recv_len) if data == b'': zero_byte += 1 + if zero_byte == 100: + raise OSError("too many zero bytes on hash load") byte_buff += data # Änderung an piCtory prüfen