Encodingzeile an PEP angepasst (muss in Zeile 0 - 1 sein)

Von RevPiModIO kwagrs entfernt und feste keyword vergeben
Bei Änderung der Byteorder wird defaultvalue angepasst da aus piCtory little
Beim Core nur die RS485 Fehlerwerte übernehmen
defaultvalue wird mit Formatierung ausgegeben
.isnumeric gegen isdigit getauscht
docstrings
This commit is contained in:
2017-08-26 15:12:55 +02:00
parent 2aebe170f5
commit 4e9abf794b
14 changed files with 342 additions and 241 deletions

View File

@@ -182,7 +182,7 @@ Gibt den RevPi Core Status zurueck.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
Status als int() Status als <class 'int'>
</dd> </dd>
</dl><a NAME="Core._set_leda1" ID="Core._set_leda1"></a> </dl><a NAME="Core._set_leda1" ID="Core._set_leda1"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -370,10 +370,10 @@ Methods</h3>
<table> <table>
<tr> <tr>
<td><a style="color:#0000FF" href="#Device.__init__">Device</a></td> <td><a style="color:#0000FF" href="#Device.__init__">Device</a></td>
<td>Instantiierung der Device()-Klasse.</td> <td>Instantiierung der Device-Klasse.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#Device.__bytes__">__bytes__</a></td> <td><a style="color:#0000FF" href="#Device.__bytes__">__bytes__</a></td>
<td>Gibt alle Daten des Devices als bytes() zurueck.</td> <td>Gibt alle Daten des Devices als <class 'bytes'> zurueck.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#Device.__contains__">__contains__</a></td> <td><a style="color:#0000FF" href="#Device.__contains__">__contains__</a></td>
<td>Prueft ob IO auf diesem Device liegt.</td> <td>Prueft ob IO auf diesem Device liegt.</td>
@@ -434,14 +434,14 @@ Static Methods</h3>
Device (Constructor)</h3> Device (Constructor)</h3>
<b>Device</b>(<i>parentmodio, dict_device, simulator=False</i>) <b>Device</b>(<i>parentmodio, dict_device, simulator=False</i>)
<p> <p>
Instantiierung der Device()-Klasse. Instantiierung der Device-Klasse.
</p><dl> </p><dl>
<dt><i>parent</i></dt> <dt><i>parent</i></dt>
<dd> <dd>
RevpiModIO parent object RevpiModIO parent object
</dd><dt><i>dict_device</i></dt> </dd><dt><i>dict_device</i></dt>
<dd> <dd>
dict() fuer dieses Device aus piCotry Konfiguration <class 'dict'> fuer dieses Device aus piCotry
</dd><dt><i>simulator:</i></dt> </dd><dt><i>simulator:</i></dt>
<dd> <dd>
Laed das Modul als Simulator und vertauscht IOs Laed das Modul als Simulator und vertauscht IOs
@@ -451,11 +451,11 @@ Laed das Modul als Simulator und vertauscht IOs
Device.__bytes__</h3> Device.__bytes__</h3>
<b>__bytes__</b>(<i></i>) <b>__bytes__</b>(<i></i>)
<p> <p>
Gibt alle Daten des Devices als bytes() zurueck. Gibt alle Daten des Devices als <class 'bytes'> zurueck.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
Devicedaten als bytes() Devicedaten als <class 'bytes'>
</dd> </dd>
</dl><a NAME="Device.__contains__" ID="Device.__contains__"></a> </dl><a NAME="Device.__contains__" ID="Device.__contains__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -466,7 +466,7 @@ Prueft ob IO auf diesem Device liegt.
</p><dl> </p><dl>
<dt><i>key</i></dt> <dt><i>key</i></dt>
<dd> <dd>
IO-Name str() / IO-Bytenummer int() IO-Name <class 'str'> / IO-Bytenummer <class 'int'>
</dd> </dd>
</dl><dl> </dl><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
@@ -493,7 +493,7 @@ Gibt Iterator aller IOs zurueck.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
iter() aller IOs <class 'iter'> aller IOs
</dd> </dd>
</dl><a NAME="Device.__len__" ID="Device.__len__"></a> </dl><a NAME="Device.__len__" ID="Device.__len__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -504,7 +504,7 @@ Gibt Anzahl der Bytes zurueck, die dieses Device belegt.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
int() <class 'int'>
</dd> </dd>
</dl><a NAME="Device.__str__" ID="Device.__str__"></a> </dl><a NAME="Device.__str__" ID="Device.__str__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -526,15 +526,15 @@ Erstellt aus der piCtory-Liste die IOs fuer dieses Device.
</p><dl> </p><dl>
<dt><i>dict_io</i></dt> <dt><i>dict_io</i></dt>
<dd> <dd>
dict()-Objekt aus piCtory Konfiguration <class 'dict'>-Objekt aus piCtory Konfiguration
</dd><dt><i>iotype</i></dt> </dd><dt><i>iotype</i></dt>
<dd> <dd>
io.Type() Wert <class 'Type'> Wert
</dd> </dd>
</dl><dl> </dl><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
slice()-Objekt mit Start und Stop Position dieser IOs <class 'slice'> mit Start und Stop Position dieser IOs
</dd> </dd>
</dl><a NAME="Device._devconfigure" ID="Device._devconfigure"></a> </dl><a NAME="Device._devconfigure" ID="Device._devconfigure"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -562,7 +562,7 @@ Gibt eine Liste aller Inputs und Outputs zurueck, keine MEMs.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
list() Input und Output, keine MEMs <class 'list'> Input und Output, keine MEMs
</dd> </dd>
</dl><a NAME="Device.get_inputs" ID="Device.get_inputs"></a> </dl><a NAME="Device.get_inputs" ID="Device.get_inputs"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -573,7 +573,7 @@ Gibt eine Liste aller Inputs zurueck.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
list() Inputs <class 'list'> Inputs
</dd> </dd>
</dl><a NAME="Device.get_memmories" ID="Device.get_memmories"></a> </dl><a NAME="Device.get_memmories" ID="Device.get_memmories"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -584,7 +584,7 @@ Gibt eine Liste aller mems zurueck.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
list() Mems <class 'list'> Mems
</dd> </dd>
</dl><a NAME="Device.get_outputs" ID="Device.get_outputs"></a> </dl><a NAME="Device.get_outputs" ID="Device.get_outputs"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -595,7 +595,7 @@ Gibt eine Liste aller Outputs zurueck.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
list() Outputs <class 'list'> Outputs
</dd> </dd>
</dl><a NAME="Device.readprocimg" ID="Device.readprocimg"></a> </dl><a NAME="Device.readprocimg" ID="Device.readprocimg"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -711,7 +711,7 @@ Prueft ob Device existiert.
</p><dl> </p><dl>
<dt><i>key</i></dt> <dt><i>key</i></dt>
<dd> <dd>
DeviceName str() / Positionsnummer int() DeviceName <class 'str'> / Positionsnummer <class 'int'>
</dd> </dd>
</dl><dl> </dl><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
@@ -749,12 +749,12 @@ Gibt angegebenes Device zurueck.
</p><dl> </p><dl>
<dt><i>key</i></dt> <dt><i>key</i></dt>
<dd> <dd>
DeviceName str() / Positionsnummer int() DeviceName <class 'str'> / Positionsnummer <class 'int'>
</dd> </dd>
</dl><dl> </dl><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
Gefundenes Device()-Objekt Gefundenes <class 'Device'>-Objekt
</dd> </dd>
</dl><a NAME="DeviceList.__iter__" ID="DeviceList.__iter__"></a> </dl><a NAME="DeviceList.__iter__" ID="DeviceList.__iter__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -765,7 +765,7 @@ Gibt Iterator aller Devices zurueck.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
iter() aller Devices <class 'iter'> aller Devices
</dd> </dd>
</dl><a NAME="DeviceList.__len__" ID="DeviceList.__len__"></a> </dl><a NAME="DeviceList.__len__" ID="DeviceList.__len__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -856,7 +856,7 @@ Gibt die Bytes aus, die dieses Device verwendet.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
bytes() des Devices <class 'bytes'> des Devices
</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>

View File

@@ -410,7 +410,7 @@ Gibt Zykluszeit zurueck.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
int() Zykluszeit in Millisekunden <class 'int'> Zykluszeit in Millisekunden
</dd> </dd>
</dl><a NAME="ProcimgWriter.run" ID="ProcimgWriter.run"></a> </dl><a NAME="ProcimgWriter.run" ID="ProcimgWriter.run"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -438,7 +438,7 @@ Setzt die Zykluszeit in Millisekunden.
</p><dl> </p><dl>
<dt><i>value</i></dt> <dt><i>value</i></dt>
<dd> <dd>
int() Millisekunden <class 'int'> Millisekunden
</dd> </dd>
</dl><a NAME="ProcimgWriter.stop" ID="ProcimgWriter.stop"></a> </dl><a NAME="ProcimgWriter.stop" ID="ProcimgWriter.stop"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">

View File

