Dieses Beispiel führt euch in die zyklische Programmierung mit RevPiModIO und dem cycleloop(...)
ein! Das Programm verwendet auch die Funktion handlesignalend(...)
um das „Programmende“ Signal zu verarbeiten und sich sauber zu beenden.
# -*- coding: utf-8 -*- import revpimodio2 def zyklusprogramm(zyklustools): """Diese Funktion wird bei jedem IO Zyklus automatisch ausgefuehrt.""" # Wert des ersten Inputs auf ersten Output schreiben rpi.io.O_1.value = rpi.io.I_1.value # Wenn zweiter Input True ist, immer Ausschaltverzögerungstimer starten if rpi.io.I_2.value: # Ausschaltverzögerung für 20 Zyklen einrichten zyklustools.set_tofc("t_20", 20) # Wert des Ausschaltverzögerungstimers in zweiten Ausgang schreiben rpi.io.O_2.value = zyklustools.get_tofc("t_20") # A2 im 10 fachen Zyklustakt blinken lassen if zyklustools.flag10c: rpi.core.A2 = revpimodio2.GREEN else: rpi.core.A2 = revpimodio2.OFF def endeprogramm(): """Diese Funktion erledigt Aufraumarbeiten vor Programmende.""" # LED A1 am Core Abschalten rpi.core.A1 = revpimodio2.OFF # RevPiModIO mit automatischer Prozessabbildsynchonisierung instanziieren, # dabei wird die Konfiguration automatisch aus piCtory gelesen. rpi = revpimodio2.RevPiModIO(autorefresh=True) # Signale für das Programmende von RevPiModIO verwalten lassen. Aufräumfunktion # übergeben, welche bei Programmende (Strg+C / SIGTERM) ausgeführt wird. rpi.handlesignalend(endeprogramm) # LED A1 am Core grün leuchten lassen rpi.core.A1 = revpimodio2.GREEN # Zyklische Verarbeitung der Funktion "zyklusprogramm" starten. print("Gehe jetzt in Cycleloop") rpi.cycleloop(zyklusprogramm) print("Habe Cycleloop verlassen")
Die Standardzykluszeit beträgt 50 Millisekunden. Sie kann über rpi.cycletime = milliseconds
angepasst werden. Sollten die Aktualisierung der IOs inkl. Ausführung der Zyklusfunktion diese Zeit überschreiten, werden Warnungen ausgegeben.
Unsere piCtory Konfiguration für dieses Beispiel beinhaltet einen RevolutionPi Core und auf der rechten Seite ein DIO Modul, welches mit Inputs: 34 / Outputs: 32 eingestellt ist. Die Namen „I_1“, „I_2“, „O_1“, „O_2“ müssen im „Value Editor“ angegeben werden.