RevPiModIO - Python3 Direktzugriff auf IOs
Posted: 20 Jan 2017, 09:30
Veröffentlicht:
Aktuelle Version RevPiModIO2 2.5.9 vom 03.11.2021 - Download
Jetzt mit Netzwerkfunktionen für alle Plattformen, die Python sprechen.
Jetzt auch für den Connect!
Versionslog
(WHEEZY, JESSIE, STRETCH und BUSTER kompatibel)
Fragen und Antworten HIER im Forum!
Ab Jessie in den Kunbus Paketquellen:
Über das Netzwerk auf das Prozessabbild zugreifen - https://revpimodio.org/revpipyplc/
Jetzt auch Events verwenden ohne das Programm im mainloop zu blockieren: Aufruf von mainloop(blocking=False)
Jetzt auch virtuelle Devices mit Daten füttern und in logiCAD drauf zugreifen
----------------------------------------------------------------------------------
Ich schreibe momentan ein Python3 Modul, über das es möglich ist die Ein und Ausgänge direkt anzusprechen. Außerdem kann die automatische Prozessbildaktualisierung aktiviert werden um Zyklisch die Daten zu erfassen.
Dabei wird die config.rsc Datei beim instantiieren eingelesen. Die darin stehenden "devicesnames" und "ionames" werden dann in Python direkt ansprechbar gemacht.
mymodule.io.ioname.value
Für eure Gateways kann man eigene Inputs und Outputs definieren, die über mehrere Bytes lang sind und einen bestimmten Datentypen abbilden.
In diesem Beispiel wird auf dem Device "devicename" eine 8 Byte lange int() Value registriert, die bei Byte "Input_5" beginnt.
Nachfolgende "Input Bytes" (Input_6, Input_7, ...) werden automatisch aus der Namensliste entfernt, da sie ja "überschrieben" werden.
Auch Bits können auf ein "Input Byte" registriert werden und sind direkt über den neuen Namen ansprechbar:
Man hat zwei Möglichkeiten für die Prozessbildaktualisierung:
Cycleloop:
Mainloop:
Eigene Prozeduren kann man als "event" an einen Input hängen, die ausgelöst werden, wenn der Input sich verändert:
Ab dem "mainloop" wartet das Programm auf Events (analog zu TkInter, nur das hier Inputs die Events auslösen und nicht der Benutzer, der auf einen Button klickt). Wenn sich der Wert von "inputname" ändert wird die Prozedur "myevent" ausgeführt.
Gruß, Sven Sager (naruxde)
Aktuelle Version RevPiModIO2 2.5.9 vom 03.11.2021 - Download
Jetzt mit Netzwerkfunktionen für alle Plattformen, die Python sprechen.
Jetzt auch für den Connect!
Versionslog
(WHEEZY, JESSIE, STRETCH und BUSTER kompatibel)
Fragen und Antworten HIER im Forum!
Ab Jessie in den Kunbus Paketquellen:
Code: Select all
pi@RevPi ~/ $ sudo apt-get update
# Installieren - Version 2
pi@RevPi ~/ $ sudo apt-get install python3-revpimodio2
# Updaten (alles)
pi@RevPi ~/ $ sudo apt-get dist-upgrade
Über das Netzwerk auf das Prozessabbild zugreifen - https://revpimodio.org/revpipyplc/
Jetzt auch Events verwenden ohne das Programm im mainloop zu blockieren: Aufruf von mainloop(blocking=False)
Jetzt auch virtuelle Devices mit Daten füttern und in logiCAD drauf zugreifen
----------------------------------------------------------------------------------
Ich schreibe momentan ein Python3 Modul, über das es möglich ist die Ein und Ausgänge direkt anzusprechen. Außerdem kann die automatische Prozessbildaktualisierung aktiviert werden um Zyklisch die Daten zu erfassen.
Dabei wird die config.rsc Datei beim instantiieren eingelesen. Die darin stehenden "devicesnames" und "ionames" werden dann in Python direkt ansprechbar gemacht.
mymodule.io.ioname.value
Für eure Gateways kann man eigene Inputs und Outputs definieren, die über mehrere Bytes lang sind und einen bestimmten Datentypen abbilden.
In diesem Beispiel wird auf dem Device "devicename" eine 8 Byte lange int() Value registriert, die bei Byte "Input_5" beginnt.
Code: Select all
mymodule.io.Input_5.replace_io("timestamp", "Q")
Nachfolgende "Input Bytes" (Input_6, Input_7, ...) werden automatisch aus der Namensliste entfernt, da sie ja "überschrieben" werden.
Auch Bits können auf ein "Input Byte" registriert werden und sind direkt über den neuen Namen ansprechbar:
Code: Select all
mymodule.io.Input_4.replace_io("statusbit", "?", bit=1)
Man hat zwei Möglichkeiten für die Prozessbildaktualisierung:
Cycleloop:
Code: Select all
def zyklusprogramm(zyklustools):
# Input direkt auf ersten Output schreiben
mymodule.io.O_1.value = mymodule.io.I_1.value
# Zyklus starten
mymodule.cycleloop(zyklusprogramm)
Mainloop:
Eigene Prozeduren kann man als "event" an einen Input hängen, die ausgelöst werden, wenn der Input sich verändert:
Code: Select all
def myevent(ioname, iovalue):
print("änderung", ioname, iovalue)
# Event erstellen und mainloop starten
mymodule.io.inputname.reg_event(myevent)
mymodule.mainloop()
Ab dem "mainloop" wartet das Programm auf Events (analog zu TkInter, nur das hier Inputs die Events auslösen und nicht der Benutzer, der auf einen Button klickt). Wenn sich der Wert von "inputname" ändert wird die Prozedur "myevent" ausgeführt.
Gruß, Sven Sager (naruxde)