@@ -28,10 +28,10 @@ Classes</h3>
<td>Basisklasse fuer direkten Zugriff auf IO Objekte.</td> <td>Basisklasse fuer direkten Zugriff auf IO Objekte.</td>
</tr><tr> </tr><tr>
<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="#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> </tr><tr>
<td><a style="color:#0000FF" href="#Type">Type</a></td> <td><a style="color:#0000FF" href="#Type">Type</a></td>
<td>IO Typen.</td> <td>IO Typen.</td>
@@ -66,7 +66,7 @@ Methods</h3>
<table> <table>
<tr> <tr>
<td><a style="color:#0000FF" href="#DeadIO.__init__">DeadIO</a></td> <td><a style="color:#0000FF" href="#DeadIO.__init__">DeadIO</a></td>
<td>Instantiierung der DeadIO()-Klasse.</td> <td>Instantiierung der DeadIO-Klasse.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#DeadIO.replace_io">replace_io</a></td> <td><a style="color:#0000FF" href="#DeadIO.replace_io">replace_io</a></td>
<td>Stellt Funktion fuer weiter Bit-Ersetzungen bereit.</td> <td>Stellt Funktion fuer weiter Bit-Ersetzungen bereit.</td>
@@ -82,7 +82,7 @@ Static Methods</h3>
DeadIO (Constructor)</h3> DeadIO (Constructor)</h3>
<b>DeadIO</b>(<i>deadio</i>) <b>DeadIO</b>(<i>deadio</i>)
<p> <p>
Instantiierung der DeadIO()-Klasse. Instantiierung der DeadIO-Klasse.
</p><dl> </p><dl>
<dt><i>deadio</i></dt> <dt><i>deadio</i></dt>
<dd> <dd>
@@ -108,12 +108,13 @@ Stellt Funktion fuer weiter Bit-Ersetzungen bereit.
Basisklasse fuer alle IO-Objekte. Basisklasse fuer alle IO-Objekte.
</p><p> </p><p>
Die Basisfunktionalitaet ermoeglicht das Lesen und Schreiben der Werte Die Basisfunktionalitaet ermoeglicht das Lesen und Schreiben der Werte
als bytes() oder bool(). Dies entscheidet sich bei der Instantiierung. als <class bytes'> oder <class 'bool'>. Dies entscheidet sich bei der
Wenn eine Bittadresse angegeben wird, werden bool()-Werte erwartet Instantiierung.
und zurueckgegeben, ansonsten bytes(). Wenn eine Bittadresse angegeben wird, werden <class 'bool'>-Werte erwartet
und zurueckgegeben, ansonsten <class bytes'>.
</p><p> </p><p>
Diese Klasse dient als Basis fuer andere IO-Klassen mit denen die Werte Diese Klasse dient als Basis fuer andere IO-Klassen mit denen die Werte
auch als int() verwendet werden koennen. auch als <class 'int'> verwendet werden koennen.
</p><p> </p><p>
</p> </p>
@@ -123,7 +124,7 @@ object
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3> Class Attributes</h3>
<table> <table>
<tr><td>address</td></tr><tr><td>byteorder</td></tr><tr><td>length</td></tr><tr><td>name</td></tr><tr><td>type</td></tr><tr><td>value</td></tr> <tr><td>address</td></tr><tr><td>byteorder</td></tr><tr><td>defaultvalue</td></tr><tr><td>length</td></tr><tr><td>name</td></tr><tr><td>type</td></tr><tr><td>value</td></tr>
</table> </table>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3> Class Methods</h3>
@@ -135,13 +136,13 @@ Methods</h3>
<table> <table>
<tr> <tr>
<td><a style="color:#0000FF" href="#IOBase.__init__">IOBase</a></td> <td><a style="color:#0000FF" href="#IOBase.__init__">IOBase</a></td>
<td>Instantiierung der IOBase()-Klasse.</td> <td>Instantiierung der IOBase-Klasse.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#IOBase.__bool__">__bool__</a></td> <td><a style="color:#0000FF" href="#IOBase.__bool__">__bool__</a></td>
<td>bool()-wert der Klasse.</td> <td><class 'bool'>-Wert der Klasse.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#IOBase.__str__">__str__</a></td> <td><a style="color:#0000FF" href="#IOBase.__str__">__str__</a></td>
<td>str()-wert der Klasse.</td> <td><class 'str'>-Wert der Klasse.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#IOBase._get_address">_get_address</a></td> <td><a style="color:#0000FF" href="#IOBase._get_address">_get_address</a></td>
<td>Gibt die absolute Byteadresse im Prozessabbild zurueck.</td> <td>Gibt die absolute Byteadresse im Prozessabbild zurueck.</td>
@@ -158,8 +159,11 @@ Methods</h3>
<td><a style="color:#0000FF" href="#IOBase._get_name">_get_name</a></td> <td><a style="color:#0000FF" href="#IOBase._get_name">_get_name</a></td>
<td>Gibt den Namen des IOs zurueck.</td> <td>Gibt den Namen des IOs zurueck.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#IOBase.get_defaultvalue">get_defaultvalue</a></td>
<td>Gibt die Defaultvalue von piCtory zurueck.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#IOBase.get_value">get_value</a></td> <td><a style="color:#0000FF" href="#IOBase.get_value">get_value</a></td>
<td>Gibt den Wert des IOs als bytes() oder bool() zurueck.</td> <td>Gibt den Wert des IOs zurueck.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#IOBase.reg_event">reg_event</a></td> <td><a style="color:#0000FF" href="#IOBase.reg_event">reg_event</a></td>
<td>Registriert ein Event bei der Eventueberwachung.</td> <td>Registriert ein Event bei der Eventueberwachung.</td>
@@ -168,7 +172,7 @@ Methods</h3>
<td>Ersetzt bestehenden IO mit Neuem.</td> <td>Ersetzt bestehenden IO mit Neuem.</td>
</tr><tr> </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 mit bytes() oder bool().</td> <td>Setzt den Wert des IOs.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#IOBase.unreg_event">unreg_event</a></td> <td><a style="color:#0000FF" href="#IOBase.unreg_event">unreg_event</a></td>
<td>Entfernt ein Event aus der Eventueberwachung.</td> <td>Entfernt ein Event aus der Eventueberwachung.</td>
@@ -187,7 +191,7 @@ Static Methods</h3>
IOBase (Constructor)</h3> IOBase (Constructor)</h3>
<b>IOBase</b>(<i>parentdevice, valuelist, iotype, byteorder, signed</i>) <b>IOBase</b>(<i>parentdevice, valuelist, iotype, byteorder, signed</i>)
<p> <p>
Instantiierung der IOBase()-Klasse. Instantiierung der IOBase-Klasse.
</p><dl> </p><dl>
<dt><i>parentdevice</i></dt> <dt><i>parentdevice</i></dt>
<dd> <dd>
@@ -197,10 +201,10 @@ Parentdevice auf dem der IO liegt
Datenliste fuer Instantiierung Datenliste fuer Instantiierung
</dd><dt><i>iotype</i></dt> </dd><dt><i>iotype</i></dt>
<dd> <dd>
io.Type() Wert <class 'Type'> Wert
</dd><dt><i>byteorder</i></dt> </dd><dt><i>byteorder</i></dt>
<dd> <dd>
Byteorder 'little' / 'big' fuer int() Berechnung Byteorder 'little'/'big' fuer <class 'int'> Berechnung
</dd><dt><i>sigend</i></dt> </dd><dt><i>sigend</i></dt>
<dd> <dd>
Intberechnung mit Vorzeichen durchfuehren Intberechnung mit Vorzeichen durchfuehren
@@ -210,18 +214,18 @@ Intberechnung mit Vorzeichen durchfuehren
IOBase.__bool__</h3> IOBase.__bool__</h3>
<b>__bool__</b>(<i></i>) <b>__bool__</b>(<i></i>)
<p> <p>
bool()-wert der Klasse. <class 'bool'>-Wert der Klasse.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
IO-Wert als bool(). Nur False wenn False oder 0 sonst True <class 'bool'> Nur False wenn False oder 0 sonst True
</dd> </dd>
</dl><a NAME="IOBase.__str__" ID="IOBase.__str__"></a> </dl><a NAME="IOBase.__str__" ID="IOBase.__str__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
IOBase.__str__</h3> IOBase.__str__</h3>
<b>__str__</b>(<i></i>) <b>__str__</b>(<i></i>)
<p> <p>
str()-wert der Klasse. <class 'str'>-Wert der Klasse.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
@@ -247,7 +251,7 @@ Gibt konfigurierte Byteorder zurueck.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
str() Byteorder <class 'str'> Byteorder
</dd> </dd>
</dl><a NAME="IOBase._get_iotype" ID="IOBase._get_iotype"></a> </dl><a NAME="IOBase._get_iotype" ID="IOBase._get_iotype"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -258,7 +262,7 @@ Gibt io.Type zurueck.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
int() io.Type <class 'int'> io.Type
</dd> </dd>
</dl><a NAME="IOBase._get_length" ID="IOBase._get_length"></a> </dl><a NAME="IOBase._get_length" ID="IOBase._get_length"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -282,16 +286,27 @@ Gibt den Namen des IOs zurueck.
<dd> <dd>
IO Name IO Name
</dd> </dd>
</dl><a NAME="IOBase.get_defaultvalue" ID="IOBase.get_defaultvalue"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
IOBase.get_defaultvalue</h3>
<b>get_defaultvalue</b>(<i></i>)
<p>
Gibt die Defaultvalue von piCtory zurueck.
</p><dl>
<dt>Returns:</dt>
<dd>
Defaultvalue als <class 'byte'> oder <class 'bool'>
</dd>
</dl><a NAME="IOBase.get_value" ID="IOBase.get_value"></a> </dl><a NAME="IOBase.get_value" ID="IOBase.get_value"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
IOBase.get_value</h3> IOBase.get_value</h3>
<b>get_value</b>(<i></i>) <b>get_value</b>(<i></i>)
<p> <p>
Gibt den Wert des IOs als bytes() oder bool() zurueck. Gibt den Wert des IOs zurueck.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
IO-Wert IO-Wert als <class 'bytes'> oder <class 'bool'>
</dd> </dd>
</dl><a NAME="IOBase.reg_event" ID="IOBase.reg_event"></a> </dl><a NAME="IOBase.reg_event" ID="IOBase.reg_event"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -322,12 +337,12 @@ Ersetzt bestehenden IO mit Neuem.
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)
</dd><dt><i>kwargs</i></dt> </dd><dt><i>kwargs</i></dt>
<dd> <dd>
Weitere Parameter: Weitere Parameter:
- bmk: Bezeichnung fuer Input - bmk: Bezeichnung fuer Input
- bit: Registriert Input als bool() am angegebenen Bit im Byte - bit: Registriert IO als <class 'bool'> am angegebenen Bit im Byte
- byteorder: Byteorder fuer den Input, Standardwert=little - byteorder: Byteorder fuer den Input, Standardwert=little
- defaultvalue: Standardwert fuer Input, Standard ist 0 - defaultvalue: Standardwert fuer Input, Standard ist 0
- event: Funktion fuer Eventhandling registrieren - event: Funktion fuer Eventhandling registrieren
@@ -337,18 +352,18 @@ Weitere Parameter:
</dl><dl> </dl><dl>
<dt><b>See Also:</b></dt> <dt><b>See Also:</b></dt>
<dd> <dd>
<a style="color:#0000FF" target="_blank" href="https://docs.python.org/3/library/struct.html#format-characters" >Python3 struct()</a> <a style="color:#0000FF" target="_blank" href="https://docs.python.org/3/library/struct.html#format-characters" >Python3 struct</a>
</dd> </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>
<b>set_value</b>(<i>value</i>) <b>set_value</b>(<i>value</i>)
<p> <p>
Setzt den Wert des IOs mit bytes() oder bool(). Setzt den Wert des IOs.
</p><dl> </p><dl>
<dt><i>value</i></dt> <dt><i>value</i></dt>
<dd> <dd>
IO-Wert als bytes() oder bool() IO-Wert als <class bytes'> oder <class 'bool'>
</dd> </dd>
</dl><a NAME="IOBase.unreg_event" ID="IOBase.unreg_event"></a> </dl><a NAME="IOBase.unreg_event" ID="IOBase.unreg_event"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -376,15 +391,15 @@ Wartet auf Wertaenderung eines IOs.
</p><p> </p><p>
Bei Wertaenderung, wird das Warten mit 0 als Rueckgabewert beendet. Bei Wertaenderung, wird das Warten mit 0 als Rueckgabewert beendet.
</p><p> </p><p>
HINWEIS: Wenn ProcimgWriter() keine neuen Daten liefert, wird HINWEIS: Wenn <class 'ProcimgWriter'> keine neuen Daten liefert, wird
bis in die Ewigkeit gewartet (nicht bei Angabe von "timeout"). bis in die Ewigkeit gewartet (nicht bei Angabe von "timeout").
</p><p> </p><p>
Wenn edge mit RISING oder FALLING angegeben wird muss diese Flanke Wenn edge mit RISING oder FALLING angegeben wird muss diese Flanke
ausgeloest werden. Sollte der Wert 1 sein beim Eintritt mit Flanke ausgeloest werden. Sollte der Wert 1 sein beim Eintritt mit Flanke
RISING, wird das Warten erst bei Aenderung von 0 auf 1 beendet. RISING, wird das Warten erst bei Aenderung von 0 auf 1 beendet.
</p><p> </p><p>
Als exitevent kann ein threading.Event()-Objekt uebergeben werden, Als exitevent kann ein <class 'threading.Event'>-Objekt uebergeben
welches das Warten bei is_set() sofort mit 1 als Rueckgabewert werden, welches das Warten bei is_set() sofort mit 1 als Rueckgabewert
beendet. beendet.
</p><p> </p><p>
Wenn der Wert okvalue an dem IO fuer das Warten anliegt, wird Wenn der Wert okvalue an dem IO fuer das Warten anliegt, wird
@@ -400,7 +415,7 @@ Wartet auf Wertaenderung eines IOs.
Flanke RISING, FALLING, BOTH bei der mit True beendet wird Flanke RISING, FALLING, BOTH bei der mit True beendet wird
</dd><dt><i>exitevent</i></dt> </dd><dt><i>exitevent</i></dt>
<dd> <dd>
thrading.Event() fuer vorzeitiges Beenden mit False <class 'thrading.Event'> fuer vorzeitiges Beenden
</dd><dt><i>okvalue</i></dt> </dd><dt><i>okvalue</i></dt>
<dd> <dd>
IO-Wert, bei dem das Warten sofort mit True beendet wird IO-Wert, bei dem das Warten sofort mit True beendet wird
@@ -411,7 +426,7 @@ Zeit in ms nach der mit False abgebrochen wird
</dl><dl> </dl><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
int() erfolgreich Werte <= 0 <class 'int'> erfolgreich Werte <= 0
- Erfolgreich gewartet - Erfolgreich gewartet
Wert 0: IO hat den Wert gewechselt Wert 0: IO hat den Wert gewechselt
Wert -1: okvalue stimmte mit IO ueberein Wert -1: okvalue stimmte mit IO ueberein
@@ -496,7 +511,7 @@ Prueft ob IO existiert.
</p><dl> </p><dl>
<dt><i>key</i></dt> <dt><i>key</i></dt>
<dd> <dd>
IO-Name str() oder Byte int() IO-Name <class 'str'> oder Byte <class 'int'>
</dd> </dd>
</dl><dl> </dl><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
@@ -608,12 +623,12 @@ Neues IO Objekt
<a NAME="IntIO" ID="IntIO"></a> <a NAME="IntIO" ID="IntIO"></a>
<h2 style="background-color:#FFFFFF;color:#0000FF">IntIO</h2> <h2 style="background-color:#FFFFFF;color:#0000FF">IntIO</h2>
<p> <p>
Klasse fuer den Zugriff auf die Daten mit Konvertierung in int(). Klasse fuer den Zugriff auf die Daten mit Konvertierung in int.
</p><p> </p><p>
Diese Klasse erweitert die Funktion von IOBase() um Funktionen, Diese Klasse erweitert die Funktion von <class 'IOBase'> um Funktionen,
ueber die mit int() Werten gearbeitet werden kann. Fuer die Umwandlung ueber die mit <class 'int'> Werten gearbeitet werden kann. Fuer die
koennen 'Byteorder' (Default 'little') und 'signed' (Default False) als Umwandlung koennen 'Byteorder' (Default 'little') und 'signed' (Default
Parameter gesetzt werden. False) als Parameter gesetzt werden.
</p><dl> </p><dl>
<dt><b>See Also:</b></dt> <dt><b>See Also:</b></dt>
<dd> <dd>
@@ -626,7 +641,7 @@ IOBase
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3> Class Attributes</h3>
<table> <table>
<tr><td>byteorder</td></tr><tr><td>signed</td></tr><tr><td>value</td></tr> <tr><td>byteorder</td></tr><tr><td>defaultvalue</td></tr><tr><td>signed</td></tr><tr><td>value</td></tr>
</table> </table>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3> Class Methods</h3>
@@ -638,19 +653,22 @@ Methods</h3>
<table> <table>
<tr> <tr>
<td><a style="color:#0000FF" href="#IntIO.__int__">__int__</a></td> <td><a style="color:#0000FF" href="#IntIO.__int__">__int__</a></td>
<td>Gibt IO als int() Wert zurueck mit Beachtung byteorder/signed.</td> <td>Gibt IO-Wert zurueck mit Beachtung byteorder/signed.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#IntIO._get_signed">_get_signed</a></td> <td><a style="color:#0000FF" href="#IntIO._get_signed">_get_signed</a></td>
<td>Ruft ab, ob der Wert Vorzeichenbehaftet behandelt werden soll.</td> <td>Ruft ab, ob der Wert Vorzeichenbehaftet behandelt werden soll.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#IntIO._set_byteorder">_set_byteorder</a></td> <td><a style="color:#0000FF" href="#IntIO._set_byteorder">_set_byteorder</a></td>
<td>Setzt Byteorder fuer int() Umwandlung.</td> <td>Setzt Byteorder fuer <class 'int'> Umwandlung.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#IntIO._set_signed">_set_signed</a></td> <td><a style="color:#0000FF" href="#IntIO._set_signed">_set_signed</a></td>
<td>Left fest, ob der Wert Vorzeichenbehaftet behandelt werden soll.</td> <td>Left fest, ob der Wert Vorzeichenbehaftet behandelt werden soll.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#IntIO.get_int">get_int</a></td> <td><a style="color:#0000FF" href="#IntIO.get_int">get_int</a></td>
<td>Gibt IO als int() Wert zurueck mit Beachtung byteorder/signed.</td> <td>Gibt IO-Wert zurueck mit Beachtung byteorder/signed.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#IntIO.get_intdefaultvalue">get_intdefaultvalue</a></td>
<td>Gibt die Defaultvalue als <class 'int'> zurueck.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#IntIO.set_int">set_int</a></td> <td><a style="color:#0000FF" href="#IntIO.set_int">set_int</a></td>
<td>Setzt IO mit Beachtung byteorder/signed.</td> <td>Setzt IO mit Beachtung byteorder/signed.</td>
@@ -666,11 +684,11 @@ Static Methods</h3>
IntIO.__int__</h3> IntIO.__int__</h3>
<b>__int__</b>(<i></i>) <b>__int__</b>(<i></i>)
<p> <p>
Gibt IO als int() Wert zurueck mit Beachtung byteorder/signed. Gibt IO-Wert zurueck mit Beachtung byteorder/signed.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
int() ohne Vorzeichen IO-Wert als <class 'int'>
</dd> </dd>
</dl><a NAME="IntIO._get_signed" ID="IntIO._get_signed"></a> </dl><a NAME="IntIO._get_signed" ID="IntIO._get_signed"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -688,11 +706,11 @@ True, wenn Vorzeichenbehaftet
IntIO._set_byteorder</h3> IntIO._set_byteorder</h3>
<b>_set_byteorder</b>(<i>value</i>) <b>_set_byteorder</b>(<i>value</i>)
<p> <p>
Setzt Byteorder fuer int() Umwandlung. Setzt Byteorder fuer <class 'int'> Umwandlung.
</p><dl> </p><dl>
<dt><i>value</i></dt> <dt><i>value</i></dt>
<dd> <dd>
str() 'little' or 'big' <class 'str'> 'little' or 'big'
</dd> </dd>
</dl><a NAME="IntIO._set_signed" ID="IntIO._set_signed"></a> </dl><a NAME="IntIO._set_signed" ID="IntIO._set_signed"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -710,11 +728,22 @@ True, wenn mit Vorzeichen behandel
IntIO.get_int</h3> IntIO.get_int</h3>
<b>get_int</b>(<i></i>) <b>get_int</b>(<i></i>)
<p> <p>
Gibt IO als int() Wert zurueck mit Beachtung byteorder/signed. Gibt IO-Wert zurueck mit Beachtung byteorder/signed.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
int() Wert IO-Wert als <class 'int'>
</dd>
</dl><a NAME="IntIO.get_intdefaultvalue" ID="IntIO.get_intdefaultvalue"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
IntIO.get_intdefaultvalue</h3>
<b>get_intdefaultvalue</b>(<i></i>)
<p>
Gibt die Defaultvalue als <class 'int'> zurueck.
</p><dl>
<dt>Returns:</dt>
<dd>
<class 'int'> Defaultvalue
</dd> </dd>
</dl><a NAME="IntIO.set_int" ID="IntIO.set_int"></a> </dl><a NAME="IntIO.set_int" ID="IntIO.set_int"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -725,7 +754,7 @@ Setzt IO mit Beachtung byteorder/signed.
</p><dl> </p><dl>
<dt><i>value</i></dt> <dt><i>value</i></dt>
<dd> <dd>
int() <class 'int'> Wert
</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>
@@ -733,10 +762,9 @@ int()
<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>
Klasse fuer den Zugriff auf Daten ueber ein definierten struct(). Klasse fuer den Zugriff auf Daten ueber ein definierten struct.
</p><p> </p><p>
Diese Klasse ueberschreibt get_value() und set_value() der IOBase() Sie stellt ueber struct die Werte in der gewuenschten Formatierung
Klasse. Sie stellt ueber struct die Werte in der gewuenschten Formatierung
bereit. Der struct-Formatwert wird bei der Instantiierung festgelegt. bereit. Der struct-Formatwert wird bei der Instantiierung festgelegt.
</p><dl> </p><dl>
<dt><b>See Also:</b></dt> <dt><b>See Also:</b></dt>
@@ -750,7 +778,7 @@ IOBase
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Class Attributes</h3> Class Attributes</h3>
<table> <table>
<tr><td>frm</td></tr><tr><td>signed</td></tr><tr><td>value</td></tr> <tr><td>defaultvalue</td></tr><tr><td>frm</td></tr><tr><td>signed</td></tr><tr><td>value</td></tr>
</table> </table>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
Class Methods</h3> Class Methods</h3>
@@ -765,11 +793,14 @@ Methods</h3>
<td>Erstellt einen IO mit struct-Formatierung.</td> <td>Erstellt einen IO mit struct-Formatierung.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#StructIO._get_frm">_get_frm</a></td> <td><a style="color:#0000FF" href="#StructIO._get_frm">_get_frm</a></td>
<td>Ruft die struct() Formatierung ab.</td> <td>Ruft die struct Formatierung ab.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#StructIO._get_signed">_get_signed</a></td> <td><a style="color:#0000FF" href="#StructIO._get_signed">_get_signed</a></td>
<td>Ruft ab, ob der Wert Vorzeichenbehaftet behandelt werden soll.</td> <td>Ruft ab, ob der Wert Vorzeichenbehaftet behandelt werden soll.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#StructIO.get_structdefaultvalue">get_structdefaultvalue</a></td>
<td>Gibt die Defaultvalue mit struct Formatierung zurueck.</td>
</tr><tr>
<td><a style="color:#0000FF" href="#StructIO.get_structvalue">get_structvalue</a></td> <td><a style="color:#0000FF" href="#StructIO.get_structvalue">get_structvalue</a></td>
<td>Gibt den Wert mit struct Formatierung zurueck.</td> <td>Gibt den Wert mit struct Formatierung zurueck.</td>
</tr><tr> </tr><tr>
@@ -797,12 +828,12 @@ 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)
</dd><dt><i>kwargs</i></dt> </dd><dt><i>kwargs</i></dt>
<dd> <dd>
Weitere Parameter: Weitere Parameter:
- bmk: Bezeichnung fuer Output - bmk: Bezeichnung fuer Output
- bit: Registriert Outputs als bool() am angegebenen Bit im Byte - bit: Registriert IO als <class 'bool'> am angegebenen Bit im Byte
- byteorder: Byteorder fuer den Input, Standardwert=little - byteorder: Byteorder fuer den Input, Standardwert=little
- defaultvalue: Standardwert fuer Output, Standard ist 0 - defaultvalue: Standardwert fuer Output, Standard ist 0
</dd> </dd>
@@ -811,11 +842,11 @@ Weitere Parameter:
StructIO._get_frm</h3> StructIO._get_frm</h3>
<b>_get_frm</b>(<i></i>) <b>_get_frm</b>(<i></i>)
<p> <p>
Ruft die struct() Formatierung ab. Ruft die struct Formatierung ab.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
struct() Formatierung struct Formatierung
</dd> </dd>
</dl><a NAME="StructIO._get_signed" ID="StructIO._get_signed"></a> </dl><a NAME="StructIO._get_signed" ID="StructIO._get_signed"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -828,6 +859,17 @@ Ruft ab, ob der Wert Vorzeichenbehaftet behandelt werden soll.
<dd> <dd>
True, wenn Vorzeichenbehaftet True, wenn Vorzeichenbehaftet
</dd> </dd>
</dl><a NAME="StructIO.get_structdefaultvalue" ID="StructIO.get_structdefaultvalue"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000">
StructIO.get_structdefaultvalue</h3>
<b>get_structdefaultvalue</b>(<i></i>)
<p>
Gibt die Defaultvalue mit struct Formatierung zurueck.
</p><dl>
<dt>Returns:</dt>
<dd>
Defaultvalue vom Typ der struct-Formatierung
</dd>
</dl><a NAME="StructIO.get_structvalue" ID="StructIO.get_structvalue"></a> </dl><a NAME="StructIO.get_structvalue" ID="StructIO.get_structvalue"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
StructIO.get_structvalue</h3> StructIO.get_structvalue</h3>

