From 4e9abf794bc8266d095a90c0a8eaa227392a0b64 Mon Sep 17 00:00:00 2001 From: NaruX Date: Sat, 26 Aug 2017 15:12:55 +0200 Subject: [PATCH] =?UTF-8?q?Encodingzeile=20an=20PEP=20angepasst=20(muss=20?= =?UTF-8?q?in=20Zeile=200=20-=201=20sein)=20Von=20RevPiModIO=20kwagrs=20en?= =?UTF-8?q?tfernt=20und=20feste=20keyword=20vergeben=20Bei=20=C3=84nderung?= =?UTF-8?q?=20der=20Byteorder=20wird=20defaultvalue=20angepasst=20da=20aus?= =?UTF-8?q?=20piCtory=20little=20Beim=20Core=20nur=20die=20RS485=20Fehlerw?= =?UTF-8?q?erte=20=C3=BCbernehmen=20defaultvalue=20wird=20mit=20Formatieru?= =?UTF-8?q?ng=20ausgegeben=20.isnumeric=20gegen=20isdigit=20getauscht=20do?= =?UTF-8?q?cstrings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/revpimodio2.device.html | 44 +++++----- doc/revpimodio2.helper.html | 4 +- doc/revpimodio2.io.html | 162 +++++++++++++++++++++++------------- doc/revpimodio2.modio.html | 52 +++++++----- eric-revpimodio2.api | 12 ++- revpimodio2.e4p | 9 +- revpimodio2/__init__.py | 4 +- revpimodio2/app.py | 2 +- revpimodio2/device.py | 63 ++++++++------ revpimodio2/helper.py | 6 +- revpimodio2/io.py | 141 ++++++++++++++++++------------- revpimodio2/modio.py | 78 ++++++++--------- revpimodio2/summary.py | 2 +- setup.py | 4 +- 14 files changed, 342 insertions(+), 241 deletions(-) diff --git a/doc/revpimodio2.device.html b/doc/revpimodio2.device.html index 2b7ada8..3c2bb08 100644 --- a/doc/revpimodio2.device.html +++ b/doc/revpimodio2.device.html @@ -182,7 +182,7 @@ Gibt den RevPi Core Status zurueck.

Returns:
-Status als int() +Status als

@@ -370,10 +370,10 @@ Methods

- + - + @@ -434,14 +434,14 @@ Static Methods Device (Constructor)Device(parentmodio, dict_device, simulator=False)

-Instantiierung der Device()-Klasse. +Instantiierung der Device-Klasse.

parent
RevpiModIO parent object
dict_device
-dict() fuer dieses Device aus piCotry Konfiguration + fuer dieses Device aus piCotry
simulator:
Laed das Modul als Simulator und vertauscht IOs @@ -451,11 +451,11 @@ Laed das Modul als Simulator und vertauscht IOs Device.__bytes__ __bytes__()

-Gibt alle Daten des Devices als bytes() zurueck. +Gibt alle Daten des Devices als zurueck.

Returns:
-Devicedaten als bytes() +Devicedaten als

@@ -466,7 +466,7 @@ Prueft ob IO auf diesem Device liegt.

key
-IO-Name str() / IO-Bytenummer int() +IO-Name / IO-Bytenummer
Returns:
@@ -493,7 +493,7 @@ Gibt Iterator aller IOs zurueck.

Returns:
-iter() aller IOs + aller IOs

@@ -504,7 +504,7 @@ Gibt Anzahl der Bytes zurueck, die dieses Device belegt.

Returns:
-int() +

@@ -526,15 +526,15 @@ Erstellt aus der piCtory-Liste die IOs fuer dieses Device.

dict_io
-dict()-Objekt aus piCtory Konfiguration +-Objekt aus piCtory Konfiguration
iotype
-io.Type() Wert + Wert
Returns:
-slice()-Objekt mit Start und Stop Position dieser IOs + mit Start und Stop Position dieser IOs

@@ -562,7 +562,7 @@ Gibt eine Liste aller Inputs und Outputs zurueck, keine MEMs.

Returns:
-list() Input und Output, keine MEMs + Input und Output, keine MEMs

@@ -573,7 +573,7 @@ Gibt eine Liste aller Inputs zurueck.

Returns:
-list() Inputs + Inputs

@@ -584,7 +584,7 @@ Gibt eine Liste aller mems zurueck.

Returns:
-list() Mems + Mems

@@ -595,7 +595,7 @@ Gibt eine Liste aller Outputs zurueck.

Returns:
-list() Outputs + Outputs

@@ -711,7 +711,7 @@ Prueft ob Device existiert.

key
-DeviceName str() / Positionsnummer int() +DeviceName / Positionsnummer
Returns:
@@ -749,12 +749,12 @@ Gibt angegebenes Device zurueck.

key
-DeviceName str() / Positionsnummer int() +DeviceName / Positionsnummer
Returns:
-Gefundenes Device()-Objekt +Gefundenes -Objekt

@@ -765,7 +765,7 @@ Gibt Iterator aller Devices zurueck.

Returns:
-iter() aller Devices + aller Devices

@@ -856,7 +856,7 @@ Gibt die Bytes aus, die dieses Device verwendet.

Returns:
-bytes() des Devices + des Devices
diff --git a/doc/revpimodio2.helper.html b/doc/revpimodio2.helper.html index ac2ef59..83d5234 100644 --- a/doc/revpimodio2.helper.html +++ b/doc/revpimodio2.helper.html @@ -410,7 +410,7 @@ Gibt Zykluszeit zurueck.

Returns:
-int() Zykluszeit in Millisekunden + Zykluszeit in Millisekunden

@@ -438,7 +438,7 @@ Setzt die Zykluszeit in Millisekunden.

value
-int() Millisekunden + Millisekunden

diff --git a/doc/revpimodio2.io.html b/doc/revpimodio2.io.html index c4d6e73..6a4d96d 100644 --- a/doc/revpimodio2.io.html +++ b/doc/revpimodio2.io.html @@ -28,10 +28,10 @@ Classes

- + - + @@ -66,7 +66,7 @@ Methods
DeviceInstantiierung der Device()-Klasse.Instantiierung der Device-Klasse.
__bytes__Gibt alle Daten des Devices als bytes() zurueck.Gibt alle Daten des Devices als zurueck.
__contains__ Prueft ob IO auf diesem Device liegt. Basisklasse fuer direkten Zugriff auf IO Objekte.
IntIOKlasse fuer den Zugriff auf die Daten mit Konvertierung in int().Klasse fuer den Zugriff auf die Daten mit Konvertierung in int.
StructIOKlasse fuer den Zugriff auf Daten ueber ein definierten struct().Klasse fuer den Zugriff auf Daten ueber ein definierten struct.
Type IO Typen.
- + @@ -82,7 +82,7 @@ Static Methods DeadIO (Constructor)DeadIO(deadio)

