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)
procimgPfad zum Prozessabbildlist_devicesDevice Liste aus der piCtory KonfigurationsyncoutputsWenn True werden die Outputs vom Prozessabbild synchronisiertkwargsFolgende optionale Keyword-Parameter können übergeben werden:auto_refreshWenn True, alle Devices zum auto_refresh hinzufügenmonitoringIn- und Outputs werden gelesen, niemals geschriebensimulatorLäd das Modul als Simulator und vertauscht IOssyncoutputsWenn 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])
deviceRevPiDevice-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-Objektremovewenn 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)).
funcFunktion, die zyklisch ausgeführt werden sollcycletimeFeste Zykluszeit in Millisekunden (Stnadard 50 Millisekunden)
exit([full=True])
Beendet den mainloop() und damit die Eventüberwachung.
fullWenn 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.
freezewenn 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.blockingwenn 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)
forcewenn dieser Wert True ist wird der Puffer auch für Devices aktualisiert bei denen das autoupdate auf False steht.deviceHier 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)
millisecondsetzt 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)
forcewenn dieser Wert True ist wird der Puffer auch für Devices aktualisiert bei denen das autoupdate auf False steht.deviceHier 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)
forcewenn dieser Wert True ist wird der Puffer auch für Devices aktualisiert bei denen das autoupdate auf False steht.deviceHier 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!)
deviceName, Position oder RevPiDevice-Objekt auf dem sich der Input befindetioName oder IO-Objekt auf dessen Wertänderung gewartet werden sollkwargsFolgende optionale Keyword-Parameter können übergeben werden:edgeFlanke RISING, FALLING or BOTH bei der mit True beendet wirdexiteventthrading.Event() für vorzeitiges Beenden mit FalseokvalueIO-Wert, bei dem das Warten sofort mit True beendet wirdtimeoutZeit in ms nach der mit False abgebrochen wird
writedefaultinputs(virtual_device)
Schreibt fuer ein virtuelles Device piCtory Default Inputwerte.
virtual_deviceEin 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)
forcewenn dieser Wert True ist wird der Puffer auch für Devices aktualisiert bei denen das autoupdate auf False steht.deviceHier 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!
