piControl ist der zentrale Systemtreiber des Revolution Pi Systems. Der Treiber bildet die technische Grundlage für die Echtzeitkommunikation zwischen dem Linux-Betriebssystem auf dem RevPi Basismodul und den RevPi Erweiterungsmodulen.
Aufgaben von piControl:
-
stellt das zyklisch aktualisierte Prozessabbild bereit
-
liest die Werte der RevPi I/O-Module zyklisch ein
-
überträgt die Werte für die Ausgänge an die RevPi I/O-Module
-
konfiguriert die RevPi I/O-Module entsprechend der PiCtory Konfigurationsdatei
Prozessabbild #
piControl erzeugt ein fortlaufend aktualisiertes Speicherabbild aller I/O-Werte. Dieses Abbild kann von Programmen wie Node-RED oder von Python-Skripten gelesen oder geschrieben werden.
piControl stellt eine Gerätedatei /dev/piControl0 zur Verfügung, über die Anwendungen lesend und schreibend auf das Prozessabbild zugreifen können.
Konfigurationsdatei #
piControl liest die Konfiguration des Revolution Pi Systems aus der Konfigurationsdatei /etc/revpi/config.rsc, die typischerweise mit PiCtory erstellt wird, und richtet die RevPi Geräte entsprechend ein.
Treiber zurücksetzen #
Der Treiber kann über PiCtory zurückgesetzt werden. Dadurch wird die PiCtory Konfigurationsdatei neu eingelesen und alle bisher gesetzten Werte werden auf die Standardwerte zurückgesetzt.
▷ Starte PiCtory.
▷ Wähle .
Alternativ kann der Treiber über das Kommandozeilen-Tool piTest zurückgesetzt werden mit:
piTest -x
Zykluszeit #
Die Zykluszeit legt fest, wie oft alle Werte zwischen dem RevPi Basismodul und den I/O-Modulen ausgetauscht werden. Standardmäßig wird ein Zyklus so schnell wie möglich ausgeführt. Über einen Kernel-Modulparameter kann die Zeit für einen Zyklus angepasst werden.
-
Eine längere Zykluszeit reduziert die CPU-Auslastung.
-
Eine kürzere Zykluszeit erlaubt eine schnellere Reaktion auf Ein- und Ausgangswerte.
Die Metriken zur Zykluszeit können aus Dateien im Verzeichnis /sys/class/piControl/piControl0/ ausgelesen werden.
| Metrik | Bedeutung |
|---|---|
|
Zykluszeit in Mikrosekunden. Default-Wert ist 500 und wird semantisch als "so schnell wie möglich" interpretiert, daher wird |
|
Kürzeste gemessene Zykluszeit seit dem Start von piControl. Kann durch Schreiben einer 0 zurückgesetzt werden. |
|
Längste gemessene Zykluszeit seit dem Start von piControl. Kann durch Schreiben einer 0 zurückgesetzt werden. |
|
Maximal tolerierte Abweichung von der eingestellten Zykluszeit in Mikrosekunden. |
|
Anzahl der Zyklen, die länger als die Zykluszeit waren. Wird von |
|
Anzahl der Zyklen, die aufgrund einer zu niedrig eingestellten Zykluszeit und eines zu langen aktuellen Zykluses verpasst wurden. Wird von |
|
Zeit, die der letzte Zyklus zum Abschluss benötigte. Kann durch Schreiben einer 0 zurückgesetzt werden. |
Zykluszeit auslesen #
▷ Logge dich über ein Terminal am RevPi ein.
▷ Lese die Zykluszeit aus mit:
cat /sys/class/piControl/piControl0/cycle_duration
❯❯ Default-Wert 500 wird semantisch als "so schnell wie möglich" interpretiert.
Zykluszeit anpassen (dauerhaft) #
▷ Erstelle unter /etc/modprobe.d eine Datei mit der Dateiendung .conf, um einen neuen Kernel-Modulparameter zu definieren.
▷ Definiere darin eine Zykluszeit cycle_duration in Mikrosekunden.
▷ Setze den Treiber zurück mit:
piTest -x
Beispiel:
Um eine Zykluszeit von 20 Millisekunden einzustellen, erstelle die Datei /etc/modprobe.d/picontrol-cycle-duration.conf mit:
options piControl picontrol_cycle_duration=20000
Der neue Kernel-Modulparameter wird erst nach Zurücksetzen des piControl Treibers bzw. nach einem Neustart des RevPi angewendet.
Zykluszeit anpassen (kurzzeitig) #
Alternativ kann die Zykluszeit während der Laufzeit des piControl Treibers über die Datei cycle_duration verändert werden.
▷ Setze eine nicht persistente Zykluszeit von z. B. 20 Millisekunden mit:
echo "20000" | sudo tee /sys/class/piControl/piControl0/cycle_duration
Kommunikationsfehler #
Die RevPi I/O-Module tauschen über eine serielle Leitung Daten mit dem RevPi Basismodul aus. Elektrisch werden die Daten nach dem RS485-Standard übertragen. Das Statusbyte RS485ErrorCnt zählt die Anzahl der Kommunikationsfehler über diesen internen RS485-Bus.
Am Ende jedes Zykluses wird der Fehlerzähler mit den beiden Grenzwerten RS485ErrorLimit1 und RS485ErrorLimit2 verglichen. Wenn er RS485ErrorLimit1 erreicht hat, wird eine Meldung in kern.log ausgegeben.
Als Default ist RS485ErrorLimit1 auf 10 und RS485ErrorLimit2 auf 1000 gesetzt.
Siehe auch: Statusbytes RS485ErrorCnt und RS485ErrorLimit
piControl deaktivieren #
In speziellen Anwendungsfällen kann es notwendig sein, piControl zu deaktivieren.
▷ Logge dich über ein Terminal am RevPi ein.
▷ Deaktiviere piControl mit:
sudo rmmod piControl
▷ Reaktiviere piControl mit:
sudo modprobe piControl
Nach einem Neustart des RevPi wird piControl automatisch wieder gestartet.
Um piControl dauerhaft zu deaktivieren, muss die Konfiguration angepasst werden:
▷ Logge dich über ein Terminal am RevPi ein.
▷ Öffne die Datei /etc/modules-load.d/picontrol.conf in einem Editor.
▷ Kommentiere mit # die Zeile für piControl aus.
▷ Speichere und schließe die Datei.
Weitere Ressourcen #
-
Zugriff auf das Prozessabbild über piTest
-
Zugriff auf das Prozessabbild über Python-Module wie RevPiModIO2