View File

@@ -126,7 +126,7 @@ Methods</h3>
<td>Beendet mainloop() und optional autorefresh.</td> <td>Beendet mainloop() und optional autorefresh.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO.get_jconfigrsc">get_jconfigrsc</a></td> <td><a style="color:#0000FF" href="#RevPiModIO.get_jconfigrsc">get_jconfigrsc</a></td>
<td>Laed die piCotry Konfiguration und erstellt ein dict().</td> <td>Laed die piCotry Konfiguration und erstellt ein <class 'dict'>.</td>
</tr><tr> </tr><tr>
<td><a style="color:#0000FF" href="#RevPiModIO.handlesignalend">handlesignalend</a></td> <td><a style="color:#0000FF" href="#RevPiModIO.handlesignalend">handlesignalend</a></td>
<td>Signalhandler fuer Programmende verwalten.</td> <td>Signalhandler fuer Programmende verwalten.</td>
@@ -158,19 +158,28 @@ Static Methods</h3>
<a NAME="RevPiModIO.__init__" ID="RevPiModIO.__init__"></a> <a NAME="RevPiModIO.__init__" ID="RevPiModIO.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIO (Constructor)</h3> RevPiModIO (Constructor)</h3>
<b>RevPiModIO</b>(<i>**kwargs</i>) <b>RevPiModIO</b>(<i>autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False</i>)
<p> <p>
Instantiiert die Grundfunktionen. Instantiiert die Grundfunktionen.
</p><dl> </p><dl>
<dt><i>kwargs</i></dt> <dt><i>autorefresh</i></dt>
<dd> <dd>
Weitere Parameter: Wenn True, alle Devices zu autorefresh hinzufuegen
- autorefresh: Wenn True, alle Devices zu autorefresh hinzufuegen </dd><dt><i>monitoring</i></dt>
- configrsc: Pfad zur piCtory Konfigurationsdatei <dd>
- procimg: Pfad zum Prozessabbild In- und Outputs werden gelesen, niemals geschrieben
- monitoring: In- und Outputs werden gelesen, niemals geschrieben </dd><dt><i>syncoutputs</i></dt>
- simulator: Laed das Modul als Simulator und vertauscht IOs <dd>
- syncoutputs: Aktuell gesetzte Outputs vom Prozessabbild einlesen Aktuell gesetzte Outputs vom Prozessabbild einlesen
</dd><dt><i>procimg</i></dt>
<dd>
Abweichender Pfad zum Prozessabbild
</dd><dt><i>configrsc</i></dt>
<dd>
Abweichender Pfad zur piCtory Konfigurationsdatei
</dd><dt><i>simulator</i></dt>
<dd>
Laed das Modul als Simulator und vertauscht IOs
</dd> </dd>
</dl><a NAME="RevPiModIO.__del__" ID="RevPiModIO.__del__"></a> </dl><a NAME="RevPiModIO.__del__" ID="RevPiModIO.__del__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -308,7 +317,7 @@ Setzt Aktualisierungsrate der Prozessabbild-Synchronisierung.
</p><dl> </p><dl>
<dt><i>milliseconds</i></dt> <dt><i>milliseconds</i></dt>
<dd> <dd>
int() in Millisekunden <class 'int'> in Millisekunden
</dd> </dd>
</dl><a NAME="RevPiModIO._set_maxioerrors" ID="RevPiModIO._set_maxioerrors"></a> </dl><a NAME="RevPiModIO._set_maxioerrors" ID="RevPiModIO._set_maxioerrors"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -394,11 +403,11 @@ Entfernt auch alle Devices aus autorefresh
RevPiModIO.get_jconfigrsc</h3> RevPiModIO.get_jconfigrsc</h3>
<b>get_jconfigrsc</b>(<i></i>) <b>get_jconfigrsc</b>(<i></i>)
<p> <p>
Laed die piCotry Konfiguration und erstellt ein dict(). Laed die piCotry Konfiguration und erstellt ein <class 'dict'>.
</p><dl> </p><dl>
<dt>Returns:</dt> <dt>Returns:</dt>
<dd> <dd>
dict() der piCtory Konfiguration <class 'dict'> der piCtory Konfiguration
</dd> </dd>
</dl><a NAME="RevPiModIO.handlesignalend" ID="RevPiModIO.handlesignalend"></a> </dl><a NAME="RevPiModIO.handlesignalend" ID="RevPiModIO.handlesignalend"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
@@ -579,16 +588,16 @@ Static Methods</h3>
<a NAME="RevPiModIODriver.__init__" ID="RevPiModIODriver.__init__"></a> <a NAME="RevPiModIODriver.__init__" ID="RevPiModIODriver.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIODriver (Constructor)</h3> RevPiModIODriver (Constructor)</h3>
<b>RevPiModIODriver</b>(<i>vdev, **kwargs</i>) <b>RevPiModIODriver</b>(<i>virtdev, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None</i>)
<p> <p>
Instantiiert die Grundfunktionen. Instantiiert die Grundfunktionen.
</p><p>
Parameter 'monitoring' und 'simulator' stehen hier nicht zur
Verfuegung, da diese automatisch gesetzt werden.
</p><dl> </p><dl>
<dt><i>vdev</i></dt> <dt><i>virtdev</i></dt>
<dd> <dd>
Virtuelles Device fuer die Verwendung / oder list() Virtuelles Device oder mehrere als <class 'list'>
</dd><dt><i>kwargs</i></dt>
<dd>
Weitere Parameter (nicht monitoring und simulator)
</dd> </dd>
</dl><dl> </dl><dl>
<dt><b>See Also:</b></dt> <dt><b>See Also:</b></dt>
@@ -639,7 +648,7 @@ Static Methods</h3>
<a NAME="RevPiModIOSelected.__init__" ID="RevPiModIOSelected.__init__"></a> <a NAME="RevPiModIOSelected.__init__" ID="RevPiModIOSelected.__init__"></a>
<h3 style="background-color:#FFFFFF;color:#FF0000"> <h3 style="background-color:#FFFFFF;color:#FF0000">
RevPiModIOSelected (Constructor)</h3> RevPiModIOSelected (Constructor)</h3>
<b>RevPiModIOSelected</b>(<i>deviceselection, **kwargs</i>) <b>RevPiModIOSelected</b>(<i>deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False</i>)
<p> <p>
Instantiiert nur fuer angegebene Devices die Grundfunktionen. Instantiiert nur fuer angegebene Devices die Grundfunktionen.
</p><p> </p><p>
@@ -650,9 +659,6 @@ Instantiiert nur fuer angegebene Devices die Grundfunktionen.
<dt><i>deviceselection</i></dt> <dt><i>deviceselection</i></dt>
<dd> <dd>
Positionsnummer oder Devicename Positionsnummer oder Devicename
</dd><dt><i>kwargs</i></dt>
<dd>
Weitere Parameter
</dd> </dd>
</dl><dl> </dl><dl>
<dt><b>See Also:</b></dt> <dt><b>See Also:</b></dt>

