StuctIO kann nun COUNTs Bytes zu einem IO zusammenfassen

Fehlermeldungen in NetFH mit warnings realisiert
This commit is contained in:
2017-12-26 14:09:12 +01:00
parent 072327b330
commit 2ff41cfccc
3 changed files with 43 additions and 10 deletions

View File

@@ -389,13 +389,24 @@ Ersetzt bestehenden IO mit Neuem.
</p><p>
Wenn die kwargs fuer byteorder und defaultvalue nicht angegeben werden,
uebernimmt das System die Daten aus dem ersetzten IO.
</p><p>
Es darf nur ein einzelnes Formatzeichen 'frm' uebergeben werden. Daraus
wird dann die benoetigte Laenge an Bytes berechnet und der Datentyp
festgelegt.
Eine Ausnahme ist die Formatierung 's'. Hier koennen mehrere Bytes
zu einem langen IO zusammengefasst werden. Die Formatierung muss
'8s' fuer z.B. 8 Bytes sein - NICHT 'ssssssss'!
</p><p>
Wenn durch die Formatierung mehr Bytes benoetigt werden, als
der urspruenglige IO hat, werden die nachfolgenden IOs ebenfalls
verwendet und entfernt.
</p><dl>
<dt><i>name</i></dt>
<dd>
Name des neuen Inputs
</dd><dt><i>frm</i></dt>
<dd>
struct Formatierung (1 Zeichen)
struct formatierung (1 Zeichen) oder 'ANZAHLs' z.B. '8s'
</dd><dt><i>kwargs</i></dt>
<dd>
Weitere Parameter:
@@ -927,7 +938,7 @@ ParentIO Objekt, welches ersetzt wird
Name des neuen IO
</dd><dt><i>frm</i></dt>
<dd>
struct formatierung (1 Zeichen)
struct formatierung (1 Zeichen) oder 'ANZAHLs' z.B. '8s'
</dd><dt><i>kwargs</i></dt>
<dd>
Weitere Parameter:

View File

@@ -7,6 +7,7 @@
#
"""RevPiModIO Modul fuer die Verwaltung der IOs."""
import struct
from re import match as rematch
from threading import Event
from revpimodio2 import RISING, FALLING, BOTH, INP, OUT, MEM, consttostr
@@ -468,8 +469,19 @@ class IOBase(object):
Wenn die kwargs fuer byteorder und defaultvalue nicht angegeben werden,
uebernimmt das System die Daten aus dem ersetzten IO.
Es darf nur ein einzelnes Formatzeichen 'frm' uebergeben werden. Daraus
wird dann die benoetigte Laenge an Bytes berechnet und der Datentyp
festgelegt.
Eine Ausnahme ist die Formatierung 's'. Hier koennen mehrere Bytes
zu einem langen IO zusammengefasst werden. Die Formatierung muss
'8s' fuer z.B. 8 Bytes sein - NICHT 'ssssssss'!
Wenn durch die Formatierung mehr Bytes benoetigt werden, als
der urspruenglige IO hat, werden die nachfolgenden IOs ebenfalls
verwendet und entfernt.
@param name Name des neuen Inputs
@param frm struct Formatierung (1 Zeichen)
@param frm struct formatierung (1 Zeichen) oder 'ANZAHLs' z.B. '8s'
@param kwargs Weitere Parameter:
- bmk: interne Bezeichnung fuer IO
- bit: Registriert IO als <class 'bool'> am angegebenen Bit im Byte
@@ -815,7 +827,7 @@ class StructIO(IOBase):
@param parentio ParentIO Objekt, welches ersetzt wird
@param name Name des neuen IO
@param frm struct formatierung (1 Zeichen)
@param frm struct formatierung (1 Zeichen) oder 'ANZAHLs' z.B. '8s'
@param kwargs Weitere Parameter:
- bmk: Bezeichnung fuer IO
- bit: Registriert IO als <class 'bool'> am angegebenen Bit im Byte
@@ -823,7 +835,10 @@ class StructIO(IOBase):
- defaultvalue: Standardwert fuer IO, Standard vom ersetzter IO
"""
if len(frm) == 1:
# Mehrfach s prüfen 8s
regex = rematch("[0-9]*s", frm)
if len(frm) == 1 or regex is not None and regex.end() == len(frm):
# Byteorder prüfen und übernehmen
byteorder = kwargs.get("byteorder", parentio._byteorder)
if not (byteorder == "little" or byteorder == "big"):
@@ -863,7 +878,9 @@ class StructIO(IOBase):
bitaddress
]
else:
raise AttributeError("parameter frm has to be a single sign")
raise AttributeError(
"parameter frm has to be a single sign or 'COUNTs' e.g. '8s'"
)
# Basisklasse instantiieren
super().__init__(
@@ -888,7 +905,7 @@ class StructIO(IOBase):
def _get_frm(self):
"""Ruft die struct Formatierung ab.
@return struct Formatierung"""
return self.__frm[1]
return self.__frm[1:]
def _get_signed(self):
"""Ruft ab, ob der Wert Vorzeichenbehaftet behandelt werden soll.

View File

@@ -7,6 +7,7 @@
#
"""RevPiModIO Hauptklasse fuer Netzwerkzugriff."""
import socket
import warnings
from json import loads as jloads
from threading import Thread, Event, Lock
@@ -252,14 +253,18 @@ class NetFH(Thread):
self._slavesock.send(_syssync)
data = self._slavesock.recv(2)
except IOError:
print("ioerror in run()")
warnings.warn(
"network error in sync of NetFH", RuntimeWarning
)
self.__sockerr.set()
else:
if data != b'\x06\x16':
print("data error in run():", str(data))
warnings.warn(
"data error in sync of NetFH", RuntimeWarning
)
self.__sockerr.set()
self.__socklock.release()
self.__socklock.release()
self.__trigger = False
def seek(self, position):