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> </p><p>
Wenn die kwargs fuer byteorder und defaultvalue nicht angegeben werden, Wenn die kwargs fuer byteorder und defaultvalue nicht angegeben werden,
uebernimmt das System die Daten aus dem ersetzten IO. 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> </p><dl>
<dt><i>name</i></dt> <dt><i>name</i></dt>
<dd> <dd>
Name des neuen Inputs Name des neuen Inputs
</dd><dt><i>frm</i></dt> </dd><dt><i>frm</i></dt>
<dd> <dd>
struct Formatierung (1 Zeichen) struct formatierung (1 Zeichen) oder 'ANZAHLs' z.B. '8s'
</dd><dt><i>kwargs</i></dt> </dd><dt><i>kwargs</i></dt>
<dd> <dd>
Weitere Parameter: Weitere Parameter:
@@ -927,7 +938,7 @@ ParentIO Objekt, welches ersetzt wird
Name des neuen IO Name des neuen IO
</dd><dt><i>frm</i></dt> </dd><dt><i>frm</i></dt>
<dd> <dd>
struct formatierung (1 Zeichen) struct formatierung (1 Zeichen) oder 'ANZAHLs' z.B. '8s'
</dd><dt><i>kwargs</i></dt> </dd><dt><i>kwargs</i></dt>
<dd> <dd>
Weitere Parameter: Weitere Parameter:

View File

@@ -7,6 +7,7 @@
# #
"""RevPiModIO Modul fuer die Verwaltung der IOs.""" """RevPiModIO Modul fuer die Verwaltung der IOs."""
import struct import struct
from re import match as rematch
from threading import Event from threading import Event
from revpimodio2 import RISING, FALLING, BOTH, INP, OUT, MEM, consttostr 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, Wenn die kwargs fuer byteorder und defaultvalue nicht angegeben werden,
uebernimmt das System die Daten aus dem ersetzten IO. 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 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: @param kwargs Weitere Parameter:
- bmk: interne Bezeichnung fuer IO - bmk: interne Bezeichnung fuer IO
- bit: Registriert IO als <class 'bool'> am angegebenen Bit im Byte - 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 parentio ParentIO Objekt, welches ersetzt wird
@param name Name des neuen IO @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: @param kwargs Weitere Parameter:
- bmk: Bezeichnung fuer IO - bmk: Bezeichnung fuer IO
- bit: Registriert IO als <class 'bool'> am angegebenen Bit im Byte - 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 - 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 prüfen und übernehmen
byteorder = kwargs.get("byteorder", parentio._byteorder) byteorder = kwargs.get("byteorder", parentio._byteorder)
if not (byteorder == "little" or byteorder == "big"): if not (byteorder == "little" or byteorder == "big"):
@@ -863,7 +878,9 @@ class StructIO(IOBase):
bitaddress bitaddress
] ]
else: 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 # Basisklasse instantiieren
super().__init__( super().__init__(
@@ -888,7 +905,7 @@ class StructIO(IOBase):
def _get_frm(self): def _get_frm(self):
"""Ruft die struct Formatierung ab. """Ruft die struct Formatierung ab.
@return struct Formatierung""" @return struct Formatierung"""
return self.__frm[1] return self.__frm[1:]
def _get_signed(self): def _get_signed(self):
"""Ruft ab, ob der Wert Vorzeichenbehaftet behandelt werden soll. """Ruft ab, ob der Wert Vorzeichenbehaftet behandelt werden soll.

View File

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