View File

@@ -74,6 +74,8 @@ revpimodio2.io.IOBase._get_length?5()
revpimodio2.io.IOBase._get_name?5() revpimodio2.io.IOBase._get_name?5()
revpimodio2.io.IOBase.address?7 revpimodio2.io.IOBase.address?7
revpimodio2.io.IOBase.byteorder?7 revpimodio2.io.IOBase.byteorder?7
revpimodio2.io.IOBase.defaultvalue?7
revpimodio2.io.IOBase.get_defaultvalue?4()
revpimodio2.io.IOBase.get_value?4() revpimodio2.io.IOBase.get_value?4()
revpimodio2.io.IOBase.length?7 revpimodio2.io.IOBase.length?7
revpimodio2.io.IOBase.name?7 revpimodio2.io.IOBase.name?7
@@ -91,13 +93,17 @@ revpimodio2.io.IntIO._get_signed?5()
revpimodio2.io.IntIO._set_byteorder?5(value) revpimodio2.io.IntIO._set_byteorder?5(value)
revpimodio2.io.IntIO._set_signed?5(value) revpimodio2.io.IntIO._set_signed?5(value)
revpimodio2.io.IntIO.byteorder?7 revpimodio2.io.IntIO.byteorder?7
revpimodio2.io.IntIO.defaultvalue?7
revpimodio2.io.IntIO.get_int?4() revpimodio2.io.IntIO.get_int?4()
revpimodio2.io.IntIO.get_intdefaultvalue?4()
revpimodio2.io.IntIO.set_int?4(value) revpimodio2.io.IntIO.set_int?4(value)
revpimodio2.io.IntIO.signed?7 revpimodio2.io.IntIO.signed?7
revpimodio2.io.IntIO.value?7 revpimodio2.io.IntIO.value?7
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.frm?7 revpimodio2.io.StructIO.frm?7
revpimodio2.io.StructIO.get_structdefaultvalue?4()
revpimodio2.io.StructIO.get_structvalue?4() revpimodio2.io.StructIO.get_structvalue?4()
revpimodio2.io.StructIO.set_structvalue?4(value) revpimodio2.io.StructIO.set_structvalue?4(value)
revpimodio2.io.StructIO.signed?7 revpimodio2.io.StructIO.signed?7
@@ -139,7 +145,7 @@ revpimodio2.modio.RevPiModIO.setdefaultvalues?4(device=None)
revpimodio2.modio.RevPiModIO.simulator?7 revpimodio2.modio.RevPiModIO.simulator?7
revpimodio2.modio.RevPiModIO.syncoutputs?4(device=None) revpimodio2.modio.RevPiModIO.syncoutputs?4(device=None)
revpimodio2.modio.RevPiModIO.writeprocimg?4(device=None) revpimodio2.modio.RevPiModIO.writeprocimg?4(device=None)
revpimodio2.modio.RevPiModIO?1(**kwargs) revpimodio2.modio.RevPiModIO?1(autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False)
revpimodio2.modio.RevPiModIODriver?1(vdev, **kwargs) revpimodio2.modio.RevPiModIODriver?1(virtdev, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None)
revpimodio2.modio.RevPiModIOSelected?1(deviceselection, **kwargs) revpimodio2.modio.RevPiModIOSelected?1(deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False)
revpimodio2.summary.Summary?1(summary) revpimodio2.summary.Summary?1(summary)

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Project SYSTEM "Project-5.1.dtd"> <!DOCTYPE Project SYSTEM "Project-5.1.dtd">
<!-- eric project file for project revpimodio2 --> <!-- eric project file for project revpimodio2 -->
<!-- Saved: 2017-08-21, 17:16:10 --> <!-- Saved: 2017-08-26, 09:26:35 -->
<!-- Copyright (C) 2017 Sven Sager, akira@narux.de --> <!-- Copyright (C) 2017 Sven Sager, akira@narux.de -->
<Project version="5.1"> <Project version="5.1">
<Language>en_US</Language> <Language>en_US</Language>
@@ -9,10 +9,10 @@
<ProgLanguage mixed="0">Python3</ProgLanguage> <ProgLanguage mixed="0">Python3</ProgLanguage>
<ProjectType>Console</ProjectType> <ProjectType>Console</ProjectType>
<Description>Das Modul stellt alle Devices und IOs aus der piCtory Konfiguration in Python3 zur Verfügung. Es ermöglicht den direkten Zugriff auf die Werte über deren vergebenen Namen. Lese- und Schreibaktionen mit dem Prozessabbild werden von dem Modul selbst verwaltet, ohne dass sich der Programmierer um Offsets und Adressen kümmern muss. Für die Gatewaymodule wie ModbusTCP oder Profinet sind eigene 'Inputs' und 'Outputs' über einen bestimmten Adressbereich definierbar. Auf diese IOs kann mit Python3 über den Namen direkt auf die Werte zugegriffen werden.</Description> <Description>Das Modul stellt alle Devices und IOs aus der piCtory Konfiguration in Python3 zur Verfügung. Es ermöglicht den direkten Zugriff auf die Werte über deren vergebenen Namen. Lese- und Schreibaktionen mit dem Prozessabbild werden von dem Modul selbst verwaltet, ohne dass sich der Programmierer um Offsets und Adressen kümmern muss. Für die Gatewaymodule wie ModbusTCP oder Profinet sind eigene 'Inputs' und 'Outputs' über einen bestimmten Adressbereich definierbar. Auf diese IOs kann mit Python3 über den Namen direkt auf die Werte zugegriffen werden.</Description>
<Version>2.0.0</Version> <Version>2.0.1</Version>
<Author>Sven Sager</Author> <Author>Sven Sager</Author>
<Email>akira@narux.de</Email> <Email>akira@narux.de</Email>
<Eol index="-1"/> <Eol index="1"/>
<Sources> <Sources>
<Source>setup.py</Source> <Source>setup.py</Source>
<Source>revpimodio2/modio.py</Source> <Source>revpimodio2/modio.py</Source>
@@ -26,6 +26,9 @@
<Source>test/test_dio_mainloop.py</Source> <Source>test/test_dio_mainloop.py</Source>
<Source>test/test_dio_cycleloop.py</Source> <Source>test/test_dio_cycleloop.py</Source>
<Source>test/test_net_leistung.py</Source> <Source>test/test_net_leistung.py</Source>
<Source>revpimodio2/net.py</Source>
<Source>test/web_cycleloop.py</Source>
<Source>test/web_mainloop.py</Source>
</Sources> </Sources>
<Forms/> <Forms/>
<Translations/> <Translations/>