-Instantiierung der DeadIO()-Klasse. +Instantiierung der DeadIO-Klasse.

deadio
@@ -108,12 +108,13 @@ Stellt Funktion fuer weiter Bit-Ersetzungen bereit. Basisklasse fuer alle IO-Objekte.

Die Basisfunktionalitaet ermoeglicht das Lesen und Schreiben der Werte - als bytes() oder bool(). Dies entscheidet sich bei der Instantiierung. - Wenn eine Bittadresse angegeben wird, werden bool()-Werte erwartet - und zurueckgegeben, ansonsten bytes(). + als oder . Dies entscheidet sich bei der + Instantiierung. + Wenn eine Bittadresse angegeben wird, werden -Werte erwartet + und zurueckgegeben, ansonsten .

Diese Klasse dient als Basis fuer andere IO-Klassen mit denen die Werte - auch als int() verwendet werden koennen. + auch als verwendet werden koennen.

@@ -123,7 +124,7 @@ object

Class Attributes

DeadIOInstantiierung der DeadIO()-Klasse.Instantiierung der DeadIO-Klasse.
replace_io Stellt Funktion fuer weiter Bit-Ersetzungen bereit.
- +
address
byteorder
length
name
type
value
address
byteorder
defaultvalue
length
name
type
value

Class Methods

@@ -135,13 +136,13 @@ Methods - + - + - + @@ -158,8 +159,11 @@ Methods + + + - + @@ -168,7 +172,7 @@ Methods - + @@ -187,7 +191,7 @@ Static Methods IOBase (Constructor)IOBase(parentdevice, valuelist, iotype, byteorder, signed)

-Instantiierung der IOBase()-Klasse. +Instantiierung der IOBase-Klasse.

parentdevice
@@ -197,10 +201,10 @@ Parentdevice auf dem der IO liegt Datenliste fuer Instantiierung
iotype
-io.Type() Wert + Wert
byteorder
-Byteorder 'little' / 'big' fuer int() Berechnung +Byteorder 'little'/'big' fuer Berechnung
sigend
Intberechnung mit Vorzeichen durchfuehren @@ -210,18 +214,18 @@ Intberechnung mit Vorzeichen durchfuehren IOBase.__bool__ __bool__()

-bool()-wert der Klasse. +-Wert der Klasse.

Returns:
-IO-Wert als bool(). Nur False wenn False oder 0 sonst True + Nur False wenn False oder 0 sonst True

IOBase.__str__

__str__()

-str()-wert der Klasse. +-Wert der Klasse.

Returns:
@@ -247,7 +251,7 @@ Gibt konfigurierte Byteorder zurueck.

Returns:
-str() Byteorder + Byteorder

@@ -258,7 +262,7 @@ Gibt io.Type zurueck.

Returns:
-int() io.Type + io.Type

@@ -282,16 +286,27 @@ Gibt den Namen des IOs zurueck.
IO Name
+

+

+IOBase.get_defaultvalue

+get_defaultvalue() +

+Gibt die Defaultvalue von piCtory zurueck. +

+
Returns:
+
+Defaultvalue als oder +

IOBase.get_value

get_value()

-Gibt den Wert des IOs als bytes() oder bool() zurueck. +Gibt den Wert des IOs zurueck.

Returns:
-IO-Wert +IO-Wert als oder

@@ -322,12 +337,12 @@ Ersetzt bestehenden IO mit Neuem. Name des neuen Inputs

frm
-struct() formatierung (1 Zeichen) +struct formatierung (1 Zeichen)
kwargs
Weitere Parameter: - bmk: Bezeichnung fuer Input - - bit: Registriert Input als bool() am angegebenen Bit im Byte + - bit: Registriert IO als am angegebenen Bit im Byte - byteorder: Byteorder fuer den Input, Standardwert=little - defaultvalue: Standardwert fuer Input, Standard ist 0 - event: Funktion fuer Eventhandling registrieren @@ -337,18 +352,18 @@ Weitere Parameter:
See Also:
-Python3 struct() +Python3 struct

IOBase.set_value

set_value(value)

-Setzt den Wert des IOs mit bytes() oder bool(). +Setzt den Wert des IOs.

value
-IO-Wert als bytes() oder bool() +IO-Wert als oder

@@ -376,15 +391,15 @@ Wartet auf Wertaenderung eines IOs.

Bei Wertaenderung, wird das Warten mit 0 als Rueckgabewert beendet.

- HINWEIS: Wenn ProcimgWriter() keine neuen Daten liefert, wird + HINWEIS: Wenn keine neuen Daten liefert, wird bis in die Ewigkeit gewartet (nicht bei Angabe von "timeout").

Wenn edge mit RISING oder FALLING angegeben wird muss diese Flanke ausgeloest werden. Sollte der Wert 1 sein beim Eintritt mit Flanke RISING, wird das Warten erst bei Aenderung von 0 auf 1 beendet.

- Als exitevent kann ein threading.Event()-Objekt uebergeben werden, - welches das Warten bei is_set() sofort mit 1 als Rueckgabewert + Als exitevent kann ein -Objekt uebergeben + werden, welches das Warten bei is_set() sofort mit 1 als Rueckgabewert beendet.

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

exitevent
-thrading.Event() fuer vorzeitiges Beenden mit False + fuer vorzeitiges Beenden
okvalue
IO-Wert, bei dem das Warten sofort mit True beendet wird @@ -411,7 +426,7 @@ Zeit in ms nach der mit False abgebrochen wird
Returns:
-int() erfolgreich Werte <= 0 + erfolgreich Werte <= 0 - Erfolgreich gewartet Wert 0: IO hat den Wert gewechselt Wert -1: okvalue stimmte mit IO ueberein @@ -496,7 +511,7 @@ Prueft ob IO existiert.

key
-IO-Name str() oder Byte int() +IO-Name oder Byte
Returns:
@@ -608,12 +623,12 @@ Neues IO Objekt

IntIO

-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, - ueber die mit int() Werten gearbeitet werden kann. Fuer die Umwandlung - koennen 'Byteorder' (Default 'little') und 'signed' (Default False) als - Parameter gesetzt werden. + Diese Klasse erweitert die Funktion von um Funktionen, + ueber die mit Werten gearbeitet werden kann. Fuer die + Umwandlung koennen 'Byteorder' (Default 'little') und 'signed' (Default + False) als Parameter gesetzt werden.

