diff --git a/doc/revpimodio2.io.html b/doc/revpimodio2.io.html index d8ca045..73586cf 100644 --- a/doc/revpimodio2.io.html +++ b/doc/revpimodio2.io.html @@ -389,13 +389,24 @@ Ersetzt bestehenden IO mit Neuem.

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.

name
Name des neuen Inputs
frm
-struct Formatierung (1 Zeichen) +struct formatierung (1 Zeichen) oder 'ANZAHLs' z.B. '8s'
kwargs
Weitere Parameter: @@ -927,7 +938,7 @@ ParentIO Objekt, welches ersetzt wird Name des neuen IO
frm
-struct formatierung (1 Zeichen) +struct formatierung (1 Zeichen) oder 'ANZAHLs' z.B. '8s'
kwargs
Weitere Parameter: diff --git a/revpimodio2/io.py b/revpimodio2/io.py index 4e50f5b..ae239d3 100644 --- a/revpimodio2/io.py +++ b/revpimodio2/io.py @@ -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 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 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. diff --git a/revpimodio2/netio.py b/revpimodio2/netio.py index e85ee26..b8bf4e6 100644 --- a/revpimodio2/netio.py +++ b/revpimodio2/netio.py @@ -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):