View File

@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
# #
# python3-RevPiModIO # python3-RevPiModIO
# #
# Webpage: https://revpimodio.org/ # Webpage: https://revpimodio.org/
# (c) Sven Sager, License: LGPLv3 # (c) Sven Sager, License: LGPLv3
# #
# -*- coding: utf-8 -*-
"""Stellt alle Klassen fuer den RevolutionPi zur Verfuegung. """Stellt alle Klassen fuer den RevolutionPi zur Verfuegung.
Stellt Klassen fuer die einfache Verwendung des Revolution Pis der Stellt Klassen fuer die einfache Verwendung des Revolution Pis der
@@ -24,7 +24,7 @@ __all__ = ["RevPiModIO", "RevPiModIOSelected", "RevPiModIODriver"]
__author__ = "Sven Sager <akira@revpimodio.org>" __author__ = "Sven Sager <akira@revpimodio.org>"
__name__ = "revpimodio2" __name__ = "revpimodio2"
__package__ = "revpimodio2" __package__ = "revpimodio2"
__version__ = "2.0.0" __version__ = "2.0.1"
# Global package values # Global package values
OFF = 0 OFF = 0

View File

@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
# #
# python3-RevPiModIO # python3-RevPiModIO
# #
# Webpage: https://revpimodio.org/ # Webpage: https://revpimodio.org/
# (c) Sven Sager, License: LGPLv3 # (c) Sven Sager, License: LGPLv3
# #
# -*- coding: utf-8 -*-
"""Bildet die App Sektion von piCtory ab.""" """Bildet die App Sektion von piCtory ab."""

View File

@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
# #
# python3-RevPiModIO # python3-RevPiModIO
# #
# Webpage: https://revpimodio.org/ # Webpage: https://revpimodio.org/
# (c) Sven Sager, License: LGPLv3 # (c) Sven Sager, License: LGPLv3
# #
# -*- coding: utf-8 -*-
"""Modul fuer die Verwaltung der Devices.""" """Modul fuer die Verwaltung der Devices."""
from threading import Lock from threading import Lock
from .helper import ProcimgWriter from .helper import ProcimgWriter
@@ -20,7 +20,7 @@ class DeviceList(object):
def __contains__(self, key): def __contains__(self, key):
"""Prueft ob Device existiert. """Prueft ob Device existiert.
@param key DeviceName str() / Positionsnummer int() @param key DeviceName <class 'str'> / Positionsnummer <class 'int'>
@return True, wenn Device vorhanden""" @return True, wenn Device vorhanden"""
if type(key) == int: if type(key) == int:
return key in self.__dict_position return key in self.__dict_position
@@ -49,8 +49,8 @@ class DeviceList(object):
def __getitem__(self, key): def __getitem__(self, key):
"""Gibt angegebenes Device zurueck. """Gibt angegebenes Device zurueck.
@param key DeviceName str() / Positionsnummer int() @param key DeviceName <class 'str'> / Positionsnummer <class 'int'>
@return Gefundenes Device()-Objekt""" @return Gefundenes <class 'Device'>-Objekt"""
if type(key) == int: if type(key) == int:
if key not in self.__dict_position: if key not in self.__dict_position:
raise KeyError("no device on position {}".format(key)) raise KeyError("no device on position {}".format(key))
@@ -60,7 +60,7 @@ class DeviceList(object):
def __iter__(self): def __iter__(self):
"""Gibt Iterator aller Devices zurueck. """Gibt Iterator aller Devices zurueck.
@return iter() aller Devices""" @return <class 'iter'> aller Devices"""
for dev in sorted(self.__dict_position): for dev in sorted(self.__dict_position):
yield self.__dict_position[dev] yield self.__dict_position[dev]
@@ -91,10 +91,10 @@ class Device(object):
""" """
def __init__(self, parentmodio, dict_device, simulator=False): def __init__(self, parentmodio, dict_device, simulator=False):
"""Instantiierung der Device()-Klasse. """Instantiierung der Device-Klasse.
@param parent RevpiModIO parent object @param parent RevpiModIO parent object
@param dict_device dict() fuer dieses Device aus piCotry Konfiguration @param dict_device <class 'dict'> fuer dieses Device aus piCotry
@param simulator: Laed das Modul als Simulator und vertauscht IOs @param simulator: Laed das Modul als Simulator und vertauscht IOs
""" """
@@ -149,13 +149,13 @@ class Device(object):
self._devconfigure() self._devconfigure()
def __bytes__(self): def __bytes__(self):
"""Gibt alle Daten des Devices als bytes() zurueck. """Gibt alle Daten des Devices als <class 'bytes'> zurueck.
@return Devicedaten als bytes()""" @return Devicedaten als <class 'bytes'>"""
return bytes(self._ba_devdata) return bytes(self._ba_devdata)
def __contains__(self, key): def __contains__(self, key):
"""Prueft ob IO auf diesem Device liegt. """Prueft ob IO auf diesem Device liegt.
@param key IO-Name str() / IO-Bytenummer int() @param key IO-Name <class 'str'> / IO-Bytenummer <class 'int'>
@return True, wenn device vorhanden""" @return True, wenn device vorhanden"""
if type(key) == str: if type(key) == str:
return key in self._modio.io \ return key in self._modio.io \
@@ -176,14 +176,14 @@ class Device(object):
def __iter__(self): def __iter__(self):
"""Gibt Iterator aller IOs zurueck. """Gibt Iterator aller IOs zurueck.
@return iter() aller IOs""" @return <class 'iter'> aller IOs"""
for lst_io in self._modio.io[self._slc_devoff]: for lst_io in self._modio.io[self._slc_devoff]:
for io in lst_io: for io in lst_io:
yield io yield io
def __len__(self): def __len__(self):
"""Gibt Anzahl der Bytes zurueck, die dieses Device belegt. """Gibt Anzahl der Bytes zurueck, die dieses Device belegt.
@return int()""" @return <class 'int'>"""
return self._length return self._length
def __str__(self): def __str__(self):
@@ -194,9 +194,9 @@ class Device(object):
def _buildio(self, dict_io, iotype): def _buildio(self, dict_io, iotype):
"""Erstellt aus der piCtory-Liste die IOs fuer dieses Device. """Erstellt aus der piCtory-Liste die IOs fuer dieses Device.
@param dict_io dict()-Objekt aus piCtory Konfiguration @param dict_io <class 'dict'>-Objekt aus piCtory Konfiguration
@param iotype io.Type() Wert @param iotype <class 'Type'> Wert
@return slice()-Objekt mit Start und Stop Position dieser IOs @return <class 'slice'> mit Start und Stop Position dieser IOs
""" """
if len(dict_io) <= 0: if len(dict_io) <= 0:
@@ -281,7 +281,7 @@ class Device(object):
def get_allios(self): def get_allios(self):
"""Gibt eine Liste aller Inputs und Outputs zurueck, keine MEMs. """Gibt eine Liste aller Inputs und Outputs zurueck, keine MEMs.
@return list() Input und Output, keine MEMs""" @return <class 'list'> Input und Output, keine MEMs"""
lst_return = [] lst_return = []
for lst_io in self._modio.io[ for lst_io in self._modio.io[
self._slc_inpoff.start:self._slc_outoff.stop]: self._slc_inpoff.start:self._slc_outoff.stop]:
@@ -290,7 +290,7 @@ class Device(object):
def get_inputs(self): def get_inputs(self):
"""Gibt eine Liste aller Inputs zurueck. """Gibt eine Liste aller Inputs zurueck.
@return list() Inputs""" @return <class 'list'> Inputs"""
lst_return = [] lst_return = []
for lst_io in self._modio.io[self._slc_inpoff]: for lst_io in self._modio.io[self._slc_inpoff]:
lst_return += lst_io lst_return += lst_io
@@ -298,7 +298,7 @@ class Device(object):
def get_outputs(self): def get_outputs(self):
"""Gibt eine Liste aller Outputs zurueck. """Gibt eine Liste aller Outputs zurueck.
@return list() Outputs""" @return <class 'list'> Outputs"""
lst_return = [] lst_return = []
for lst_io in self._modio.io[self._slc_outoff]: for lst_io in self._modio.io[self._slc_outoff]:
lst_return += lst_io lst_return += lst_io
@@ -306,7 +306,7 @@ class Device(object):
def get_memmories(self): def get_memmories(self):
"""Gibt eine Liste aller mems zurueck. """Gibt eine Liste aller mems zurueck.
@return list() Mems""" @return <class 'list'> Mems"""
lst_return = [] lst_return = []
for lst_io in self._modio.io[self._slc_memoff]: for lst_io in self._modio.io[self._slc_memoff]:
lst_return += lst_io lst_return += lst_io
@@ -376,6 +376,19 @@ class Core(Device):
self._ioerrorlimit1 = 6 self._ioerrorlimit1 = 6
self._ioerrorlimit2 = 7 self._ioerrorlimit2 = 7
if not self._modio._monitoring:
# Für RS485 errors defaults laden sollte procimg NULL sein
if self._ioerrorlimit1 is not None:
self.__lst_io[self._ioerrorlimit1].set_value(
self.__lst_io[self._ioerrorlimit1].defaultvalue
)
if self._ioerrorlimit2 is not None:
self.__lst_io[self._ioerrorlimit2].set_value(
self.__lst_io[self._ioerrorlimit2].defaultvalue
)
# RS485 errors schreiben
self._modio.writeprocimg(self)
def __errorlimit(self, io_id, errorlimit): def __errorlimit(self, io_id, errorlimit):
"""Verwaltet das Lesen und Schreiben der ErrorLimits. """Verwaltet das Lesen und Schreiben der ErrorLimits.
@param io_id Index des IOs fuer ErrorLimit @param io_id Index des IOs fuer ErrorLimit
@@ -392,12 +405,12 @@ class Core(Device):
)) ))
else: else:
raise ValueError( raise ValueError(
"errorlimit value int() must be between 0 and 65535" "errorlimit value must be between 0 and 65535"
) )
def _get_status(self): def _get_status(self):
"""Gibt den RevPi Core Status zurueck. """Gibt den RevPi Core Status zurueck.
@return Status als int()""" @return Status als <class 'int'>"""
return int.from_bytes( return int.from_bytes(
self.__lst_io[0].get_value(), byteorder=self.__lst_io[0]._byteorder self.__lst_io[0].get_value(), byteorder=self.__lst_io[0]._byteorder
) )
@@ -433,7 +446,7 @@ class Core(Device):
length=1, byteorder=self.__lst_io[self._ioled]._byteorder length=1, byteorder=self.__lst_io[self._ioled]._byteorder
)) ))
else: else:
raise ValueError("led status int() must be between 0 and 3") raise ValueError("led status must be between 0 and 3")
def _set_leda2(self, value): def _set_leda2(self, value):
"""Setzt den Zustand der LED A2 vom core. """Setzt den Zustand der LED A2 vom core.
@@ -444,7 +457,7 @@ class Core(Device):
length=1, byteorder=self.__lst_io[self._ioled]._byteorder length=1, byteorder=self.__lst_io[self._ioled]._byteorder
)) ))
else: else:
raise ValueError("led status int() must be between 0 and 3") raise ValueError("led status must be between 0 and 3")
A1 = property(_get_leda1, _set_leda1) A1 = property(_get_leda1, _set_leda1)
A2 = property(_get_leda2, _set_leda2) A2 = property(_get_leda2, _set_leda2)
@@ -591,7 +604,7 @@ class Gateway(Device):
def get_rawbytes(self): def get_rawbytes(self):
"""Gibt die Bytes aus, die dieses Device verwendet. """Gibt die Bytes aus, die dieses Device verwendet.
@return bytes() des Devices""" @return <class 'bytes'> des Devices"""
return bytes(self._ba_devdata) return bytes(self._ba_devdata)
@@ -629,7 +642,7 @@ class Virtual(Gateway):
self._filelock.acquire() self._filelock.acquire()
for io in self.get_inputs(): for io in self.get_inputs():
self._ba_devdata[io._slc_address] = io.defaultvalue self._ba_devdata[io._slc_address] = io._defaultvalue
# Outpus auf Bus schreiben # Outpus auf Bus schreiben
try: try:

