Diese Klasse beherbergt alle Devices, die am RevPi Core angeschlossen sind (inkl. ihm selber). Diese werden als RevPiDevice-Objekte oder davon abgeleitete, abgebildet.
class RevPiDevicelist(procimg, list_devices, **kwargs)
procimg
Pfad zum Prozessabbildlist_devices
Device Liste aus der piCtory Konfigurationsyncoutputs
Wenn True werden die Outputs vom Prozessabbild synchronisiertkwargs
Folgende optionale Keyword-Parameter können übergeben werden:auto_refresh
Wenn True, alle Devices zum auto_refresh hinzufügenmonitoring
In- und Outputs werden gelesen, niemals geschriebensimulator
Läd das Modul als Simulator und vertauscht IOssyncoutputs
Wenn True, werden Output bei Instanziierung geladen
Alle Werte werden von der RevPiModIO-Klasse übergeben.
Folgende Attribute werden bereitgestellt:
core
- Stellt das RevPiCore() Device für den direkten Zugriff zur Verfügung.
length
- Enthält die Bytelänge aller Devices
Folgende Funktionen werden bereitgestellt:
auto_refresh(device, [remove=False])
device
RevPiDevice-Objekt, welches zur automatischen Prozessbildaktualisierung hinzugefügt werden soll. HINWEIS: Hier kann auch der Name als str() oder die Position als int() übergeben, die Funktion sucht sich dann selber das passende RevPiDevice-Objektremove
wenn True, wird das angegebene Device aus der automatischen Prozessbildaktualisierung entfernt. Dieser Parameter ist mit False belegt, und muss beim Hinzufügen nicht angegeben werden.
cycleloop(func, [cycletime=50])
Der aktuelle Programmthread wird hier bis Aufruf von RevPiDevicelist.exit() „gefangen“. Er führt nach jeder Aktualisierung des Prozessabbilds die übergebene Funktion „func“ aus und arbeitet sie ab. Wahrend der Ausführung der Funktion wird das Prozessabbild nicht weiter aktualisiert. Die Inputs behalten bis zum Ende den aktuellen Wert. Gesetzte Outputs werden nach Ende des Funktionsdurchlaufs in das Prozessabbild geschrieben.
Verlassen wird der Cycleloop, wenn die aufgerufene Funktion einen Rückgabewert nicht gleich None
liefert, oder durch Aufruf von revpimodio.exit()
.
HINWEIS: Die Aktualisierungszeit und die Laufzeit der Funktion dürfen die eingestellte auto_refresh Zeit, bzw. übergebene cycletime
nicht überschreiten!
Über den Parameter cycletime
kann die Aktualisierungsrate für das Prozessabbild gesetzt werden (selbe Funktion wie set_refreshtime(milliseconds)
).
func
Funktion, die zyklisch ausgeführt werden sollcycletime
Feste Zykluszeit in Millisekunden (Stnadard 50 Millisekunden)
exit([full=True])
Beendet den mainloop() und damit die Eventüberwachung.
full
Wenn True, werden auch alle Devices aus dem auto_refresh() entfernt. Dadurch kann nach dem Aufruf von exit() wieder mit read-/write-/updateprocimg(dev)-Funktionen gearbeitet und das Hauptprogramm sauber beendet werden.
get_devbyname(name)
Gibt das RevPiDevice-Objekt mit dem angegebenen Namen zurück.
get_devbyposition(position)
Gibt das RevPiDevice-Objekt an angegebener piCtory-Position zurück.
get_refreshtime()
Gibt die Aktualisierungsrate der automatischen Prozessbildaktualisierung in Millisekunden zurück.
mainloop([freeze=False, blocking=True])
Geht mit dem Programm-Thread in den mainloop() und wartet auf Auslösung von Events, welche über RevPiDevice.reg_event registriert wurden.
freeze
wenn True wird die Prozessabbildaktualisierung angehalten, bis alle Eventfunktionen durchlaufen wurden. Sollten in diesen Funktionen Ausgänge gesetzt werden, werden diese erst nach Abarbeitung in das Prozessbild geschrieben.blocking
wenn der Parameter „blocking“ mit False angegeben wird, aktiviert dies die Eventüberwachung und blockiert das Programm NICHT an der Stelle des Aufrufs. Eignet sich gut für die GUI Programmierung, wenn Events vom RevPi benötigt werden, aber das Programm weiter ausgeführt werden soll.
readprocimg([force=False, device=None])
Ließt für alle Devices die aktuellen Daten der **INPUTS** aus dem Prozessabbild in deren lokalen Puffer. Dies gilt nur für devices, bei denen RevPiDevice.autoupdate auf True steht (dies ist bei der Instanziierung der Standardwert)
force
wenn dieser Wert True ist wird der Puffer auch für Devices aktualisiert bei denen das autoupdate auf False steht.device
Hier kann optional ein einzelnes Device oder eine Deviceliste angeben werden, für das das Prozessabbild gelesen werden soll.
device="dio01" / device=32
device=["dio01", "dio02"] / device=[32, 33]
Wird nur auf Devices angewandt, die NICHT im auto_refresh() registriert sind!
set_refreshtime(millisecond)
millisecond
setzt die Aktualisierungsrate des Prozessabbildes auf angegebene Millisekunden.
Hier muss ein Wert zwischen 10 und 2000 angegeben werden. Der Standardwert beträgt 50 Millisekunden
setdefaultvalues([force=False, device=None])
Setzt für alle Devices die Standardwerte aus dem Value Editor von piCtory. Dies gilt nur für devices, bei denen RevPiDevice.autoupdate auf True steht (dies ist bei der Instanziierung der Standardwert)
force
wenn dieser Wert True ist wird der Puffer auch für Devices aktualisiert bei denen das autoupdate auf False steht.device
Hier kann optional ein einzelnes Device oder eine Deviceliste angeben werden, für das das die Default Werte gesetzt werden sollen.
device="dio01" / device=32
device=["dio01", "dio02"] / device=[32, 33]
Wird nur auf Devices angewandt, die NICHT im auto_refresh() registriert sind!
syncoutputs([force=False, device=None])
Ließt für alle Devices die aktuellen Daten der OUTPUTS aus dem Prozessabbild in deren lokalen Puffer. Dies gilt nur für devices, bei denen RevPiDevice.autoupdate auf True steht (dies ist bei der Instanziierung der Standardwert)
force
wenn dieser Wert True ist wird der Puffer auch für Devices aktualisiert bei denen das autoupdate auf False steht.device
Hier kann optional ein einzelnes Device oder eine Deviceliste angeben werden, für das das die Outputs synchronisiert werden sollen.
device="dio01" / device=32
device=["dio01", "dio02"] / device=[32, 33]
Diese Funktion kann nach einem Programmabsturz nützlich sein um die aktuell gesetzten Outputs zu erfahren.
Wird nur auf Devices angewandt, die NICHT im auto_refresh() registriert sind!
updateprocimg([force=False, device=None])
Hier wird erst RevPiDeviceist.readprocimg(force, device) gefolg von RevPiDevicelist.writeprocimg(force, device) aufgerufen
Wird nur auf Devices angewandt, die NICHT im auto_refresh() registriert sind!
wait(device, io, **kwargs)
Wartet auf Wertaenderung eines IOs.
Die Wertaenderung wird immer uerberprueft, wenn fuer Devices in RevPiDevicelist.auto_refresh() neue Daten gelesen wurden.
RÜCKGABEWERT: Als Rückgabewert erhält man einen Integer Wert
- Erfolgreich gewartet: <= 0
- 0: IO hat den Wert gewechselt
- -1: okvalue stimmte mit IO-Wert überein
- Fehlerhaft gewartet: > 0
- 1: exitevent wurde gesetzt
- 2: timeout abgelaufen
- 100: RevPiModIO.devices.exit() wurde aufgerufen
Bei Wertänderung, wird das Warten mit True Rückgabewert beendet.
HINWEIS: Wenn RevPiProcimgWriter() 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 ausgelöst werden. Sollte der Wert 1 sein beim Eintritt mit Flanke RISING, wird das Warten erst bei Änderung von 0 auf 1 mit True beendet.
Als exitevent kann ein threading.Event()-Objekt übergeben werden, welches das Warten bei is_set() sofort mit einem False Rückgabewert beendet.
Wenn der Wert okvalue an dem Input für das Warten anliegt, wird das Warten sofort mit True Rückgabewert beendet.
Der Timeoutwert bricht beim Erreichen das Warten sofort mit einem False Rückgabewert ab. (Das Timeout wird über die Zykluszeit der auto_refresh Funktion berechnet, entspricht also nicht exact den angegeben Millisekunden! Es wird immer nach oben gerundet!)
device
Name, Position oder RevPiDevice-Objekt auf dem sich der Input befindetio
Name oder IO-Objekt auf dessen Wertänderung gewartet werden sollkwargs
Folgende optionale Keyword-Parameter können übergeben werden:edge
Flanke RISING, FALLING or BOTH bei der mit True beendet wirdexitevent
thrading.Event() für vorzeitiges Beenden mit Falseokvalue
IO-Wert, bei dem das Warten sofort mit True beendet wirdtimeout
Zeit in ms nach der mit False abgebrochen wird
writedefaultinputs(virtual_device)
Schreibt fuer ein virtuelles Device piCtory Default Inputwerte.
virtual_device
Ein einzelnes Device oder eine Deviceliste, für das die Werte geschrieben werden sollen.
Sollten in piCtory Defaultwerte für Inputs eines virtuellen Devices angegeben sein, werden diese nur beim Systemstart oder einem piControl Reset gesetzt. Sollte danach das Prozessabbild mit NULL überschrieben, gehen diese Werte verloren. Nutzen Sie diese Funktion zur Wiederherstellung.
writeprocimg([force=False, device=None])
Schreibt für alle Devices die aktuellen Daten der OUTPUTS aus dem lokalen Puffer in das Prozessabbild. Dies gilt nur für devices, bei denen RevPiDevice.autoupdate auf True steht (dies ist bei der Instanziierung der Standardwert)
force
wenn dieser Wert True ist wird der Puffer auch für Devices aktualisiert bei denen das autoupdate auf False steht.device
Hier kann optional ein einzelnes Device oder eine Deviceliste angeben werden, für das das Prozessabbild geschrieben werden soll.
device="dio01" / device=32
device=["dio01", "dio02"] / device=[32, 33]
Wird nur auf Devices angewandt, die NICHT im auto_refresh() registriert sind!