Diese Klasse bietet direkten Zugriff auf die IOs des Revolution Pi.
revpimodio2.io.IOList()
Klassenobjekte
Diese Klasse bietet alle IOs als Attribute an. Die Namen der Attribute werden aus der piCtory Konfiguration entnommen.
Wird in piCtory ein Eingang mit dem Namen „I_1“ konfiguriert, kann mit Python folgendermaßen auf dessen Wert zugegriffen werden:
.io.I_1.value
Auf die gleiche Weise werden Outputs verwendet, deren Werte über eine Zuweisung änderbar sind. Zum Beispiel für einen Output mit dem Namen „O_1“:
.io.O_1.value = True
Alternativ kann auch per String auf ein IO-Objekt zugegriffen werden:
.io["I_1"].value
Hinweis: Für die Namensvergabe in piCtory müssen die Pythonregeln für Namensvergaben eingehalten werden. Sollte dies nicht möglich sein, ist ein Zugriff nur über Stringangaben (.io["§chlecht'r#Name"].value
) möglich.
Alle Attributobjekte haben generell folgende Eigenschaften:
Klassenattribute
.address
Gibt die absolute Byteadresse als <class ‚int‘> im Prozessabbild zurück.
.bmk
Gibt den Text als <class ’str‘> aus Feld „Comment“ des „Value Editors“ in piCtory zurück.
.byteorder
Gibt bei allen IOs die Byteorder als <class ’str‘> zurück.
Bei Byte-orientierten IOs, wie z.B. auf virtuellen Devices oder Gateways kann die Byteorder auch gesetzt werden. Dies ist wichtig für die Umrechnung der Werte in <class ‚int‘>. Der Standard ist „little“.
Mögliche Werte: „little“ oder „big“
.defaultvalue
Gibt die, in piCtory konfigurierte, Defaultvalue des IOs zurück.
.export
Gibt den, in piCtory gesetzten, Wert des Export-Hakens zurück.
.frm
Gibt nur bei, durch.replace_io(...)
, ersetzten IOs die struct Formatierung als <class ’str‘> zurück. Bei anderen IOs existiert das Attribut nicht!
.length
Gibt die Bytelänge des IO Objekts zurück – 0 bei Bits.
.name
Gibt den Namen des IO Objekts zurück – Entspricht Namen in piCtory.
.signed
Gibt bei allen IOs zurück, ob die value-Berechnung mit Vorzeichen durchgeführt werden soll.
Bei Byte-orientierten IOs, wie z.B. auf virtuellen Devices oder Gateways kann der Wert auch gesetzt werden. Dies ist wichtig für die Umrechnung der Werte in <class ‚int‘>. Der Standard istFalse
.
Mögliche Werte:True
oderFalse
.type
Gibt den IO Typen des IO Objekts als <class ‚int‘> zurück.- 300=INP
- 301=OUT
- 302=MEM
.value
Gibt den Wert des IO Objekts zurück. Dabei ist der Typ des Rückgabewerts immer der passende.- <class ‚bool‘> Bei BIT-orientierten IOs (Digitale Ein- und Ausgänge) oder durch
.replace_io(... , "?", bit=0)
BIT-orientiert ersetze Bytes. - <class ‚int‘> Bei allen anderen inkl. durch
.replace_io(...)
ersetzten IOs
- <class ‚bool‘> Bei BIT-orientierten IOs (Digitale Ein- und Ausgänge) oder durch
Klassenfunktionen
.reg_event(func, [delay=0, edge=BOTH, as_thread=False, prefire=False])
Registriert auf diesen IO ein Event bei der Eventüberwachung. Die übergebene Funktion wird ausgeführt, wenn der IO Wert sich ändert. Mit Angabe von optionalen Parametern kann das Auslöseverhalten gesteuert werden.
HINWEIS: Die delay-Zeit muss in die .cycletime passen, ist dies nicht
der Fall, wird IMMER aufgerundet!
func
Funktion die bei Änderung aufgerufen werden soll.
Der Funktion werden derio_name
undio_value
übergeben, welche sie akzeptieren muss:def meine_funktion(ioname, iovalue):
delay=0
Verzögerung in Millisekunden zum Auslösen wenn Wert gleich bleibt.edge=revpimodio2.BOTH
Ausführen bei RISING, FALLING or BOTH Wertänderung von BIT-orientierten IOs.as_thread=False
Bei Angabe von True, wird die Funktion als EventCallback-Thread ausgeführt und kann parallel zum eigentlichen Programm laufen.
Der Funktion wird eine Instanz von EventCallback übergeben, welche sie akzeptieren muss:def meine_funktion(ecb):
!prefire=False
Wennprefire
aufTrue
gesetzt wird, wird dieses Event beim Eintritt in den.mainloop()
mit aktuellen IO-Werten ausgelöst. Ist dieedge
aufRISING
, wird das Event nur aufgerufen, wenn der IO-WertTrue
ist, beiFALLING
wenn IO-WertFalse
ist. Alle anderen edges werden immer ausgelöst.
Dieser Parameter kann zum start von Events, die miteinander verknüpft sind verwendet werden.
.reg_timerevent(func, delay, [edge=BOTH, as_thread=False])
Der Timer wird gestartet, wenn sich der IO Wert ändert, und führt die
übergebene Funktion aus – auch wenn sich der IO Wert in der
zwischenzeit geändert hat. Sollte der Timer nicht abgelaufen sein und
die Bedingung erneut zutreffen, wird der Timer NICHT auf den delay
Wert
zurückgesetzt oder ein zweites Mal gestartet. Für dieses Verhalten
kann .reg_event(..., delay=wert)
verwendet werden.
HINWEIS: Die delay-Zeit muss in die .cycletime passen, ist dies nicht
der Fall, wird IMMER aufgerundet!
func
Funktion die bei Änderung aufgerufen werden soll.
Der Funktion werden derio_name
undio_value
übergeben, welche sie akzeptieren muss:def meine_funktion(ioname, iovalue):
delay
Verzögerung in Millisekunden zum Auslösen.edge=revpimodio2.BOTH
Ausführen bei RISING, FALLING or BOTH Wertänderung von BIT-orientierten IOs.as_thread=False
Bei Angabe von True, wird die Funktion als EventCallback-Thread ausgeführt und kann parallel zum eigentlichen Programm laufen.
Der Funktion wird eine Instanz von EventCallback übergeben, welche sie akzeptieren muss:def meine_funktion(ecb):
!
.replace_io(name, frm, [**kwargs])
Registriert an der Stelle von diesem IO einen neuen IO mit angegebener Formatierung. Für die Formatvorgabe, mit Parameter frm
, werden die Zeichen der struct()-Funktion von Python3 verwendet.
HINWEIS: Nur verfügbar bei IOs auf Gateway- oder virtuellen Devices!
Bit-IOs registrieren: Zahlen-IOs registrieren: Rohe Byte-IOs registrieren: Setzt den Counter des Eingangs auf 0 zurück. Entfernt registrierte Events aus dem Eventhandling und ruft dessen Funktionen bei Datenänderung nicht mehr auf. Wird diese Funktion ohne Parameter aufgerufen werde ALLE registrieren Funktionen von diesem IO entfernt. Mit Angabe von Parametern kann man nur bestimmte Funktionen entfernen. Wartet an aufrufender Stelle im Pythonprogramm auf Wertänderung des IOs. Bei Wertänderung, wird das Warten mit Wenn Als Wenn der Wert Der Wert von RÜCKGABEWERT: Als Rückgabewert erhält man einen <class ‚int‘> Integer Wert. Gibt die Defaultvalue des IO immer als <class ‚bytes‘> zurück. Gibt die Defaultvalue des IO als <class ‚int‘> zurück. Gibt die Defaultvalue des IO als <class ‚int‘> zurück unter Beachtung der struct Formatvorgabe. Gibt den IO-Wert immer als <class ‚bytes‘> zurück. Gibt den IO-Wert als <class ‚int‘> zurück. Gibt den IO-Wert als <class ‚int‘> zurück unter Beachtung der struct Formatvorgabe. Setzt den IO-Wert auf übergebene value vom Typen <class ‚bytes‘> Setzt den IO-Wert auf übergebene value vom Typen <class ‚int‘> Setzt den IO-Wert auf übergebene value vom Typen <class ‚int‘> und wandelt ihn unter Beachtung der struct Formatvorgabe.
Wird als Formatvorlage „?“ (BIT) verwendet, muss als Parameter bit
die Bitadresse angegeben werden, an welcher stelle im vorhandenen Byte oder Word der neue IO liegen soll. Es können auf einem IO mit Länge von 1 Byte 8 neue BIT-orientierte IOs erstellt werden – Mit 2 Byte Länge 16 usw.
Wird als Formatvorlage ein Zahlenwert verwendet, der mehr Speicher benötigt als der IO zur Verfügung hat, werden auch nachfolgende IOs ersetzt. Benutzt man für frm
z.B. „Q“ – unsigned 8 Byte – werden der IO selbst, plus sieben nachfolgende IOs ersetzt (wenn IOs je ein Byte lang sind). Durch Angabe von „q“ wird der Wert mit Vorzeichen behandelt und dementsprechend ausgegeben.
Möchte man den reinen Bytewert von aneinander hängenden IOs erhalten (vor allem bei Gateways viel genutzt), verwendet man die Formatvorlage „s“. Vor dem „s“ muss eine Zahl stehen, die angibt wie viele Bytes für den neuen IO verwendet werden sollen. Benutzt man für frm
z.B. „16s“ werden der IO selbst, plus 15 nachfolgende IOs ersetzt (wenn IOs je ein Byte lang sind).
name
Name des neuen IO, welcher auch als Attribut in .io
hinzugefügt wird.frm
struct() Formatierung (1 Zeichen außer bei s) – Nach Python-Vorgaben.kwargs
Folgende optionale Keyword-Parameter können übergeben werden:
bmk
interne Bezeichnung für IO.bit
Registriert IO als <class ‚bool‘> am angegebenen Bit im Byte/Word.byteorder
Byteorder für den neuen IO – Bei Nichtangabe wird die Byteorder des zu ersetzenden IOs übernommen.defaultvalue
Standardwert für neuen IO – Bei Nichtangabe wird die Defaultvalue aus ersetzten IOs berechnet.event
Funktion für Eventhandling registrieren.delay
Verzögerung in Millisekunden zum Auslösen wenn Wert gleich bleibt.edge
Event-Ausführen bei RISING, FALLING or BOTH Wertänderung.as_thread
Führt die event-Funktion als RevPiCallback-Thread aus.
.reset()
Hinweis: Nur verfügbar bei Counter-Eingängen der DI und DIO Module!
.unreg_event([func=None, edge=None])
func
Nur Events mit angegebener Funktion löschenedge
Nur Events mit angegebener Funktion und angegebener edge
löschen
.wait([edge=BOTH, exitevent=None, okvalue=None, timeout=0])
Die Wertänderung wird immer überprüft, wenn das AutoRefresh neue Daten liefert – also RevPiModIO mit Parameter autorefresh=True
instanziiert oder für das Device, auf dem sich der IO befindet, .autorefresh()
aufgerufen wurde.0
als Rückgabewert beendet.edge
mit RISING oder FALLING angegeben wird, muss diese Flanke ausgelöst werden. Sollte der IO-Wert beim Aufruf True
sein mit Flanke RISING, wird das Warten erst bei Änderung von False
auf True
mit True
beendet.exitevent
kann ein <class ‚threading.Event‘>-Objekt übergeben werden, welches das Warten bei is_set() sofort mit 1
als Rückgabewert beendet.okvalue
an dem Input für das Warten anliegt, wird das Warten sofort mit -1
als Rückgabewert beendet.timeout
bricht beim Erreichen das Warten sofort mit 2
als Rückgabewert ab. (Das Timeout wird über die Zykluszeit der autorefresh Funktion berechnet, entspricht also nicht exakt den angegeben Millisekunden! Es wird immer nach oben gerundet!)
edge=revpimodio2.BOTH
Flanke RISING, FALLING, BOTH die eintreten muss.exitevent=None
<class ‚thrading.Event‘> für vorzeitiges Beenden.okvalue=None
IO-Wert, bei dem das Warten sofort beendet wird.timeout=0
Zeit in Millisekunden, nach der abgebrochen wird. Bei 0 wird Timeout nicht beachtet.
okvalue
stimmte mit IO-Wert überein
exitevent
wurde gesetzttimeout
abgelaufenRevPiModIO.exit()
wurde aufgerufen
.get_defaultvalue()
.get_intdefaultvalue()
Hinweis: Nur bei IO-Typen der Klasse <class ‚revpimodio.io.IntIO‘> verfügbar.
.get_structdefaultvalue()
Hinweis: Nur bei IO-Typen der Klasse <class ‚revpimodio.io.StructIO‘> verfügbar.
.get_value()
.get_intvalue()
Hinweis: Nur bei IO-Typen der Klasse <class ‚revpimodio.io.IntIO‘> verfügbar.
.get_structvalue()
Hinweis: Nur bei IO-Typen der Klasse <class ‚revpimodio.io.StructIO‘> verfügbar.
.set_value(value)
.set_intvalue(value)
Hinweis: Nur bei IO-Typen der Klasse <class ‚revpimodio.io.IntIO‘> verfügbar.
.set_structvalue(value)
Hinweis: Nur bei IO-Typen der Klasse <class ‚revpimodio.io.StructIO‘> verfügbar.