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>
<table>
<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>WD Ausgang alle 10 Sekunden automatisch toggeln.</td>
</tr><tr>
@@ -130,7 +133,13 @@ Static Methods</h3>
<table>
<tr><td>None</td></tr>
</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">
Connect.__wdtoggle</h3>
<b>__wdtoggle</b>(<i></i>)
@@ -227,6 +236,9 @@ Methods</h3>
<td><a style="color:#0000FF" href="#Core.__errorlimit">__errorlimit</a></td>
<td>Verwaltet das Schreiben der ErrorLimits.</td>
</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>Core-Klasse vorbereiten.</td>
</tr><tr>
@@ -306,7 +318,13 @@ Byte Slice vom ErrorLimit
<dd>
Aktuellen ErrorLimit oder None wenn nicht verfuegbar
</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">
Core._devconfigure</h3>
<b>_devconfigure</b>(<i></i>)

View File

@@ -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):

View File

@@ -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

View File

@@ -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