mirror of
https://github.com/naruxde/revpimodio2.git
synced 2025-11-09 06:13:53 +01:00
Neue Base Klasse eingefügt von der Core / Connect erben
Sollten neue Base-Devices von Kunbus hinzugefügt werden, wird Base verwendet IntIOReplaceable Klasse erstellt für IOs von Gateways und virtuellen Devices Leere IntIOCounter Klasse für Counter IOs hinzugefügt
This commit is contained in:
@@ -18,6 +18,9 @@ Global Attributes</h3>
|
|||||||
Classes</h3>
|
Classes</h3>
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
|
<td><a style="color:#0000FF" href="#Base">Base</a></td>
|
||||||
|
<td>Klasse fuer alle Base-Devices wie Core / Connect usw.</td>
|
||||||
|
</tr><tr>
|
||||||
<td><a style="color:#0000FF" href="#Connect">Connect</a></td>
|
<td><a style="color:#0000FF" href="#Connect">Connect</a></td>
|
||||||
<td>Klasse fuer den RevPi Connect.</td>
|
<td>Klasse fuer den RevPi Connect.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
@@ -43,6 +46,37 @@ Functions</h3>
|
|||||||
<tr><td>None</td></tr>
|
<tr><td>None</td></tr>
|
||||||
</table>
|
</table>
|
||||||
<hr /><hr />
|
<hr /><hr />
|
||||||
|
<a NAME="Base" ID="Base"></a>
|
||||||
|
<h2 style="background-color:#FFFFFF;color:#0000FF">Base</h2>
|
||||||
|
<p>
|
||||||
|
Klasse fuer alle Base-Devices wie Core / Connect usw.
|
||||||
|
</p>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Derived from</h3>
|
||||||
|
Device
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Class Attributes</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>__slots__</td></tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Class Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Static Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||||
|
<hr /><hr />
|
||||||
<a NAME="Connect" ID="Connect"></a>
|
<a NAME="Connect" ID="Connect"></a>
|
||||||
<h2 style="background-color:#FFFFFF;color:#0000FF">Connect</h2>
|
<h2 style="background-color:#FFFFFF;color:#0000FF">Connect</h2>
|
||||||
<p>
|
<p>
|
||||||
@@ -172,7 +206,7 @@ Klasse fuer den RevPi Core.
|
|||||||
</p>
|
</p>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
Derived from</h3>
|
Derived from</h3>
|
||||||
Device
|
Base
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
Class Attributes</h3>
|
Class Attributes</h3>
|
||||||
<table>
|
<table>
|
||||||
@@ -1055,7 +1089,7 @@ Klasse fuer die RevPi Gateway-Devices.
|
|||||||
</p><dl>
|
</p><dl>
|
||||||
<dt><b>See Also:</b></dt>
|
<dt><b>See Also:</b></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<a style="color:#0000FF" href="revpimodio2.io.html#IOBase.replace_io">replace_io(name, frm, **kwargs)</a>
|
<a style="color:#0000FF" href="revpimodio2.io.html#IntIOReplaceable.replace_io">replace_io(...)</a>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
|||||||
@@ -33,6 +33,12 @@ Classes</h3>
|
|||||||
<td><a style="color:#0000FF" href="#IntIO">IntIO</a></td>
|
<td><a style="color:#0000FF" href="#IntIO">IntIO</a></td>
|
||||||
<td>Klasse fuer den Zugriff auf die Daten mit Konvertierung in int.</td>
|
<td>Klasse fuer den Zugriff auf die Daten mit Konvertierung in int.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#IntIOCounter">IntIOCounter</a></td>
|
||||||
|
<td>Erweitert die IntIO-Klasse um die .reset() Funktion fuer Counter.</td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a style="color:#0000FF" href="#IntIOReplaceable">IntIOReplaceable</a></td>
|
||||||
|
<td>Erweitert die IntIO-Klasse um die .replace_io Funktion.</td>
|
||||||
|
</tr><tr>
|
||||||
<td><a style="color:#0000FF" href="#StructIO">StructIO</a></td>
|
<td><a style="color:#0000FF" href="#StructIO">StructIO</a></td>
|
||||||
<td>Klasse fuer den Zugriff auf Daten ueber ein definierten struct.</td>
|
<td>Klasse fuer den Zugriff auf Daten ueber ein definierten struct.</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -97,7 +103,7 @@ Stellt Funktion fuer weiter Bit-Ersetzungen bereit.
|
|||||||
</p><dl>
|
</p><dl>
|
||||||
<dt><b>See Also:</b></dt>
|
<dt><b>See Also:</b></dt>
|
||||||
<dd>
|
<dd>
|
||||||
<a style="color:#0000FF" href="#IOBase.replace_io">replace_io(...)</a>
|
<a style="color:#0000FF" href="#IntIOReplaceable.replace_io">replace_io(...)</a>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||||
@@ -171,9 +177,6 @@ Methods</h3>
|
|||||||
<td><a style="color:#0000FF" href="#IOBase.reg_timerevent">reg_timerevent</a></td>
|
<td><a style="color:#0000FF" href="#IOBase.reg_timerevent">reg_timerevent</a></td>
|
||||||
<td>Registriert fuer IO einen Timer, welcher nach delay func ausfuehrt.</td>
|
<td>Registriert fuer IO einen Timer, welcher nach delay func ausfuehrt.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
<td><a style="color:#0000FF" href="#IOBase.replace_io">replace_io</a></td>
|
|
||||||
<td>Ersetzt bestehenden IO mit Neuem.</td>
|
|
||||||
</tr><tr>
|
|
||||||
<td><a style="color:#0000FF" href="#IOBase.set_value">set_value</a></td>
|
<td><a style="color:#0000FF" href="#IOBase.set_value">set_value</a></td>
|
||||||
<td>Setzt den Wert des IOs.</td>
|
<td>Setzt den Wert des IOs.</td>
|
||||||
</tr><tr>
|
</tr><tr>
|
||||||
@@ -381,50 +384,6 @@ Ausfuehren bei RISING, FALLING or BOTH Wertaenderung
|
|||||||
<dd>
|
<dd>
|
||||||
Bei True, Funktion als EventCallback-Thread ausfuehren
|
Bei True, Funktion als EventCallback-Thread ausfuehren
|
||||||
</dd>
|
</dd>
|
||||||
</dl><a NAME="IOBase.replace_io" ID="IOBase.replace_io"></a>
|
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
|
||||||
IOBase.replace_io</h3>
|
|
||||||
<b>replace_io</b>(<i>name, frm, **kwargs</i>)
|
|
||||||
<p>
|
|
||||||
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) oder 'ANZAHLs' z.B. '8s'
|
|
||||||
</dd><dt><i>kwargs</i></dt>
|
|
||||||
<dd>
|
|
||||||
Weitere Parameter:
|
|
||||||
- bmk: interne Bezeichnung fuer IO
|
|
||||||
- bit: Registriert IO als <class 'bool'> am angegebenen Bit im Byte
|
|
||||||
- byteorder: Byteorder fuer den IO, Standardwert=little
|
|
||||||
- defaultvalue: Standardwert fuer IO
|
|
||||||
- event: Funktion fuer Eventhandling registrieren
|
|
||||||
- delay: Verzoegerung in ms zum Ausloesen wenn Wert gleich bleibt
|
|
||||||
- edge: Event ausfuehren bei RISING, FALLING or BOTH Wertaenderung
|
|
||||||
- as_thread: Fuehrt die event-Funktion als RevPiCallback-Thread aus
|
|
||||||
</dd>
|
|
||||||
</dl><dl>
|
|
||||||
<dt><b>See Also:</b></dt>
|
|
||||||
<dd>
|
|
||||||
<a style="color:#0000FF" target="_blank" href="https://docs.python.org/3/library/struct.html#format-characters" >Python3 struct</a>
|
|
||||||
</dd>
|
|
||||||
</dl><a NAME="IOBase.set_value" ID="IOBase.set_value"></a>
|
</dl><a NAME="IOBase.set_value" ID="IOBase.set_value"></a>
|
||||||
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
IOBase.set_value</h3>
|
IOBase.set_value</h3>
|
||||||
@@ -870,6 +829,124 @@ Setzt IO mit Beachtung byteorder/signed.
|
|||||||
</dl>
|
</dl>
|
||||||
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||||
<hr /><hr />
|
<hr /><hr />
|
||||||
|
<a NAME="IntIOCounter" ID="IntIOCounter"></a>
|
||||||
|
<h2 style="background-color:#FFFFFF;color:#0000FF">IntIOCounter</h2>
|
||||||
|
<p>
|
||||||
|
Erweitert die IntIO-Klasse um die .reset() Funktion fuer Counter.
|
||||||
|
</p>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Derived from</h3>
|
||||||
|
IntIO
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Class Attributes</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>__slots__</td></tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Class Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><a style="color:#0000FF" href="#IntIOCounter.reset">reset</a></td>
|
||||||
|
<td>Setzt den Counter des Inputs zurueck.</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Static Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<a NAME="IntIOCounter.reset" ID="IntIOCounter.reset"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
IntIOCounter.reset</h3>
|
||||||
|
<b>reset</b>(<i></i>)
|
||||||
|
<p>
|
||||||
|
Setzt den Counter des Inputs zurueck.
|
||||||
|
</p>
|
||||||
|
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||||
|
<hr /><hr />
|
||||||
|
<a NAME="IntIOReplaceable" ID="IntIOReplaceable"></a>
|
||||||
|
<h2 style="background-color:#FFFFFF;color:#0000FF">IntIOReplaceable</h2>
|
||||||
|
<p>
|
||||||
|
Erweitert die IntIO-Klasse um die .replace_io Funktion.
|
||||||
|
</p>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Derived from</h3>
|
||||||
|
IntIO
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Class Attributes</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>__slots__</td></tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Class Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><a style="color:#0000FF" href="#IntIOReplaceable.replace_io">replace_io</a></td>
|
||||||
|
<td>Ersetzt bestehenden IO mit Neuem.</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
Static Methods</h3>
|
||||||
|
<table>
|
||||||
|
<tr><td>None</td></tr>
|
||||||
|
</table>
|
||||||
|
<a NAME="IntIOReplaceable.replace_io" ID="IntIOReplaceable.replace_io"></a>
|
||||||
|
<h3 style="background-color:#FFFFFF;color:#FF0000">
|
||||||
|
IntIOReplaceable.replace_io</h3>
|
||||||
|
<b>replace_io</b>(<i>name, frm, **kwargs</i>)
|
||||||
|
<p>
|
||||||
|
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) oder 'ANZAHLs' z.B. '8s'
|
||||||
|
</dd><dt><i>kwargs</i></dt>
|
||||||
|
<dd>
|
||||||
|
Weitere Parameter:
|
||||||
|
- bmk: interne Bezeichnung fuer IO
|
||||||
|
- bit: Registriert IO als <class 'bool'> am angegebenen Bit im Byte
|
||||||
|
- byteorder: Byteorder fuer den IO, Standardwert=little
|
||||||
|
- defaultvalue: Standardwert fuer IO
|
||||||
|
- event: Funktion fuer Eventhandling registrieren
|
||||||
|
- delay: Verzoegerung in ms zum Ausloesen wenn Wert gleich bleibt
|
||||||
|
- edge: Event ausfuehren bei RISING, FALLING or BOTH Wertaenderung
|
||||||
|
- as_thread: Fuehrt die event-Funktion als RevPiCallback-Thread aus
|
||||||
|
</dd>
|
||||||
|
</dl><dl>
|
||||||
|
<dt><b>See Also:</b></dt>
|
||||||
|
<dd>
|
||||||
|
<a style="color:#0000FF" target="_blank" href="https://docs.python.org/3/library/struct.html#format-characters" >Python3 struct</a>
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
<div align="right"><a style="color:#0000FF" href="#top">Up</a></div>
|
||||||
|
<hr /><hr />
|
||||||
<a NAME="StructIO" ID="StructIO"></a>
|
<a NAME="StructIO" ID="StructIO"></a>
|
||||||
<h2 style="background-color:#FFFFFF;color:#0000FF">StructIO</h2>
|
<h2 style="background-color:#FFFFFF;color:#0000FF">StructIO</h2>
|
||||||
<p>
|
<p>
|
||||||
|
|||||||
@@ -106,7 +106,6 @@ revpimodio2.io.IOBase.length?7
|
|||||||
revpimodio2.io.IOBase.name?7
|
revpimodio2.io.IOBase.name?7
|
||||||
revpimodio2.io.IOBase.reg_event?4(func, delay=0, edge=BOTH, as_thread=False)
|
revpimodio2.io.IOBase.reg_event?4(func, delay=0, edge=BOTH, as_thread=False)
|
||||||
revpimodio2.io.IOBase.reg_timerevent?4(func, delay, edge=BOTH, as_thread=False)
|
revpimodio2.io.IOBase.reg_timerevent?4(func, delay, edge=BOTH, as_thread=False)
|
||||||
revpimodio2.io.IOBase.replace_io?4(name, frm, **kwargs)
|
|
||||||
revpimodio2.io.IOBase.set_value?4(value)
|
revpimodio2.io.IOBase.set_value?4(value)
|
||||||
revpimodio2.io.IOBase.type?7
|
revpimodio2.io.IOBase.type?7
|
||||||
revpimodio2.io.IOBase.unreg_event?4(func=None, edge=None)
|
revpimodio2.io.IOBase.unreg_event?4(func=None, edge=None)
|
||||||
@@ -126,6 +125,8 @@ revpimodio2.io.IntIO.get_intvalue?4()
|
|||||||
revpimodio2.io.IntIO.set_intvalue?4(value)
|
revpimodio2.io.IntIO.set_intvalue?4(value)
|
||||||
revpimodio2.io.IntIO.signed?7
|
revpimodio2.io.IntIO.signed?7
|
||||||
revpimodio2.io.IntIO.value?7
|
revpimodio2.io.IntIO.value?7
|
||||||
|
revpimodio2.io.IntIOCounter.reset?4()
|
||||||
|
revpimodio2.io.IntIOReplaceable.replace_io?4(name, frm, **kwargs)
|
||||||
revpimodio2.io.StructIO._get_frm?5()
|
revpimodio2.io.StructIO._get_frm?5()
|
||||||
revpimodio2.io.StructIO._get_signed?5()
|
revpimodio2.io.StructIO._get_signed?5()
|
||||||
revpimodio2.io.StructIO.defaultvalue?7
|
revpimodio2.io.StructIO.defaultvalue?7
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
|
Base Device
|
||||||
Connect Core
|
Connect Core
|
||||||
Core Device
|
Core Base
|
||||||
EventCallback Thread
|
EventCallback Thread
|
||||||
Gateway Device
|
Gateway Device
|
||||||
IntIO IOBase
|
IntIO IOBase
|
||||||
|
IntIOCounter IntIO
|
||||||
|
IntIOReplaceable IntIO
|
||||||
NetFH Thread
|
NetFH Thread
|
||||||
ProcimgWriter Thread
|
ProcimgWriter Thread
|
||||||
RevPiModIODriver RevPiModIOSelected
|
RevPiModIODriver RevPiModIOSelected
|
||||||
|
|||||||
@@ -253,11 +253,20 @@ class Device(object):
|
|||||||
for key in sorted(dict_io, key=lambda x: int(x)):
|
for key in sorted(dict_io, key=lambda x: int(x)):
|
||||||
|
|
||||||
# Neuen IO anlegen
|
# Neuen IO anlegen
|
||||||
if bool(dict_io[key][7]) or isinstance(self, Core):
|
if bool(dict_io[key][7]) or isinstance(self, Base):
|
||||||
# Bei Bitwerten oder Core RevPiIOBase verwenden
|
# Bei Bitwerten oder Base IOBase verwenden
|
||||||
io_new = IOBase(
|
io_new = IOBase(
|
||||||
self, dict_io[key], iotype, "little", False
|
self, dict_io[key], iotype, "little", False
|
||||||
)
|
)
|
||||||
|
elif isinstance(self, Gateway) and iotype != MEM:
|
||||||
|
# Ersetzbare IOs erzeugen
|
||||||
|
io_new = IntIOReplaceable(
|
||||||
|
self, dict_io[key],
|
||||||
|
iotype,
|
||||||
|
"little",
|
||||||
|
# Bei AIO (103) signed auf True setzen
|
||||||
|
self._producttype == 103
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
io_new = IntIO(
|
io_new = IntIO(
|
||||||
self, dict_io[key],
|
self, dict_io[key],
|
||||||
@@ -441,7 +450,16 @@ class Device(object):
|
|||||||
producttype = property(_get_producttype)
|
producttype = property(_get_producttype)
|
||||||
|
|
||||||
|
|
||||||
class Core(Device):
|
class Base(Device):
|
||||||
|
|
||||||
|
"""Klasse fuer alle Base-Devices wie Core / Connect usw."""
|
||||||
|
|
||||||
|
__slots__ = ()
|
||||||
|
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class Core(Base):
|
||||||
|
|
||||||
"""Klasse fuer den RevPi Core.
|
"""Klasse fuer den RevPi Core.
|
||||||
|
|
||||||
@@ -849,7 +867,7 @@ class Gateway(Device):
|
|||||||
zur verfuegung, ueber die eigene IOs definiert werden, die ein
|
zur verfuegung, ueber die eigene IOs definiert werden, die ein
|
||||||
RevPiStructIO-Objekt abbilden.
|
RevPiStructIO-Objekt abbilden.
|
||||||
Dieser IO-Typ kann Werte ueber mehrere Bytes verarbeiten und zurueckgeben.
|
Dieser IO-Typ kann Werte ueber mehrere Bytes verarbeiten und zurueckgeben.
|
||||||
@see revpimodio2.io#IOBase.replace_io replace_io(name, frm, **kwargs)
|
@see revpimodio2.io#IntIOReplaceable.replace_io replace_io(...)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -925,5 +943,5 @@ class Virtual(Gateway):
|
|||||||
|
|
||||||
|
|
||||||
# Nachträglicher Import
|
# Nachträglicher Import
|
||||||
from .io import IOBase, IntIO
|
from .io import IOBase, IntIO, IntIOReplaceable
|
||||||
from revpimodio2 import INP, OUT, MEM
|
from revpimodio2 import INP, OUT, MEM
|
||||||
|
|||||||
@@ -231,7 +231,7 @@ class DeadIO(object):
|
|||||||
|
|
||||||
def replace_io(self, name, frm, **kwargs):
|
def replace_io(self, name, frm, **kwargs):
|
||||||
"""Stellt Funktion fuer weiter Bit-Ersetzungen bereit.
|
"""Stellt Funktion fuer weiter Bit-Ersetzungen bereit.
|
||||||
@see #IOBase.replace_io replace_io(...)"""
|
@see #IntIOReplaceable.replace_io replace_io(...)"""
|
||||||
self.__deadio.replace_io(name, frm, **kwargs)
|
self.__deadio.replace_io(name, frm, **kwargs)
|
||||||
|
|
||||||
_parentdevice = property(lambda self: None)
|
_parentdevice = property(lambda self: None)
|
||||||
@@ -496,70 +496,6 @@ class IOBase(object):
|
|||||||
"""
|
"""
|
||||||
self.__reg_xevent(func, delay, edge, as_thread, False)
|
self.__reg_xevent(func, delay, edge, as_thread, False)
|
||||||
|
|
||||||
def replace_io(self, name, frm, **kwargs):
|
|
||||||
"""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.
|
|
||||||
|
|
||||||
@param name Name des neuen Inputs
|
|
||||||
@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
|
|
||||||
- byteorder: Byteorder fuer den IO, Standardwert=little
|
|
||||||
- defaultvalue: Standardwert fuer IO
|
|
||||||
- event: Funktion fuer Eventhandling registrieren
|
|
||||||
- delay: Verzoegerung in ms zum Ausloesen wenn Wert gleich bleibt
|
|
||||||
- edge: Event ausfuehren bei RISING, FALLING or BOTH Wertaenderung
|
|
||||||
- as_thread: Fuehrt die event-Funktion als RevPiCallback-Thread aus
|
|
||||||
@see <a target="_blank"
|
|
||||||
href="https://docs.python.org/3/library/struct.html#format-characters"
|
|
||||||
>Python3 struct</a>
|
|
||||||
|
|
||||||
"""
|
|
||||||
if not isinstance(self._parentdevice, Gateway):
|
|
||||||
raise RuntimeError(
|
|
||||||
"this function can be used for ios on gatway or virtual "
|
|
||||||
"devices only"
|
|
||||||
)
|
|
||||||
if type(self) == StructIO:
|
|
||||||
raise RuntimeError(
|
|
||||||
"this io is already a replaced one"
|
|
||||||
)
|
|
||||||
|
|
||||||
# StructIO erzeugen
|
|
||||||
io_new = StructIO(
|
|
||||||
self,
|
|
||||||
name,
|
|
||||||
frm,
|
|
||||||
**kwargs
|
|
||||||
)
|
|
||||||
|
|
||||||
# StructIO in IO-Liste einfügen
|
|
||||||
self._parentdevice._modio.io._private_register_new_io_object(io_new)
|
|
||||||
|
|
||||||
# Optional Event eintragen
|
|
||||||
reg_event = kwargs.get("event", None)
|
|
||||||
if reg_event is not None:
|
|
||||||
io_new.reg_event(
|
|
||||||
reg_event,
|
|
||||||
kwargs.get("delay", 0),
|
|
||||||
kwargs.get("edge", BOTH),
|
|
||||||
kwargs.get("as_thread", False)
|
|
||||||
)
|
|
||||||
|
|
||||||
def set_value(self, value):
|
def set_value(self, value):
|
||||||
"""Setzt den Wert des IOs.
|
"""Setzt den Wert des IOs.
|
||||||
@param value IO-Wert als <class bytes'> oder <class 'bool'>"""
|
@param value IO-Wert als <class bytes'> oder <class 'bool'>"""
|
||||||
@@ -849,6 +785,80 @@ class IntIO(IOBase):
|
|||||||
value = property(get_intvalue, set_intvalue)
|
value = property(get_intvalue, set_intvalue)
|
||||||
|
|
||||||
|
|
||||||
|
class IntIOCounter(IntIO):
|
||||||
|
|
||||||
|
"""Erweitert die IntIO-Klasse um die .reset() Funktion fuer Counter."""
|
||||||
|
|
||||||
|
__slots__ = ()
|
||||||
|
|
||||||
|
def reset(self):
|
||||||
|
"""Setzt den Counter des Inputs zurueck."""
|
||||||
|
# TODO: Counter ID ermitteln
|
||||||
|
# TODO: Counter reset durchführen
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class IntIOReplaceable(IntIO):
|
||||||
|
|
||||||
|
"""Erweitert die IntIO-Klasse um die .replace_io Funktion."""
|
||||||
|
|
||||||
|
__slots__ = ()
|
||||||
|
|
||||||
|
def replace_io(self, name, frm, **kwargs):
|
||||||
|
"""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.
|
||||||
|
|
||||||
|
@param name Name des neuen Inputs
|
||||||
|
@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
|
||||||
|
- byteorder: Byteorder fuer den IO, Standardwert=little
|
||||||
|
- defaultvalue: Standardwert fuer IO
|
||||||
|
- event: Funktion fuer Eventhandling registrieren
|
||||||
|
- delay: Verzoegerung in ms zum Ausloesen wenn Wert gleich bleibt
|
||||||
|
- edge: Event ausfuehren bei RISING, FALLING or BOTH Wertaenderung
|
||||||
|
- as_thread: Fuehrt die event-Funktion als RevPiCallback-Thread aus
|
||||||
|
@see <a target="_blank"
|
||||||
|
href="https://docs.python.org/3/library/struct.html#format-characters"
|
||||||
|
>Python3 struct</a>
|
||||||
|
|
||||||
|
"""
|
||||||
|
# StructIO erzeugen
|
||||||
|
io_new = StructIO(
|
||||||
|
self,
|
||||||
|
name,
|
||||||
|
frm,
|
||||||
|
**kwargs
|
||||||
|
)
|
||||||
|
|
||||||
|
# StructIO in IO-Liste einfügen
|
||||||
|
self._parentdevice._modio.io._private_register_new_io_object(io_new)
|
||||||
|
|
||||||
|
# Optional Event eintragen
|
||||||
|
reg_event = kwargs.get("event", None)
|
||||||
|
if reg_event is not None:
|
||||||
|
io_new.reg_event(
|
||||||
|
reg_event,
|
||||||
|
kwargs.get("delay", 0),
|
||||||
|
kwargs.get("edge", BOTH),
|
||||||
|
kwargs.get("as_thread", False)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class StructIO(IOBase):
|
class StructIO(IOBase):
|
||||||
|
|
||||||
"""Klasse fuer den Zugriff auf Daten ueber ein definierten struct.
|
"""Klasse fuer den Zugriff auf Daten ueber ein definierten struct.
|
||||||
@@ -980,7 +990,3 @@ class StructIO(IOBase):
|
|||||||
frm = property(_get_frm)
|
frm = property(_get_frm)
|
||||||
signed = property(_get_signed)
|
signed = property(_get_signed)
|
||||||
value = property(get_structvalue, set_structvalue)
|
value = property(get_structvalue, set_structvalue)
|
||||||
|
|
||||||
|
|
||||||
# Nachträglicher Import
|
|
||||||
from .device import Gateway
|
|
||||||
|
|||||||
@@ -162,14 +162,19 @@ class RevPiModIO(object):
|
|||||||
|
|
||||||
if device["type"] == "BASE":
|
if device["type"] == "BASE":
|
||||||
pt = int(device["productType"])
|
pt = int(device["productType"])
|
||||||
if pt == 105:
|
if pt == 95:
|
||||||
|
# RevPi Core
|
||||||
|
dev_new = devicemodule.Core(
|
||||||
|
self, device, simulator=self._simulator
|
||||||
|
)
|
||||||
|
elif pt == 105:
|
||||||
# RevPi Connect
|
# RevPi Connect
|
||||||
dev_new = devicemodule.Connect(
|
dev_new = devicemodule.Connect(
|
||||||
self, device, simulator=self._simulator
|
self, device, simulator=self._simulator
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# RevPi Core immer als Fallback verwenden
|
# Base immer als Fallback verwenden
|
||||||
dev_new = devicemodule.Core(
|
dev_new = devicemodule.Base(
|
||||||
self, device, simulator=self._simulator
|
self, device, simulator=self._simulator
|
||||||
)
|
)
|
||||||
self.core = dev_new
|
self.core = dev_new
|
||||||
|
|||||||
Reference in New Issue
Block a user