mirror of
https://github.com/naruxde/revpimodio2.git
synced 2025-11-08 22:03:53 +01:00
StuctIO kann nun COUNTs Bytes zu einem IO zusammenfassen
Fehlermeldungen in NetFH mit warnings realisiert
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user