View File

@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
# #
# python3-RevPiModIO # python3-RevPiModIO
# #
# Webpage: https://revpimodio.org/ # Webpage: https://revpimodio.org/
# (c) Sven Sager, License: LGPLv3 # (c) Sven Sager, License: LGPLv3
# #
# -*- coding: utf-8 -*-
"""RevPiModIO Helperklassen und Tools.""" """RevPiModIO Helperklassen und Tools."""
import warnings import warnings
from threading import Event, Lock, Thread from threading import Event, Lock, Thread
@@ -263,7 +263,7 @@ class ProcimgWriter(Thread):
def get_refresh(self): def get_refresh(self):
"""Gibt Zykluszeit zurueck. """Gibt Zykluszeit zurueck.
@return int() Zykluszeit in Millisekunden""" @return <class 'int'> Zykluszeit in Millisekunden"""
return int(self._refresh * 1000) return int(self._refresh * 1000)
def run(self): def run(self):
@@ -362,7 +362,7 @@ class ProcimgWriter(Thread):
def set_refresh(self, value): def set_refresh(self, value):
"""Setzt die Zykluszeit in Millisekunden. """Setzt die Zykluszeit in Millisekunden.
@param value int() Millisekunden""" @param value <class 'int'> Millisekunden"""
if type(value) == int and 10 <= value <= 2000: if type(value) == int and 10 <= value <= 2000:
waitdiff = self._refresh - self._adjwait waitdiff = self._refresh - self._adjwait
self._refresh = value / 1000 self._refresh = value / 1000

View File

