RevPiDevicelist

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 Prozessabbild
  • list_devices Device Liste aus der piCtory Konfiguration
  • syncoutputs Wenn True werden die Outputs vom Prozessabbild synchronisiert
  • kwargs Folgende optionale Keyword-Parameter können übergeben werden:
    • auto_refresh Wenn True, alle Devices zum auto_refresh hinzufügen
    • monitoring In- und Outputs werden gelesen, niemals geschrieben
    • simulator Läd das Modul als Simulator und vertauscht IOs
    • syncoutputs Wenn True, werden Output bei Instantiierung 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-Objekt
  • remove 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 soll
  • cycletime 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 Instantiierung 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 Instantiierung 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 Instantiierung 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 befindet
  • io Name oder IO-Objekt auf dessen Wertänderung gewartet werden soll
  • kwargs Folgende optionale Keyword-Parameter können übergeben werden:
    • edge Flanke RISING, FALLING or BOTH bei der mit True beendet wird
    • exitevent thrading.Event() für vorzeitiges Beenden mit False
    • okvalue IO-Wert, bei dem das Warten sofort mit True beendet wird
    • timeout 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 Instantiierung 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!