See Also:
@@ -626,7 +641,7 @@ IOBase

Class Attributes

IOBaseInstantiierung der IOBase()-Klasse.Instantiierung der IOBase-Klasse.
__bool__bool()-wert der Klasse.-Wert der Klasse.
__str__str()-wert der Klasse.-Wert der Klasse.
_get_address Gibt die absolute Byteadresse im Prozessabbild zurueck. _get_name Gibt den Namen des IOs zurueck.
get_defaultvalueGibt die Defaultvalue von piCtory zurueck.
get_valueGibt den Wert des IOs als bytes() oder bool() zurueck.Gibt den Wert des IOs zurueck.
reg_event Registriert ein Event bei der Eventueberwachung. Ersetzt bestehenden IO mit Neuem.
set_valueSetzt den Wert des IOs mit bytes() oder bool().Setzt den Wert des IOs.
unreg_event Entfernt ein Event aus der Eventueberwachung.
- +
byteorder
signed
value
byteorder
defaultvalue
signed
value

Class Methods

@@ -638,19 +653,22 @@ Methods - + - + - + + + + @@ -666,11 +684,11 @@ Static Methods IntIO.__int____int__()

-Gibt IO als int() Wert zurueck mit Beachtung byteorder/signed. +Gibt IO-Wert zurueck mit Beachtung byteorder/signed.

Returns:
-int() ohne Vorzeichen +IO-Wert als

@@ -688,11 +706,11 @@ True, wenn Vorzeichenbehaftet IntIO._set_byteorder

_set_byteorder(value)

-Setzt Byteorder fuer int() Umwandlung. +Setzt Byteorder fuer Umwandlung.

value
-str() 'little' or 'big' + 'little' or 'big'

@@ -710,11 +728,22 @@ True, wenn mit Vorzeichen behandel IntIO.get_int

get_int()

-Gibt IO als int() Wert zurueck mit Beachtung byteorder/signed. +Gibt IO-Wert zurueck mit Beachtung byteorder/signed.

Returns:
-int() Wert +IO-Wert als +
+
+

+IntIO.get_intdefaultvalue

+get_intdefaultvalue() +

+Gibt die Defaultvalue als zurueck. +

+
Returns:
+
+ Defaultvalue

@@ -725,7 +754,7 @@ Setzt IO mit Beachtung byteorder/signed.

value
-int() + Wert
Up
@@ -733,10 +762,9 @@ int()

StructIO

-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() - Klasse. Sie stellt ueber struct die Werte in der gewuenschten Formatierung + Sie stellt ueber struct die Werte in der gewuenschten Formatierung bereit. Der struct-Formatwert wird bei der Instantiierung festgelegt.

See Also:
@@ -750,7 +778,7 @@ IOBase

Class Attributes

__int__Gibt IO als int() Wert zurueck mit Beachtung byteorder/signed.Gibt IO-Wert zurueck mit Beachtung byteorder/signed.
_get_signed Ruft ab, ob der Wert Vorzeichenbehaftet behandelt werden soll.
_set_byteorderSetzt Byteorder fuer int() Umwandlung.Setzt Byteorder fuer Umwandlung.
_set_signed Left fest, ob der Wert Vorzeichenbehaftet behandelt werden soll.
get_intGibt IO als int() Wert zurueck mit Beachtung byteorder/signed.Gibt IO-Wert zurueck mit Beachtung byteorder/signed.
get_intdefaultvalueGibt die Defaultvalue als zurueck.
set_int Setzt IO mit Beachtung byteorder/signed.
- +
frm
signed
value
defaultvalue
frm
signed
value

Class Methods

@@ -765,11 +793,14 @@ Methods Erstellt einen IO mit struct-Formatierung. _get_frm -Ruft die struct() Formatierung ab. +Ruft die struct Formatierung ab. _get_signed Ruft ab, ob der Wert Vorzeichenbehaftet behandelt werden soll. +get_structdefaultvalue +Gibt die Defaultvalue mit struct Formatierung zurueck. + get_structvalue Gibt den Wert mit struct Formatierung zurueck. @@ -797,12 +828,12 @@ ParentIO Objekt, welches ersetzt wird Name des neuen IO
frm
-struct() formatierung (1 Zeichen) +struct formatierung (1 Zeichen)
kwargs
Weitere Parameter: - bmk: Bezeichnung fuer Output - - bit: Registriert Outputs als bool() am angegebenen Bit im Byte + - bit: Registriert IO als am angegebenen Bit im Byte - byteorder: Byteorder fuer den Input, Standardwert=little - defaultvalue: Standardwert fuer Output, Standard ist 0
@@ -811,11 +842,11 @@ Weitere Parameter: StructIO._get_frm _get_frm()

-Ruft die struct() Formatierung ab. +Ruft die struct Formatierung ab.

Returns:
-struct() Formatierung +struct Formatierung

@@ -828,6 +859,17 @@ Ruft ab, ob der Wert Vorzeichenbehaftet behandelt werden soll.
True, wenn Vorzeichenbehaftet
+ +

+StructIO.get_structdefaultvalue

+get_structdefaultvalue() +

+Gibt die Defaultvalue mit struct Formatierung zurueck. +

+
Returns:
+
+Defaultvalue vom Typ der struct-Formatierung +

StructIO.get_structvalue

diff --git a/doc/revpimodio2.modio.html b/doc/revpimodio2.modio.html index ed1ef4d..f880693 100644 --- a/doc/revpimodio2.modio.html +++ b/doc/revpimodio2.modio.html @@ -126,7 +126,7 @@ Methods Beendet mainloop() und optional autorefresh. get_jconfigrsc -Laed die piCotry Konfiguration und erstellt ein dict(). +Laed die piCotry Konfiguration und erstellt ein . handlesignalend Signalhandler fuer Programmende verwalten. @@ -158,19 +158,28 @@ Static Methods

RevPiModIO (Constructor)

-RevPiModIO(**kwargs) +RevPiModIO(autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False)

Instantiiert die Grundfunktionen.

