Fehler bei NetIO im Hash load beseitigt

Core IOs geben keine Fehler mehr, wenn ein delay event draufgelegt wird
Core IOs können nicht mehr überschrieben werden, wenn .value vergessen wrid
This commit is contained in:
2019-08-31 09:07:24 +02:00
parent 2cf0514f64
commit 7c279a71a1
4 changed files with 55 additions and 14 deletions

View File

@@ -106,6 +106,9 @@ Class Methods</h3>
Methods</h3> Methods</h3>
<table> <table>
<tr> <tr>
<td><a style="color:#0000FF" href="#Connect.__setattr__">__setattr__</a></td>
<td>Verhindert Ueberschreibung der LEDs.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#Connect.__wdtoggle">__wdtoggle</a></td> <td><a style="color:#0000FF" href="#Connect.__wdtoggle">__wdtoggle</a></td>
<td>WD Ausgang alle 10 Sekunden automatisch toggeln.</td> <td>WD Ausgang alle 10 Sekunden automatisch toggeln.</td>
</tr><tr> </tr><tr>
@@ -130,7 +133,13 @@ Static Methods</h3>
<table> <table>
<tr><td>None</td></tr> <tr><td>None</td></tr>
</table> </table>
<a NAME="Connect.__wdtoggle" ID="Connect.__wdtoggle"></a> <a NAME="Connect.__setattr__" ID="Connect.__setattr__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Connect.__setattr__</h3>
<b>__setattr__</b>(<i>key, value</i>)
<p>
Verhindert Ueberschreibung der LEDs.
</p><a NAME="Connect.__wdtoggle" ID="Connect.__wdtoggle"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Connect.__wdtoggle</h3> Connect.__wdtoggle</h3>
<b>__wdtoggle</b>(<i></i>) <b>__wdtoggle</b>(<i></i>)
@@ -227,6 +236,9 @@ Methods</h3>
<td><a style="color:#0000FF" href="#Core.__errorlimit">__errorlimit</a></td> <td><a style="color:#0000FF" href="#Core.__errorlimit">__errorlimit</a></td>
<td>Verwaltet das Schreiben der ErrorLimits.</td> <td>Verwaltet das Schreiben der ErrorLimits.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#Core.__setattr__">__setattr__</a></td>
<td>Verhindert Ueberschreibung der LEDs.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#Core._devconfigure">_devconfigure</a></td> <td><a style="color:#0000FF" href="#Core._devconfigure">_devconfigure</a></td>
<td>Core-Klasse vorbereiten.</td> <td>Core-Klasse vorbereiten.</td>
</tr><tr> </tr><tr>
@@ -306,7 +318,13 @@ Byte Slice vom ErrorLimit
<dd> <dd>
Aktuellen ErrorLimit oder None wenn nicht verfuegbar Aktuellen ErrorLimit oder None wenn nicht verfuegbar
</dd> </dd>
</dl><a NAME="Core._devconfigure" ID="Core._devconfigure"></a> </dl><a NAME="Core.__setattr__" ID="Core.__setattr__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
Core.__setattr__</h3>
<b>__setattr__</b>(<i>key, value</i>)
<p>
Verhindert Ueberschreibung der LEDs.
</p><a NAME="Core._devconfigure" ID="Core._devconfigure"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Core._devconfigure</h3> Core._devconfigure</h3>
<b>_devconfigure</b>(<i></i>) <b>_devconfigure</b>(<i></i>)

View File

@@ -494,6 +494,16 @@ class Core(Base):
"_slc_temperature", "_slc_errorlimit1", "_slc_errorlimit2", \ "_slc_temperature", "_slc_errorlimit1", "_slc_errorlimit2", \
"_slc_frequency", "_slc_led", "a1green", "a1red", "a2green", "a2red" "_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): def _devconfigure(self):
"""Core-Klasse vorbereiten.""" """Core-Klasse vorbereiten."""
@@ -767,6 +777,17 @@ class Connect(Core):
__slots__ = "__evt_wdtoggle", "__th_wdtoggle", "a3green", "a3red", "wd", \ __slots__ = "__evt_wdtoggle", "__th_wdtoggle", "a3green", "a3red", "wd", \
"x2in", "x2out" "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): def __wdtoggle(self):
"""WD Ausgang alle 10 Sekunden automatisch toggeln.""" """WD Ausgang alle 10 Sekunden automatisch toggeln."""
while not self.__evt_wdtoggle.wait(10): while not self.__evt_wdtoggle.wait(10):

View File

@@ -351,12 +351,13 @@ class ProcimgWriter(Thread):
) )
else: else:
# Verzögertes Event in dict einfügen # Verzögertes Event in dict einfügen
tupfire = ( tup_fire = (
regfunc, io_event._name, io_event.value regfunc, io_event._name, io_event.value,
io_event,
) )
if regfunc.overwrite \ if regfunc.overwrite \
or tupfire not in self.__dict_delay: or tup_fire not in self.__dict_delay:
self.__dict_delay[tupfire] = ceil( self.__dict_delay[tup_fire] = ceil(
regfunc.delay / 1000 / self._refresh regfunc.delay / 1000 / self._refresh
) )
else: else:
@@ -374,12 +375,13 @@ class ProcimgWriter(Thread):
) )
else: else:
# Verzögertes Event in dict einfügen # Verzögertes Event in dict einfügen
tupfire = ( tup_fire = (
regfunc, io_event._name, io_event.value regfunc, io_event._name, io_event.value,
io_event,
) )
if regfunc.overwrite \ if regfunc.overwrite \
or tupfire not in self.__dict_delay: or tup_fire not in self.__dict_delay:
self.__dict_delay[tupfire] = ceil( self.__dict_delay[tup_fire] = ceil(
regfunc.delay / 1000 / self._refresh regfunc.delay / 1000 / self._refresh
) )
@@ -525,8 +527,7 @@ class ProcimgWriter(Thread):
if self.__eventwork: if self.__eventwork:
for tup_fire in tuple(self.__dict_delay.keys()): for tup_fire in tuple(self.__dict_delay.keys()):
if tup_fire[0].overwrite and \ if tup_fire[0].overwrite and \
getattr(self._modio.io, tup_fire[1]).value != \ tup_fire[3].value != tup_fire[2]:
tup_fire[2]:
del self.__dict_delay[tup_fire] del self.__dict_delay[tup_fire]
else: else:
self.__dict_delay[tup_fire] -= 1 self.__dict_delay[tup_fire] -= 1

View File

@@ -164,11 +164,12 @@ class NetFH(Thread):
# Hashwerte empfangen # Hashwerte empfangen
byte_buff = bytearray() byte_buff = bytearray()
zero_byte = 0 zero_byte = 0
while not self.__sockend.is_set() and zero_byte < 100 \ while not self.__sockend.is_set() and len(byte_buff) < recv_len:
and len(byte_buff) < recv_len:
data = so.recv(recv_len) data = so.recv(recv_len)
if data == b'': if data == b'':
zero_byte += 1 zero_byte += 1
if zero_byte == 100:
raise OSError("too many zero bytes on hash load")
byte_buff += data byte_buff += data
# Änderung an piCtory prüfen # Änderung an piCtory prüfen