@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
# #
# python3-RevPiModIO # python3-RevPiModIO
# #
# Webpage: https://revpimodio.org/ # Webpage: https://revpimodio.org/
# (c) Sven Sager, License: LGPLv3 # (c) Sven Sager, License: LGPLv3
# #
# -*- coding: utf-8 -*-
"""RevPiModIO Modul fuer die Verwaltung der IOs.""" """RevPiModIO Modul fuer die Verwaltung der IOs."""
import struct import struct
from threading import Event from threading import Event
@@ -31,7 +31,7 @@ class IOList(object):
def __contains__(self, key): def __contains__(self, key):
"""Prueft ob IO existiert. """Prueft ob IO existiert.
@param key IO-Name str() oder Byte int() @param key IO-Name <class 'str'> oder Byte <class 'int'>
@return True, wenn IO vorhanden / Byte belegt""" @return True, wenn IO vorhanden / Byte belegt"""
if type(key) == int: if type(key) == int:
return key in self.__dict_iobyte \ return key in self.__dict_iobyte \
@@ -87,7 +87,9 @@ class IOList(object):
elif type(key) == slice: elif type(key) == slice:
return [ return [
self.__dict_iobyte[int_io] self.__dict_iobyte[int_io]
for int_io in range(key.start, key.stop) for int_io in range(
key.start, key.stop, 1 if key.step is None else key.step
)
] ]
else: else:
return getattr(self, key) return getattr(self, key)
@@ -139,7 +141,7 @@ class IOList(object):
) )
) )
else: else:
# Bereits überschriebene bytes() sind ungültig # Bereits überschriebene bytes sind ungültig
raise MemoryError( raise MemoryError(
"new io '{}' overlaps memory of '{}'".format( "new io '{}' overlaps memory of '{}'".format(
io._name, oldio._name io._name, oldio._name
@@ -189,7 +191,7 @@ class DeadIO(object):
"""Klasse, mit der ersetzte IOs verwaltet werden.""" """Klasse, mit der ersetzte IOs verwaltet werden."""
def __init__(self, deadio): def __init__(self, deadio):
"""Instantiierung der DeadIO()-Klasse. """Instantiierung der DeadIO-Klasse.
@param deadio IO, der ersetzt wurde""" @param deadio IO, der ersetzt wurde"""
self.__deadio = deadio self.__deadio = deadio
@@ -204,22 +206,23 @@ class IOBase(object):
"""Basisklasse fuer alle IO-Objekte. """Basisklasse fuer alle IO-Objekte.
Die Basisfunktionalitaet ermoeglicht das Lesen und Schreiben der Werte Die Basisfunktionalitaet ermoeglicht das Lesen und Schreiben der Werte
als bytes() oder bool(). Dies entscheidet sich bei der Instantiierung. als <class bytes'> oder <class 'bool'>. Dies entscheidet sich bei der
Wenn eine Bittadresse angegeben wird, werden bool()-Werte erwartet Instantiierung.
und zurueckgegeben, ansonsten bytes(). Wenn eine Bittadresse angegeben wird, werden <class 'bool'>-Werte erwartet
und zurueckgegeben, ansonsten <class bytes'>.
Diese Klasse dient als Basis fuer andere IO-Klassen mit denen die Werte Diese Klasse dient als Basis fuer andere IO-Klassen mit denen die Werte
auch als int() verwendet werden koennen. auch als <class 'int'> verwendet werden koennen.
""" """
def __init__(self, parentdevice, valuelist, iotype, byteorder, signed): def __init__(self, parentdevice, valuelist, iotype, byteorder, signed):
"""Instantiierung der IOBase()-Klasse. """Instantiierung der IOBase-Klasse.
@param parentdevice Parentdevice auf dem der IO liegt @param parentdevice Parentdevice auf dem der IO liegt
@param valuelist Datenliste fuer Instantiierung @param valuelist Datenliste fuer Instantiierung
@param iotype io.Type() Wert @param iotype <class 'Type'> Wert
@param byteorder Byteorder 'little' / 'big' fuer int() Berechnung @param byteorder Byteorder 'little'/'big' fuer <class 'int'> Berechnung
@param sigend Intberechnung mit Vorzeichen durchfuehren @param sigend Intberechnung mit Vorzeichen durchfuehren
""" """
@@ -244,8 +247,8 @@ class IOBase(object):
int_startaddress, int_startaddress + self._length int_startaddress, int_startaddress + self._length
) )
# Defaultvalue aus Zahl in Bytes umrechnen # Defaultvalue aus Zahl in Bytes umrechnen
if str(valuelist[1]).isnumeric(): if str(valuelist[1]).isdigit():
self.defaultvalue = int(valuelist[1]).to_bytes( self._defaultvalue = int(valuelist[1]).to_bytes(
self._length, byteorder=self._byteorder self._length, byteorder=self._byteorder
) )
else: else:
@@ -254,12 +257,13 @@ class IOBase(object):
if len(valuelist[1]) != self._length: if len(valuelist[1]) != self._length:
raise ValueError( raise ValueError(
"given bytes for default value must have a length " "given bytes for default value must have a length "
"of {}".format(self._length) "of {} but {} was given"
"".format(self._length, len(valuelist[1]))
) )
else: else:
self.defaultvalue = valuelist[1] self._defaultvalue = valuelist[1]
else: else:
self.defaultvalue = bytes(self._length) self._defaultvalue = bytes(self._length)
else: else:
# Höhere Bits als 7 auf nächste Bytes umbrechen # Höhere Bits als 7 auf nächste Bytes umbrechen
@@ -267,11 +271,11 @@ class IOBase(object):
self._slc_address = slice( self._slc_address = slice(
int_startaddress, int_startaddress + 1 int_startaddress, int_startaddress + 1
) )
self.defaultvalue = bool(int(valuelist[1])) self._defaultvalue = bool(int(valuelist[1]))
def __bool__(self): def __bool__(self):
"""bool()-wert der Klasse. """<class 'bool'>-Wert der Klasse.
@return IO-Wert als bool(). Nur False wenn False oder 0 sonst True""" @return <class 'bool'> Nur False wenn False oder 0 sonst True"""
if self._bitaddress >= 0: if self._bitaddress >= 0:
int_byte = int.from_bytes( int_byte = int.from_bytes(
self._parentdevice._ba_devdata[self._slc_address], self._parentdevice._ba_devdata[self._slc_address],
@@ -282,7 +286,7 @@ class IOBase(object):
return bool(self._parentdevice._ba_devdata[self._slc_address]) return bool(self._parentdevice._ba_devdata[self._slc_address])
def __str__(self): def __str__(self):
"""str()-wert der Klasse. """<class 'str'>-Wert der Klasse.
@return Namen des IOs""" @return Namen des IOs"""
return self._name return self._name
@@ -293,12 +297,12 @@ class IOBase(object):
def _get_byteorder(self): def _get_byteorder(self):
"""Gibt konfigurierte Byteorder zurueck. """Gibt konfigurierte Byteorder zurueck.
@return str() Byteorder""" @return <class 'str'> Byteorder"""
return self._byteorder return self._byteorder
def _get_iotype(self): def _get_iotype(self):
"""Gibt io.Type zurueck. """Gibt io.Type zurueck.
@return int() io.Type""" @return <class 'int'> io.Type"""
return self._iotype return self._iotype
def _get_length(self): def _get_length(self):
@@ -311,9 +315,14 @@ class IOBase(object):
@return IO Name""" @return IO Name"""
return self._name return self._name
def get_defaultvalue(self):
"""Gibt die Defaultvalue von piCtory zurueck.
@return Defaultvalue als <class 'byte'> oder <class 'bool'>"""
return self._defaultvalue
def get_value(self): def get_value(self):
"""Gibt den Wert des IOs als bytes() oder bool() zurueck. """Gibt den Wert des IOs zurueck.
@return IO-Wert""" @return IO-Wert als <class 'bytes'> oder <class 'bool'>"""
if self._bitaddress >= 0: if self._bitaddress >= 0:
int_byte = int.from_bytes( int_byte = int.from_bytes(
self._parentdevice._ba_devdata[self._slc_address], self._parentdevice._ba_devdata[self._slc_address],
@@ -376,10 +385,10 @@ class IOBase(object):
"""Ersetzt bestehenden IO mit Neuem. """Ersetzt bestehenden IO mit Neuem.
@param name Name des neuen Inputs @param name Name des neuen Inputs
@param frm struct() formatierung (1 Zeichen) @param frm struct formatierung (1 Zeichen)
@param kwargs Weitere Parameter: @param kwargs Weitere Parameter:
- bmk: Bezeichnung fuer Input - bmk: Bezeichnung fuer Input
- bit: Registriert Input als bool() am angegebenen Bit im Byte - bit: Registriert IO als <class 'bool'> am angegebenen Bit im Byte
- byteorder: Byteorder fuer den Input, Standardwert=little - byteorder: Byteorder fuer den Input, Standardwert=little
- defaultvalue: Standardwert fuer Input, Standard ist 0 - defaultvalue: Standardwert fuer Input, Standard ist 0
- event: Funktion fuer Eventhandling registrieren - event: Funktion fuer Eventhandling registrieren
@@ -387,7 +396,7 @@ class IOBase(object):
- edge: event-Ausfuehren bei RISING, FALLING or BOTH Wertaenderung - edge: event-Ausfuehren bei RISING, FALLING or BOTH Wertaenderung
@see <a target="_blank" @see <a target="_blank"
href="https://docs.python.org/3/library/struct.html#format-characters" href="https://docs.python.org/3/library/struct.html#format-characters"
>Python3 struct()</a> >Python3 struct</a>
""" """
if not issubclass(type(self._parentdevice), Gateway): if not issubclass(type(self._parentdevice), Gateway):
@@ -396,13 +405,15 @@ class IOBase(object):
"devices only" "devices only"
) )
# StructIO erzeugen und in IO-Liste einfügen # StructIO erzeugen
io_new = StructIO( io_new = StructIO(
self, self,
name, name,
frm, frm,
**kwargs **kwargs
) )
# StructIO in IO-Liste einfügen
self._parentdevice._modio.io._private_register_new_io_object(io_new) self._parentdevice._modio.io._private_register_new_io_object(io_new)
# Optional Event eintragen # Optional Event eintragen
@@ -415,8 +426,8 @@ class IOBase(object):
) )
def set_value(self, value): def set_value(self, value):
"""Setzt den Wert des IOs mit bytes() oder bool(). """Setzt den Wert des IOs.
@param value IO-Wert als bytes() oder bool()""" @param value IO-Wert als <class bytes'> oder <class 'bool'>"""
if self._iotype == Type.OUT: if self._iotype == Type.OUT:
if self._bitaddress >= 0: if self._bitaddress >= 0:
# Versuchen egal welchen Typ in Bool zu konvertieren # Versuchen egal welchen Typ in Bool zu konvertieren
@@ -506,15 +517,15 @@ class IOBase(object):
Bei Wertaenderung, wird das Warten mit 0 als Rueckgabewert beendet. Bei Wertaenderung, wird das Warten mit 0 als Rueckgabewert beendet.
HINWEIS: Wenn ProcimgWriter() keine neuen Daten liefert, wird HINWEIS: Wenn <class 'ProcimgWriter'> keine neuen Daten liefert, wird
bis in die Ewigkeit gewartet (nicht bei Angabe von "timeout"). bis in die Ewigkeit gewartet (nicht bei Angabe von "timeout").
Wenn edge mit RISING oder FALLING angegeben wird muss diese Flanke Wenn edge mit RISING oder FALLING angegeben wird muss diese Flanke
ausgeloest werden. Sollte der Wert 1 sein beim Eintritt mit Flanke ausgeloest werden. Sollte der Wert 1 sein beim Eintritt mit Flanke
RISING, wird das Warten erst bei Aenderung von 0 auf 1 beendet. RISING, wird das Warten erst bei Aenderung von 0 auf 1 beendet.
Als exitevent kann ein threading.Event()-Objekt uebergeben werden, Als exitevent kann ein <class 'threading.Event'>-Objekt uebergeben
welches das Warten bei is_set() sofort mit 1 als Rueckgabewert werden, welches das Warten bei is_set() sofort mit 1 als Rueckgabewert
beendet. beendet.
Wenn der Wert okvalue an dem IO fuer das Warten anliegt, wird Wenn der Wert okvalue an dem IO fuer das Warten anliegt, wird
@@ -526,10 +537,10 @@ class IOBase(object):
angegeben Millisekunden! Es wird immer nach oben gerundet!) angegeben Millisekunden! Es wird immer nach oben gerundet!)
@param edge Flanke RISING, FALLING, BOTH bei der mit True beendet wird @param edge Flanke RISING, FALLING, BOTH bei der mit True beendet wird
@param exitevent thrading.Event() fuer vorzeitiges Beenden mit False @param exitevent <class 'thrading.Event'> fuer vorzeitiges Beenden
@param okvalue IO-Wert, bei dem das Warten sofort mit True beendet wird @param okvalue IO-Wert, bei dem das Warten sofort mit True beendet wird
@param timeout Zeit in ms nach der mit False abgebrochen wird @param timeout Zeit in ms nach der mit False abgebrochen wird
@return int() erfolgreich Werte <= 0 @return <class 'int'> erfolgreich Werte <= 0
- Erfolgreich gewartet - Erfolgreich gewartet
Wert 0: IO hat den Wert gewechselt Wert 0: IO hat den Wert gewechselt
Wert -1: okvalue stimmte mit IO ueberein Wert -1: okvalue stimmte mit IO ueberein
@@ -600,6 +611,7 @@ class IOBase(object):
address = property(_get_address) address = property(_get_address)
byteorder = property(_get_byteorder) byteorder = property(_get_byteorder)
defaultvalue = property(get_defaultvalue)
length = property(_get_length) length = property(_get_length)
name = property(_get_name) name = property(_get_name)
type = property(_get_iotype) type = property(_get_iotype)
@@ -608,19 +620,19 @@ class IOBase(object):
class IntIO(IOBase): class IntIO(IOBase):
"""Klasse fuer den Zugriff auf die Daten mit Konvertierung in int(). """Klasse fuer den Zugriff auf die Daten mit Konvertierung in int.
Diese Klasse erweitert die Funktion von IOBase() um Funktionen, Diese Klasse erweitert die Funktion von <class 'IOBase'> um Funktionen,
ueber die mit int() Werten gearbeitet werden kann. Fuer die Umwandlung ueber die mit <class 'int'> Werten gearbeitet werden kann. Fuer die
koennen 'Byteorder' (Default 'little') und 'signed' (Default False) als Umwandlung koennen 'Byteorder' (Default 'little') und 'signed' (Default
Parameter gesetzt werden. False) als Parameter gesetzt werden.
@see #IOBase IOBase @see #IOBase IOBase
""" """
def __int__(self): def __int__(self):
"""Gibt IO als int() Wert zurueck mit Beachtung byteorder/signed. """Gibt IO-Wert zurueck mit Beachtung byteorder/signed.
@return int() ohne Vorzeichen""" @return IO-Wert als <class 'int'>"""
return int.from_bytes( return int.from_bytes(
self._parentdevice._ba_devdata[self._slc_address], self._parentdevice._ba_devdata[self._slc_address],
byteorder=self._byteorder, byteorder=self._byteorder,
@@ -633,11 +645,12 @@ class IntIO(IOBase):
return self._signed return self._signed
def _set_byteorder(self, value): def _set_byteorder(self, value):
"""Setzt Byteorder fuer int() Umwandlung. """Setzt Byteorder fuer <class 'int'> Umwandlung.
@param value str() 'little' or 'big'""" @param value <class 'str'> 'little' or 'big'"""
if not (value == "little" or value == "big"): if not (value == "little" or value == "big"):
raise ValueError("byteorder must be 'little' or 'big'") raise ValueError("byteorder must be 'little' or 'big'")
self._byteorder = value self._byteorder = value
self._defaultvalue = self._defaultvalue[::-1]
def _set_signed(self, value): def _set_signed(self, value):
"""Left fest, ob der Wert Vorzeichenbehaftet behandelt werden soll. """Left fest, ob der Wert Vorzeichenbehaftet behandelt werden soll.
@@ -646,9 +659,16 @@ class IntIO(IOBase):
raise ValueError("signed must be <class 'bool'> True or False") raise ValueError("signed must be <class 'bool'> True or False")
self._signed = value self._signed = value
def get_intdefaultvalue(self):
"""Gibt die Defaultvalue als <class 'int'> zurueck.
@return <class 'int'> Defaultvalue"""
return int.from_bytes(
self._defaultvalue, byteorder=self._byteorder, signed=self._signed
)
def get_int(self): def get_int(self):
"""Gibt IO als int() Wert zurueck mit Beachtung byteorder/signed. """Gibt IO-Wert zurueck mit Beachtung byteorder/signed.
@return int() Wert""" @return IO-Wert als <class 'int'>"""
return int.from_bytes( return int.from_bytes(
self._parentdevice._ba_devdata[self._slc_address], self._parentdevice._ba_devdata[self._slc_address],
byteorder=self._byteorder, byteorder=self._byteorder,
@@ -657,7 +677,7 @@ class IntIO(IOBase):
def set_int(self, value): def set_int(self, value):
"""Setzt IO mit Beachtung byteorder/signed. """Setzt IO mit Beachtung byteorder/signed.
@param value int()""" @param value <class 'int'> Wert"""
if type(value) == int: if type(value) == int:
self.set_value(value.to_bytes( self.set_value(value.to_bytes(
self._length, self._length,
@@ -671,16 +691,16 @@ class IntIO(IOBase):
) )
byteorder = property(IOBase._get_byteorder, _set_byteorder) byteorder = property(IOBase._get_byteorder, _set_byteorder)
defaultvalue = property(get_intdefaultvalue)
signed = property(_get_signed, _set_signed) signed = property(_get_signed, _set_signed)
value = property(get_int, set_int) value = property(get_int, set_int)
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.
Diese Klasse ueberschreibt get_value() und set_value() der IOBase() Sie stellt ueber struct die Werte in der gewuenschten Formatierung
Klasse. Sie stellt ueber struct die Werte in der gewuenschten Formatierung
bereit. Der struct-Formatwert wird bei der Instantiierung festgelegt. bereit. Der struct-Formatwert wird bei der Instantiierung festgelegt.
@see #IOBase IOBase @see #IOBase IOBase
@@ -691,10 +711,10 @@ 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)
@param kwargs Weitere Parameter: @param kwargs Weitere Parameter:
- bmk: Bezeichnung fuer Output - bmk: Bezeichnung fuer Output
- bit: Registriert Outputs als bool() am angegebenen Bit im Byte - bit: Registriert IO als <class 'bool'> am angegebenen Bit im Byte
- byteorder: Byteorder fuer den Input, Standardwert=little - byteorder: Byteorder fuer den Input, Standardwert=little
- defaultvalue: Standardwert fuer Output, Standard ist 0 - defaultvalue: Standardwert fuer Output, Standard ist 0
@@ -709,7 +729,7 @@ class StructIO(IOBase):
bitaddress = "" if frm != "?" else str(kwargs.get("bit", 0)) bitaddress = "" if frm != "?" else str(kwargs.get("bit", 0))
if bitaddress == "" or (0 <= int(bitaddress) < 8): if bitaddress == "" or (0 <= int(bitaddress) < 8):
bitlength = "1" if bitaddress.isnumeric() else \ bitlength = "1" if bitaddress.isdigit() else \
struct.calcsize(bofrm + frm) * 8 struct.calcsize(bofrm + frm) * 8
# [name,default,anzbits,adressbyte,export,adressid,bmk,bitaddress] # [name,default,anzbits,adressbyte,export,adressid,bmk,bitaddress]
@@ -752,8 +772,8 @@ 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 return self.__frm
def _get_signed(self): def _get_signed(self):
@@ -761,6 +781,14 @@ class StructIO(IOBase):
@return True, wenn Vorzeichenbehaftet""" @return True, wenn Vorzeichenbehaftet"""
return self._signed return self._signed
def get_structdefaultvalue(self):
"""Gibt die Defaultvalue mit struct Formatierung zurueck.
@return Defaultvalue vom Typ der struct-Formatierung"""
if self._bitaddress >= 0:
return self._defaultvalue
else:
return struct.unpack(self.__frm, self._defaultvalue)[0]
def get_structvalue(self): def get_structvalue(self):
"""Gibt den Wert mit struct Formatierung zurueck. """Gibt den Wert mit struct Formatierung zurueck.
@return Wert vom Typ der struct-Formatierung""" @return Wert vom Typ der struct-Formatierung"""
@@ -777,6 +805,7 @@ class StructIO(IOBase):
else: else:
self.set_value(struct.pack(self.__frm, value)) self.set_value(struct.pack(self.__frm, value))
defaultvalue = property(get_structdefaultvalue)
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)

View File

@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
# #
# python3-RevPiModIO # python3-RevPiModIO
# #
# Webpage: https://revpimodio.org/ # Webpage: https://revpimodio.org/
# (c) Sven Sager, License: LGPLv3 # (c) Sven Sager, License: LGPLv3
# #
# -*- coding: utf-8 -*-
"""RevPiModIO Hauptklasse.""" """RevPiModIO Hauptklasse."""
import warnings import warnings
from json import load as jload from json import load as jload
@@ -33,24 +33,25 @@ class RevPiModIO(object):
""" """
def __init__(self, **kwargs): def __init__(
self, autorefresh=False, monitoring=False, syncoutputs=True,
procimg=None, configrsc=None, simulator=False):
"""Instantiiert die Grundfunktionen. """Instantiiert die Grundfunktionen.
@param kwargs Weitere Parameter: @param autorefresh Wenn True, alle Devices zu autorefresh hinzufuegen
- autorefresh: Wenn True, alle Devices zu autorefresh hinzufuegen @param monitoring In- und Outputs werden gelesen, niemals geschrieben
- configrsc: Pfad zur piCtory Konfigurationsdatei @param syncoutputs Aktuell gesetzte Outputs vom Prozessabbild einlesen
- procimg: Pfad zum Prozessabbild @param procimg Abweichender Pfad zum Prozessabbild
- monitoring: In- und Outputs werden gelesen, niemals geschrieben @param configrsc Abweichender Pfad zur piCtory Konfigurationsdatei
- simulator: Laed das Modul als Simulator und vertauscht IOs @param simulator Laed das Modul als Simulator und vertauscht IOs
- syncoutputs: Aktuell gesetzte Outputs vom Prozessabbild einlesen
""" """
self._autorefresh = kwargs.get("autorefresh", False) self._autorefresh = autorefresh
self._configrsc = kwargs.get("configrsc", None) self._configrsc = configrsc
self._monitoring = kwargs.get("monitoring", False) self._monitoring = monitoring
self._procimg = kwargs.get("procimg", "/dev/piControl0") self._procimg = "/dev/piControl0" if procimg is None else procimg
self._simulator = kwargs.get("simulator", False) self._simulator = simulator
self._syncoutputs = kwargs.get("syncoutputs", True) self._syncoutputs = syncoutputs
# TODO: bei simulator und procimg prüfen ob datei existiert / anlegen? # TODO: bei simulator und procimg prüfen ob datei existiert / anlegen?
@@ -123,7 +124,7 @@ class RevPiModIO(object):
if _searchtype is None or dev["type"] == _searchtype: if _searchtype is None or dev["type"] == _searchtype:
if dev["name"] in self._lst_devselect: if dev["name"] in self._lst_devselect:
lst_found.append(dev) lst_found.append(dev)
elif dev["position"].isnumeric() \ elif dev["position"].isdigit() \
and int(dev["position"]) in self._lst_devselect: and int(dev["position"]) in self._lst_devselect:
lst_found.append(dev) lst_found.append(dev)
@@ -151,14 +152,6 @@ class RevPiModIO(object):
self, device, simulator=self._simulator self, device, simulator=self._simulator
) )
self.core = dev_new self.core = dev_new
# Für RS485 errors defaults laden und schreiben
# NOTE: Soll das wirklich gemacht werden?
for io in dev_new.get_outputs():
io.set_value(io.defaultvalue)
if not self._monitoring:
self.writeprocimg(dev_new)
elif device["type"] == "LEFT_RIGHT": elif device["type"] == "LEFT_RIGHT":
# IOs # IOs
dev_new = devicemodule.Device( dev_new = devicemodule.Device(
@@ -287,7 +280,7 @@ class RevPiModIO(object):
def _set_cycletime(self, milliseconds): def _set_cycletime(self, milliseconds):
"""Setzt Aktualisierungsrate der Prozessabbild-Synchronisierung. """Setzt Aktualisierungsrate der Prozessabbild-Synchronisierung.
@param milliseconds int() in Millisekunden""" @param milliseconds <class 'int'> in Millisekunden"""
self._imgwriter.refresh = milliseconds self._imgwriter.refresh = milliseconds
def _set_maxioerrors(self, value): def _set_maxioerrors(self, value):
@@ -413,8 +406,8 @@ class RevPiModIO(object):
self._looprunning = False self._looprunning = False
def get_jconfigrsc(self): def get_jconfigrsc(self):
"""Laed die piCotry Konfiguration und erstellt ein dict(). """Laed die piCotry Konfiguration und erstellt ein <class 'dict'>.
@return dict() der piCtory Konfiguration""" @return <class 'dict'> der piCtory Konfiguration"""
# piCtory Konfiguration prüfen # piCtory Konfiguration prüfen
if self._configrsc is not None: if self._configrsc is not None:
if not access(self._configrsc, F_OK | R_OK): if not access(self._configrsc, F_OK | R_OK):
@@ -681,7 +674,7 @@ class RevPiModIO(object):
for dev in mylist: for dev in mylist:
for io in dev.get_outputs(): for io in dev.get_outputs():
io.set_value(io.defaultvalue) io.set_value(io._defaultvalue)
def syncoutputs(self, device=None): def syncoutputs(self, device=None):
"""Lesen aller aktuell gesetzten Outputs im Prozessabbild. """Lesen aller aktuell gesetzten Outputs im Prozessabbild.
@@ -794,7 +787,9 @@ class RevPiModIOSelected(RevPiModIO):
""" """
def __init__(self, deviceselection, **kwargs): def __init__(
self, deviceselection, autorefresh=False, monitoring=False,
syncoutputs=True, procimg=None, configrsc=None, simulator=False):
"""Instantiiert nur fuer angegebene Devices die Grundfunktionen. """Instantiiert nur fuer angegebene Devices die Grundfunktionen.
Der Parameter deviceselection kann eine einzelne Der Parameter deviceselection kann eine einzelne
@@ -802,11 +797,12 @@ class RevPiModIOSelected(RevPiModIO):
mehreren Positionen / Namen mehreren Positionen / Namen
@param deviceselection Positionsnummer oder Devicename @param deviceselection Positionsnummer oder Devicename
@param kwargs Weitere Parameter
@see #RevPiModIO.__init__ RevPiModIO.__init__(...) @see #RevPiModIO.__init__ RevPiModIO.__init__(...)
""" """
super().__init__(**kwargs) super().__init__(
autorefresh, monitoring, syncoutputs, procimg, configrsc, simulator
)
# Device liste erstellen # Device liste erstellen
if type(deviceselection) == list: if type(deviceselection) == list:
@@ -818,7 +814,8 @@ class RevPiModIOSelected(RevPiModIO):
for vdev in self._lst_devselect: for vdev in self._lst_devselect:
if type(vdev) != int and type(vdev) != str: if type(vdev) != int and type(vdev) != str:
raise ValueError( raise ValueError(
"need device position as int() or device name as str()" "need device position as <class 'int'> or device name as "
"<class 'str'>"
) )
self._configure() self._configure()
@@ -854,14 +851,19 @@ class RevPiModIODriver(RevPiModIOSelected):
""" """
def __init__(self, vdev, **kwargs): def __init__(
self, virtdev, autorefresh=False, monitoring=False,
syncoutputs=True, procimg=None, configrsc=None):
"""Instantiiert die Grundfunktionen. """Instantiiert die Grundfunktionen.
@param vdev Virtuelles Device fuer die Verwendung / oder list() Parameter 'monitoring' und 'simulator' stehen hier nicht zur
@param kwargs Weitere Parameter (nicht monitoring und simulator) Verfuegung, da diese automatisch gesetzt werden.
@param virtdev Virtuelles Device oder mehrere als <class 'list'>
@see #RevPiModIO.__init__ RevPiModIO.__init__(...) @see #RevPiModIO.__init__ RevPiModIO.__init__(...)
""" """
kwargs["monitoring"] = False # Parent mit monitoring=False und simulator=True laden
kwargs["simulator"] = True super().__init__(
super().__init__(vdev, **kwargs) virtdev, autorefresh, False, syncoutputs, procimg, configrsc, True
)

View File

@@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
# #
# python3-RevPiModIO # python3-RevPiModIO
# #
# Webpage: https://revpimodio.org/ # Webpage: https://revpimodio.org/
# (c) Sven Sager, License: LGPLv3 # (c) Sven Sager, License: LGPLv3
# #
# -*- coding: utf-8 -*-
"""Bildet die Summary-Sektion von piCtory ab.""" """Bildet die Summary-Sektion von piCtory ab."""

View File

@@ -1,8 +1,8 @@
#! /usr/bin/env python3 #! /usr/bin/env python3
# -*- coding: utf-8 -*-
# #
# (c) Sven Sager, License: LGPLv3 # (c) Sven Sager, License: LGPLv3
# #
# -*- coding: utf-8 -*-
"""Setupscript fuer python3-revpimodio.""" """Setupscript fuer python3-revpimodio."""
from distutils.core import setup from distutils.core import setup
@@ -16,7 +16,7 @@ setup(
license="LGPLv3", license="LGPLv3",
name="revpimodio2", name="revpimodio2",
version="2.0.0", version="2.0.1",
packages=["revpimodio2"], packages=["revpimodio2"],