-
kwargs
+
autorefresh
-Weitere Parameter: - - autorefresh: Wenn True, alle Devices zu autorefresh hinzufuegen - - configrsc: Pfad zur piCtory Konfigurationsdatei - - procimg: Pfad zum Prozessabbild - - monitoring: In- und Outputs werden gelesen, niemals geschrieben - - simulator: Laed das Modul als Simulator und vertauscht IOs - - syncoutputs: Aktuell gesetzte Outputs vom Prozessabbild einlesen +Wenn True, alle Devices zu autorefresh hinzufuegen +
monitoring
+
+In- und Outputs werden gelesen, niemals geschrieben +
syncoutputs
+
+Aktuell gesetzte Outputs vom Prozessabbild einlesen +
procimg
+
+Abweichender Pfad zum Prozessabbild +
configrsc
+
+Abweichender Pfad zur piCtory Konfigurationsdatei +
simulator
+
+Laed das Modul als Simulator und vertauscht IOs

@@ -308,7 +317,7 @@ Setzt Aktualisierungsrate der Prozessabbild-Synchronisierung.

milliseconds
-int() in Millisekunden + in Millisekunden

@@ -394,11 +403,11 @@ Entfernt auch alle Devices aus autorefresh RevPiModIO.get_jconfigrsc

get_jconfigrsc()

-Laed die piCotry Konfiguration und erstellt ein dict(). +Laed die piCotry Konfiguration und erstellt ein .

Returns:
-dict() der piCtory Konfiguration + der piCtory Konfiguration

@@ -579,16 +588,16 @@ Static Methods

RevPiModIODriver (Constructor)

-RevPiModIODriver(vdev, **kwargs) +RevPiModIODriver(virtdev, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None)

Instantiiert die Grundfunktionen. +

+ Parameter 'monitoring' und 'simulator' stehen hier nicht zur + Verfuegung, da diese automatisch gesetzt werden.

-
vdev
+
virtdev
-Virtuelles Device fuer die Verwendung / oder list() -
kwargs
-
-Weitere Parameter (nicht monitoring und simulator) +Virtuelles Device oder mehrere als
See Also:
@@ -639,7 +648,7 @@ Static Methods

RevPiModIOSelected (Constructor)

-RevPiModIOSelected(deviceselection, **kwargs) +RevPiModIOSelected(deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False)

Instantiiert nur fuer angegebene Devices die Grundfunktionen.

@@ -650,9 +659,6 @@ Instantiiert nur fuer angegebene Devices die Grundfunktionen.

deviceselection
Positionsnummer oder Devicename -
kwargs
-
-Weitere Parameter
See Also:
diff --git a/eric-revpimodio2.api b/eric-revpimodio2.api index 27a0b3d..49b6e46 100644 --- a/eric-revpimodio2.api +++ b/eric-revpimodio2.api @@ -74,6 +74,8 @@ revpimodio2.io.IOBase._get_length?5() revpimodio2.io.IOBase._get_name?5() revpimodio2.io.IOBase.address?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.length?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_signed?5(value) revpimodio2.io.IntIO.byteorder?7 +revpimodio2.io.IntIO.defaultvalue?7 revpimodio2.io.IntIO.get_int?4() +revpimodio2.io.IntIO.get_intdefaultvalue?4() revpimodio2.io.IntIO.set_int?4(value) revpimodio2.io.IntIO.signed?7 revpimodio2.io.IntIO.value?7 revpimodio2.io.StructIO._get_frm?5() revpimodio2.io.StructIO._get_signed?5() +revpimodio2.io.StructIO.defaultvalue?7 revpimodio2.io.StructIO.frm?7 +revpimodio2.io.StructIO.get_structdefaultvalue?4() revpimodio2.io.StructIO.get_structvalue?4() revpimodio2.io.StructIO.set_structvalue?4(value) revpimodio2.io.StructIO.signed?7 @@ -139,7 +145,7 @@ revpimodio2.modio.RevPiModIO.setdefaultvalues?4(device=None) revpimodio2.modio.RevPiModIO.simulator?7 revpimodio2.modio.RevPiModIO.syncoutputs?4(device=None) revpimodio2.modio.RevPiModIO.writeprocimg?4(device=None) -revpimodio2.modio.RevPiModIO?1(**kwargs) -revpimodio2.modio.RevPiModIODriver?1(vdev, **kwargs) -revpimodio2.modio.RevPiModIOSelected?1(deviceselection, **kwargs) +revpimodio2.modio.RevPiModIO?1(autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False) +revpimodio2.modio.RevPiModIODriver?1(virtdev, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None) +revpimodio2.modio.RevPiModIOSelected?1(deviceselection, autorefresh=False, monitoring=False, syncoutputs=True, procimg=None, configrsc=None, simulator=False) revpimodio2.summary.Summary?1(summary) diff --git a/revpimodio2.e4p b/revpimodio2.e4p index 60e67f2..0ed1e50 100644 --- a/revpimodio2.e4p +++ b/revpimodio2.e4p @@ -1,7 +1,7 @@ - + en_US @@ -9,10 +9,10 @@ Python3 Console 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. - 2.0.0 + 2.0.1 Sven Sager akira@narux.de - + setup.py revpimodio2/modio.py @@ -26,6 +26,9 @@ test/test_dio_mainloop.py test/test_dio_cycleloop.py test/test_net_leistung.py + revpimodio2/net.py + test/web_cycleloop.py + test/web_mainloop.py diff --git a/revpimodio2/__init__.py b/revpimodio2/__init__.py index 476d7b4..f277886 100644 --- a/revpimodio2/__init__.py +++ b/revpimodio2/__init__.py @@ -1,10 +1,10 @@ +# -*- coding: utf-8 -*- # # python3-RevPiModIO # # Webpage: https://revpimodio.org/ # (c) Sven Sager, License: LGPLv3 # -# -*- coding: utf-8 -*- """Stellt alle Klassen fuer den RevolutionPi zur Verfuegung. Stellt Klassen fuer die einfache Verwendung des Revolution Pis der @@ -24,7 +24,7 @@ __all__ = ["RevPiModIO", "RevPiModIOSelected", "RevPiModIODriver"] __author__ = "Sven Sager " __name__ = "revpimodio2" __package__ = "revpimodio2" -__version__ = "2.0.0" +__version__ = "2.0.1" # Global package values OFF = 0 diff --git a/revpimodio2/app.py b/revpimodio2/app.py index 601010a..03d6c1e 100644 --- a/revpimodio2/app.py +++ b/revpimodio2/app.py @@ -1,10 +1,10 @@ +# -*- coding: utf-8 -*- # # python3-RevPiModIO # # Webpage: https://revpimodio.org/ # (c) Sven Sager, License: LGPLv3 # -# -*- coding: utf-8 -*- """Bildet die App Sektion von piCtory ab.""" diff --git a/revpimodio2/device.py b/revpimodio2/device.py index b3a46ff..c75d664 100644 --- a/revpimodio2/device.py +++ b/revpimodio2/device.py @@ -1,10 +1,10 @@ +# -*- coding: utf-8 -*- # # python3-RevPiModIO # # Webpage: https://revpimodio.org/ # (c) Sven Sager, License: LGPLv3 # -# -*- coding: utf-8 -*- """Modul fuer die Verwaltung der Devices.""" from threading import Lock from .helper import ProcimgWriter @@ -20,7 +20,7 @@ class DeviceList(object): def __contains__(self, key): """Prueft ob Device existiert. - @param key DeviceName str() / Positionsnummer int() + @param key DeviceName / Positionsnummer @return True, wenn Device vorhanden""" if type(key) == int: return key in self.__dict_position @@ -49,8 +49,8 @@ class DeviceList(object): def __getitem__(self, key): """Gibt angegebenes Device zurueck. - @param key DeviceName str() / Positionsnummer int() - @return Gefundenes Device()-Objekt""" + @param key DeviceName / Positionsnummer + @return Gefundenes -Objekt""" if type(key) == int: if key not in self.__dict_position: raise KeyError("no device on position {}".format(key)) @@ -60,7 +60,7 @@ class DeviceList(object): def __iter__(self): """Gibt Iterator aller Devices zurueck. - @return iter() aller Devices""" + @return aller Devices""" for dev in sorted(self.__dict_position): yield self.__dict_position[dev] @@ -91,10 +91,10 @@ class Device(object): """ def __init__(self, parentmodio, dict_device, simulator=False): - """Instantiierung der Device()-Klasse. + """Instantiierung der Device-Klasse. @param parent RevpiModIO parent object - @param dict_device dict() fuer dieses Device aus piCotry Konfiguration + @param dict_device fuer dieses Device aus piCotry @param simulator: Laed das Modul als Simulator und vertauscht IOs """ @@ -149,13 +149,13 @@ class Device(object): self._devconfigure() def __bytes__(self): - """Gibt alle Daten des Devices als bytes() zurueck. - @return Devicedaten als bytes()""" + """Gibt alle Daten des Devices als zurueck. + @return Devicedaten als """ return bytes(self._ba_devdata) def __contains__(self, key): """Prueft ob IO auf diesem Device liegt. - @param key IO-Name str() / IO-Bytenummer int() + @param key IO-Name / IO-Bytenummer @return True, wenn device vorhanden""" if type(key) == str: return key in self._modio.io \ @@ -176,14 +176,14 @@ class Device(object): def __iter__(self): """Gibt Iterator aller IOs zurueck. - @return iter() aller IOs""" + @return aller IOs""" for lst_io in self._modio.io[self._slc_devoff]: for io in lst_io: yield io def __len__(self): """Gibt Anzahl der Bytes zurueck, die dieses Device belegt. - @return int()""" + @return """ return self._length def __str__(self): @@ -194,9 +194,9 @@ class Device(object): def _buildio(self, dict_io, iotype): """Erstellt aus der piCtory-Liste die IOs fuer dieses Device. - @param dict_io dict()-Objekt aus piCtory Konfiguration - @param iotype io.Type() Wert - @return slice()-Objekt mit Start und Stop Position dieser IOs + @param dict_io -Objekt aus piCtory Konfiguration + @param iotype Wert + @return mit Start und Stop Position dieser IOs """ if len(dict_io) <= 0: @@ -281,7 +281,7 @@ class Device(object): def get_allios(self): """Gibt eine Liste aller Inputs und Outputs zurueck, keine MEMs. - @return list() Input und Output, keine MEMs""" + @return Input und Output, keine MEMs""" lst_return = [] for lst_io in self._modio.io[ self._slc_inpoff.start:self._slc_outoff.stop]: @@ -290,7 +290,7 @@ class Device(object): def get_inputs(self): """Gibt eine Liste aller Inputs zurueck. - @return list() Inputs""" + @return Inputs""" lst_return = [] for lst_io in self._modio.io[self._slc_inpoff]: lst_return += lst_io @@ -298,7 +298,7 @@ class Device(object): def get_outputs(self): """Gibt eine Liste aller Outputs zurueck. - @return list() Outputs""" + @return Outputs""" lst_return = [] for lst_io in self._modio.io[self._slc_outoff]: lst_return += lst_io @@ -306,7 +306,7 @@ class Device(object): def get_memmories(self): """Gibt eine Liste aller mems zurueck. - @return list() Mems""" + @return Mems""" lst_return = [] for lst_io in self._modio.io[self._slc_memoff]: lst_return += lst_io @@ -376,6 +376,19 @@ class Core(Device): self._ioerrorlimit1 = 6 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): """Verwaltet das Lesen und Schreiben der ErrorLimits. @param io_id Index des IOs fuer ErrorLimit @@ -392,12 +405,12 @@ class Core(Device): )) else: raise ValueError( - "errorlimit value int() must be between 0 and 65535" + "errorlimit value must be between 0 and 65535" ) def _get_status(self): """Gibt den RevPi Core Status zurueck. - @return Status als int()""" + @return Status als """ return int.from_bytes( 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 )) 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): """Setzt den Zustand der LED A2 vom core. @@ -444,7 +457,7 @@ class Core(Device): length=1, byteorder=self.__lst_io[self._ioled]._byteorder )) 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) A2 = property(_get_leda2, _set_leda2) @@ -591,7 +604,7 @@ class Gateway(Device): def get_rawbytes(self): """Gibt die Bytes aus, die dieses Device verwendet. - @return bytes() des Devices""" + @return des Devices""" return bytes(self._ba_devdata) @@ -629,7 +642,7 @@ class Virtual(Gateway): self._filelock.acquire() 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 try: diff --git a/revpimodio2/helper.py b/revpimodio2/helper.py index 4b196ee..7c2a58c 100644 --- a/revpimodio2/helper.py +++ b/revpimodio2/helper.py @@ -1,10 +1,10 @@ +# -*- coding: utf-8 -*- # # python3-RevPiModIO # # Webpage: https://revpimodio.org/ # (c) Sven Sager, License: LGPLv3 # -# -*- coding: utf-8 -*- """RevPiModIO Helperklassen und Tools.""" import warnings from threading import Event, Lock, Thread @@ -263,7 +263,7 @@ class ProcimgWriter(Thread): def get_refresh(self): """Gibt Zykluszeit zurueck. - @return int() Zykluszeit in Millisekunden""" + @return Zykluszeit in Millisekunden""" return int(self._refresh * 1000) def run(self): @@ -362,7 +362,7 @@ class ProcimgWriter(Thread): def set_refresh(self, value): """Setzt die Zykluszeit in Millisekunden. - @param value int() Millisekunden""" + @param value Millisekunden""" if type(value) == int and 10 <= value <= 2000: waitdiff = self._refresh - self._adjwait self._refresh = value / 1000 diff --git a/revpimodio2/io.py b/revpimodio2/io.py index 2ab6400..617ddfd 100644 --- a/revpimodio2/io.py +++ b/revpimodio2/io.py @@ -1,10 +1,10 @@ +# -*- coding: utf-8 -*- # # python3-RevPiModIO # # Webpage: https://revpimodio.org/ # (c) Sven Sager, License: LGPLv3 # -# -*- coding: utf-8 -*- """RevPiModIO Modul fuer die Verwaltung der IOs.""" import struct from threading import Event @@ -31,7 +31,7 @@ class IOList(object): def __contains__(self, key): """Prueft ob IO existiert. - @param key IO-Name str() oder Byte int() + @param key IO-Name oder Byte @return True, wenn IO vorhanden / Byte belegt""" if type(key) == int: return key in self.__dict_iobyte \ @@ -87,7 +87,9 @@ class IOList(object): elif type(key) == slice: return [ 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: return getattr(self, key) @@ -139,7 +141,7 @@ class IOList(object): ) ) else: - # Bereits überschriebene bytes() sind ungültig + # Bereits überschriebene bytes sind ungültig raise MemoryError( "new io '{}' overlaps memory of '{}'".format( io._name, oldio._name @@ -189,7 +191,7 @@ class DeadIO(object): """Klasse, mit der ersetzte IOs verwaltet werden.""" def __init__(self, deadio): - """Instantiierung der DeadIO()-Klasse. + """Instantiierung der DeadIO-Klasse. @param deadio IO, der ersetzt wurde""" self.__deadio = deadio @@ -204,22 +206,23 @@ class IOBase(object): """Basisklasse fuer alle IO-Objekte. Die Basisfunktionalitaet ermoeglicht das Lesen und Schreiben der Werte - als bytes() oder bool(). Dies entscheidet sich bei der Instantiierung. - Wenn eine Bittadresse angegeben wird, werden bool()-Werte erwartet - und zurueckgegeben, ansonsten bytes(). + als oder . Dies entscheidet sich bei der + Instantiierung. + Wenn eine Bittadresse angegeben wird, werden -Werte erwartet + und zurueckgegeben, ansonsten . Diese Klasse dient als Basis fuer andere IO-Klassen mit denen die Werte - auch als int() verwendet werden koennen. + auch als verwendet werden koennen. """ 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 valuelist Datenliste fuer Instantiierung - @param iotype io.Type() Wert - @param byteorder Byteorder 'little' / 'big' fuer int() Berechnung + @param iotype Wert + @param byteorder Byteorder 'little'/'big' fuer Berechnung @param sigend Intberechnung mit Vorzeichen durchfuehren """ @@ -244,8 +247,8 @@ class IOBase(object): int_startaddress, int_startaddress + self._length ) # Defaultvalue aus Zahl in Bytes umrechnen - if str(valuelist[1]).isnumeric(): - self.defaultvalue = int(valuelist[1]).to_bytes( + if str(valuelist[1]).isdigit(): + self._defaultvalue = int(valuelist[1]).to_bytes( self._length, byteorder=self._byteorder ) else: @@ -254,12 +257,13 @@ class IOBase(object): if len(valuelist[1]) != self._length: raise ValueError( "given bytes for default value must have a length " - "of {}".format(self._length) + "of {} but {} was given" + "".format(self._length, len(valuelist[1])) ) else: - self.defaultvalue = valuelist[1] + self._defaultvalue = valuelist[1] else: - self.defaultvalue = bytes(self._length) + self._defaultvalue = bytes(self._length) else: # Höhere Bits als 7 auf nächste Bytes umbrechen @@ -267,11 +271,11 @@ class IOBase(object): self._slc_address = slice( int_startaddress, int_startaddress + 1 ) - self.defaultvalue = bool(int(valuelist[1])) + self._defaultvalue = bool(int(valuelist[1])) def __bool__(self): - """bool()-wert der Klasse. - @return IO-Wert als bool(). Nur False wenn False oder 0 sonst True""" + """-Wert der Klasse. + @return Nur False wenn False oder 0 sonst True""" if self._bitaddress >= 0: int_byte = int.from_bytes( self._parentdevice._ba_devdata[self._slc_address], @@ -282,7 +286,7 @@ class IOBase(object): return bool(self._parentdevice._ba_devdata[self._slc_address]) def __str__(self): - """str()-wert der Klasse. + """-Wert der Klasse. @return Namen des IOs""" return self._name @@ -293,12 +297,12 @@ class IOBase(object): def _get_byteorder(self): """Gibt konfigurierte Byteorder zurueck. - @return str() Byteorder""" + @return Byteorder""" return self._byteorder def _get_iotype(self): """Gibt io.Type zurueck. - @return int() io.Type""" + @return io.Type""" return self._iotype def _get_length(self): @@ -311,9 +315,14 @@ class IOBase(object): @return IO Name""" return self._name + def get_defaultvalue(self): + """Gibt die Defaultvalue von piCtory zurueck. + @return Defaultvalue als oder """ + return self._defaultvalue + def get_value(self): - """Gibt den Wert des IOs als bytes() oder bool() zurueck. - @return IO-Wert""" + """Gibt den Wert des IOs zurueck. + @return IO-Wert als oder """ if self._bitaddress >= 0: int_byte = int.from_bytes( self._parentdevice._ba_devdata[self._slc_address], @@ -376,10 +385,10 @@ class IOBase(object): """Ersetzt bestehenden IO mit Neuem. @param name Name des neuen Inputs - @param frm struct() formatierung (1 Zeichen) + @param frm struct formatierung (1 Zeichen) @param kwargs Weitere Parameter: - bmk: Bezeichnung fuer Input - - bit: Registriert Input als bool() am angegebenen Bit im Byte + - bit: Registriert IO als am angegebenen Bit im Byte - byteorder: Byteorder fuer den Input, Standardwert=little - defaultvalue: Standardwert fuer Input, Standard ist 0 - event: Funktion fuer Eventhandling registrieren @@ -387,7 +396,7 @@ class IOBase(object): - edge: event-Ausfuehren bei RISING, FALLING or BOTH Wertaenderung @see Python3 struct() + >Python3 struct """ if not issubclass(type(self._parentdevice), Gateway): @@ -396,13 +405,15 @@ class IOBase(object): "devices only" ) - # StructIO erzeugen und in IO-Liste einfügen + # 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 @@ -415,8 +426,8 @@ class IOBase(object): ) def set_value(self, value): - """Setzt den Wert des IOs mit bytes() oder bool(). - @param value IO-Wert als bytes() oder bool()""" + """Setzt den Wert des IOs. + @param value IO-Wert als oder """ if self._iotype == Type.OUT: if self._bitaddress >= 0: # 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. - HINWEIS: Wenn ProcimgWriter() keine neuen Daten liefert, wird + HINWEIS: Wenn keine neuen Daten liefert, wird bis in die Ewigkeit gewartet (nicht bei Angabe von "timeout"). Wenn edge mit RISING oder FALLING angegeben wird muss diese Flanke ausgeloest werden. Sollte der Wert 1 sein beim Eintritt mit Flanke RISING, wird das Warten erst bei Aenderung von 0 auf 1 beendet. - Als exitevent kann ein threading.Event()-Objekt uebergeben werden, - welches das Warten bei is_set() sofort mit 1 als Rueckgabewert + Als exitevent kann ein -Objekt uebergeben + werden, welches das Warten bei is_set() sofort mit 1 als Rueckgabewert beendet. 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!) @param edge Flanke RISING, FALLING, BOTH bei der mit True beendet wird - @param exitevent thrading.Event() fuer vorzeitiges Beenden mit False + @param exitevent fuer vorzeitiges Beenden @param okvalue IO-Wert, bei dem das Warten sofort mit True beendet wird @param timeout Zeit in ms nach der mit False abgebrochen wird - @return int() erfolgreich Werte <= 0 + @return erfolgreich Werte <= 0 - Erfolgreich gewartet Wert 0: IO hat den Wert gewechselt Wert -1: okvalue stimmte mit IO ueberein @@ -600,6 +611,7 @@ class IOBase(object): address = property(_get_address) byteorder = property(_get_byteorder) + defaultvalue = property(get_defaultvalue) length = property(_get_length) name = property(_get_name) type = property(_get_iotype) @@ -608,19 +620,19 @@ class IOBase(object): 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, - ueber die mit int() Werten gearbeitet werden kann. Fuer die Umwandlung - koennen 'Byteorder' (Default 'little') und 'signed' (Default False) als - Parameter gesetzt werden. + Diese Klasse erweitert die Funktion von um Funktionen, + ueber die mit Werten gearbeitet werden kann. Fuer die + Umwandlung koennen 'Byteorder' (Default 'little') und 'signed' (Default + False) als Parameter gesetzt werden. @see #IOBase IOBase """ def __int__(self): - """Gibt IO als int() Wert zurueck mit Beachtung byteorder/signed. - @return int() ohne Vorzeichen""" + """Gibt IO-Wert zurueck mit Beachtung byteorder/signed. + @return IO-Wert als """ return int.from_bytes( self._parentdevice._ba_devdata[self._slc_address], byteorder=self._byteorder, @@ -633,11 +645,12 @@ class IntIO(IOBase): return self._signed def _set_byteorder(self, value): - """Setzt Byteorder fuer int() Umwandlung. - @param value str() 'little' or 'big'""" + """Setzt Byteorder fuer Umwandlung. + @param value 'little' or 'big'""" if not (value == "little" or value == "big"): raise ValueError("byteorder must be 'little' or 'big'") self._byteorder = value + self._defaultvalue = self._defaultvalue[::-1] def _set_signed(self, value): """Left fest, ob der Wert Vorzeichenbehaftet behandelt werden soll. @@ -646,9 +659,16 @@ class IntIO(IOBase): raise ValueError("signed must be True or False") self._signed = value + def get_intdefaultvalue(self): + """Gibt die Defaultvalue als zurueck. + @return Defaultvalue""" + return int.from_bytes( + self._defaultvalue, byteorder=self._byteorder, signed=self._signed + ) + def get_int(self): - """Gibt IO als int() Wert zurueck mit Beachtung byteorder/signed. - @return int() Wert""" + """Gibt IO-Wert zurueck mit Beachtung byteorder/signed. + @return IO-Wert als """ return int.from_bytes( self._parentdevice._ba_devdata[self._slc_address], byteorder=self._byteorder, @@ -657,7 +677,7 @@ class IntIO(IOBase): def set_int(self, value): """Setzt IO mit Beachtung byteorder/signed. - @param value int()""" + @param value Wert""" if type(value) == int: self.set_value(value.to_bytes( self._length, @@ -671,16 +691,16 @@ class IntIO(IOBase): ) byteorder = property(IOBase._get_byteorder, _set_byteorder) + defaultvalue = property(get_intdefaultvalue) signed = property(_get_signed, _set_signed) value = property(get_int, set_int) 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() - Klasse. Sie stellt ueber struct die Werte in der gewuenschten Formatierung + Sie stellt ueber struct die Werte in der gewuenschten Formatierung bereit. Der struct-Formatwert wird bei der Instantiierung festgelegt. @see #IOBase IOBase @@ -691,10 +711,10 @@ class StructIO(IOBase): @param parentio ParentIO Objekt, welches ersetzt wird @param name Name des neuen IO - @param frm struct() formatierung (1 Zeichen) + @param frm struct formatierung (1 Zeichen) @param kwargs Weitere Parameter: - bmk: Bezeichnung fuer Output - - bit: Registriert Outputs als bool() am angegebenen Bit im Byte + - bit: Registriert IO als am angegebenen Bit im Byte - byteorder: Byteorder fuer den Input, Standardwert=little - defaultvalue: Standardwert fuer Output, Standard ist 0 @@ -709,7 +729,7 @@ class StructIO(IOBase): bitaddress = "" if frm != "?" else str(kwargs.get("bit", 0)) if bitaddress == "" or (0 <= int(bitaddress) < 8): - bitlength = "1" if bitaddress.isnumeric() else \ + bitlength = "1" if bitaddress.isdigit() else \ struct.calcsize(bofrm + frm) * 8 # [name,default,anzbits,adressbyte,export,adressid,bmk,bitaddress] @@ -752,8 +772,8 @@ class StructIO(IOBase): ) def _get_frm(self): - """Ruft die struct() Formatierung ab. - @return struct() Formatierung""" + """Ruft die struct Formatierung ab. + @return struct Formatierung""" return self.__frm def _get_signed(self): @@ -761,6 +781,14 @@ class StructIO(IOBase): @return True, wenn Vorzeichenbehaftet""" 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): """Gibt den Wert mit struct Formatierung zurueck. @return Wert vom Typ der struct-Formatierung""" @@ -777,6 +805,7 @@ class StructIO(IOBase): else: self.set_value(struct.pack(self.__frm, value)) + defaultvalue = property(get_structdefaultvalue) frm = property(_get_frm) signed = property(_get_signed) value = property(get_structvalue, set_structvalue) diff --git a/revpimodio2/modio.py b/revpimodio2/modio.py index 58ada4f..cd751c7 100644 --- a/revpimodio2/modio.py +++ b/revpimodio2/modio.py @@ -1,10 +1,10 @@ +# -*- coding: utf-8 -*- # # python3-RevPiModIO # # Webpage: https://revpimodio.org/ # (c) Sven Sager, License: LGPLv3 # -# -*- coding: utf-8 -*- """RevPiModIO Hauptklasse.""" import warnings 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. - @param kwargs Weitere Parameter: - - autorefresh: Wenn True, alle Devices zu autorefresh hinzufuegen - - configrsc: Pfad zur piCtory Konfigurationsdatei - - procimg: Pfad zum Prozessabbild - - monitoring: In- und Outputs werden gelesen, niemals geschrieben - - simulator: Laed das Modul als Simulator und vertauscht IOs - - syncoutputs: Aktuell gesetzte Outputs vom Prozessabbild einlesen + @param autorefresh Wenn True, alle Devices zu autorefresh hinzufuegen + @param monitoring In- und Outputs werden gelesen, niemals geschrieben + @param syncoutputs Aktuell gesetzte Outputs vom Prozessabbild einlesen + @param procimg Abweichender Pfad zum Prozessabbild + @param configrsc Abweichender Pfad zur piCtory Konfigurationsdatei + @param simulator Laed das Modul als Simulator und vertauscht IOs """ - self._autorefresh = kwargs.get("autorefresh", False) - self._configrsc = kwargs.get("configrsc", None) - self._monitoring = kwargs.get("monitoring", False) - self._procimg = kwargs.get("procimg", "/dev/piControl0") - self._simulator = kwargs.get("simulator", False) - self._syncoutputs = kwargs.get("syncoutputs", True) + self._autorefresh = autorefresh + self._configrsc = configrsc + self._monitoring = monitoring + self._procimg = "/dev/piControl0" if procimg is None else procimg + self._simulator = simulator + self._syncoutputs = syncoutputs # 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 dev["name"] in self._lst_devselect: lst_found.append(dev) - elif dev["position"].isnumeric() \ + elif dev["position"].isdigit() \ and int(dev["position"]) in self._lst_devselect: lst_found.append(dev) @@ -151,14 +152,6 @@ class RevPiModIO(object): self, device, simulator=self._simulator ) 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": # IOs dev_new = devicemodule.Device( @@ -287,7 +280,7 @@ class RevPiModIO(object): def _set_cycletime(self, milliseconds): """Setzt Aktualisierungsrate der Prozessabbild-Synchronisierung. - @param milliseconds int() in Millisekunden""" + @param milliseconds in Millisekunden""" self._imgwriter.refresh = milliseconds def _set_maxioerrors(self, value): @@ -413,8 +406,8 @@ class RevPiModIO(object): self._looprunning = False def get_jconfigrsc(self): - """Laed die piCotry Konfiguration und erstellt ein dict(). - @return dict() der piCtory Konfiguration""" + """Laed die piCotry Konfiguration und erstellt ein . + @return der piCtory Konfiguration""" # piCtory Konfiguration prüfen if self._configrsc is not None: if not access(self._configrsc, F_OK | R_OK): @@ -681,7 +674,7 @@ class RevPiModIO(object): for dev in mylist: for io in dev.get_outputs(): - io.set_value(io.defaultvalue) + io.set_value(io._defaultvalue) def syncoutputs(self, device=None): """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. Der Parameter deviceselection kann eine einzelne @@ -802,11 +797,12 @@ class RevPiModIOSelected(RevPiModIO): mehreren Positionen / Namen @param deviceselection Positionsnummer oder Devicename - @param kwargs Weitere Parameter @see #RevPiModIO.__init__ RevPiModIO.__init__(...) """ - super().__init__(**kwargs) + super().__init__( + autorefresh, monitoring, syncoutputs, procimg, configrsc, simulator + ) # Device liste erstellen if type(deviceselection) == list: @@ -818,7 +814,8 @@ class RevPiModIOSelected(RevPiModIO): for vdev in self._lst_devselect: if type(vdev) != int and type(vdev) != str: raise ValueError( - "need device position as int() or device name as str()" + "need device position as or device name as " + "" ) 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. - @param vdev Virtuelles Device fuer die Verwendung / oder list() - @param kwargs Weitere Parameter (nicht monitoring und simulator) + Parameter 'monitoring' und 'simulator' stehen hier nicht zur + Verfuegung, da diese automatisch gesetzt werden. + + @param virtdev Virtuelles Device oder mehrere als @see #RevPiModIO.__init__ RevPiModIO.__init__(...) """ - kwargs["monitoring"] = False - kwargs["simulator"] = True - super().__init__(vdev, **kwargs) + # Parent mit monitoring=False und simulator=True laden + super().__init__( + virtdev, autorefresh, False, syncoutputs, procimg, configrsc, True + ) diff --git a/revpimodio2/summary.py b/revpimodio2/summary.py index 79bac74..0fcfb8d 100644 --- a/revpimodio2/summary.py +++ b/revpimodio2/summary.py @@ -1,10 +1,10 @@ +# -*- coding: utf-8 -*- # # python3-RevPiModIO # # Webpage: https://revpimodio.org/ # (c) Sven Sager, License: LGPLv3 # -# -*- coding: utf-8 -*- """Bildet die Summary-Sektion von piCtory ab.""" diff --git a/setup.py b/setup.py index 20a8677..a321f41 100644 --- a/setup.py +++ b/setup.py @@ -1,8 +1,8 @@ #! /usr/bin/env python3 +# -*- coding: utf-8 -*- # # (c) Sven Sager, License: LGPLv3 # -# -*- coding: utf-8 -*- """Setupscript fuer python3-revpimodio.""" from distutils.core import setup @@ -16,7 +16,7 @@ setup( license="LGPLv3", name="revpimodio2", - version="2.0.0", + version="2.0.1", packages=["revpimodio2"],