Was RevPiModIO ist: Direktzugriff auf IOs mit Python!

Moderator: RevPiModIO

Post Reply
User avatar
RevPiModIO
KUNBUS
Posts: 325
Joined: 20 Jan 2017, 08:44
Contact:

Was RevPiModIO ist: Direktzugriff auf IOs mit Python!

Post by RevPiModIO »

Den Revolution Pi mit Python programmieren - Ganz einfach mit RevPiModIO!

Aktuelle Version RevPiModIO2 2.5.10 vom 21.04.2022 - Download
Jetzt mit Netzwerkfunktionen für alle Plattformen, die Python sprechen.

Für alle Revolution Pi Modelle!

Versionslog

ALTE vorgänger Version:
RevPiModIO 1.0.3 vom 08.11.2017 - Download

----------------------------------------------------------------------------------

Wir haben es uns zur Aufgabe gemacht, den Python Entwicklern ein mächtiges Modul zur Verfügung zu stellen, mit dem der Revolution Pi programmiert werden kann. Die gesamte Kommunikation mit der Hardware wird optimiert von dem Modul abgewickelt und der Programmierer soll mit wenig Code zu seinem Ziel kommen.

Der grundsätzliche Aufbau:
Spectacle.d20335.png
Spectacle.d20335.png (5.98 KiB) Viewed 70805 times
----------------------------------------------------------------------------------

Im ersten Schritt muss natürlich, wie bei jedem Projekt, eine piCtory Konfiguration erstellt werden. Dabei sollte man für alle Ein- und Ausgänge logische Symbolische Namen festlegen, da man über diese Namen dann auf die Werte der Ein- und Ausgänge zugreifen wird!

Der Programmierer kann sich nun entscheiden, ob er gerne ein zyklisches Programm (cycleloop)
oder ein ereignisbasiertes Programm (mainloop) erstellen möchte:

Cycleloop:

Code: Select all

import revpimodio2

def zyklusprogramm(zyklustools):
    # Input direkt auf ersten Output schreiben
    rpi.io.O_1.value = rpi.io.I_1.value

# RevPiModIO instantiieren
rpi = revpimodio2.RevPiModIO(autorefresh=True)
rpi.cycleloop(zyklusprogramm)
----------------------------------------------------------------------------------

Mainloop:

Eigene Funktionen kann man als "event" an einen Input hängen, die ausgelöst werden, wenn der Input-Wert sich verändert:

Code: Select all

import revpimodio2

def myevent(ioname, iovalue):
    print("änderung", ioname, iovalue)

# RevPiModIO instantiieren
rpi = revpimodio2.RevPiModIO(autorefresh=True)
rpi.io.inputname.reg_event(myevent)
rpi.mainloop()
----------------------------------------------------------------------------------


Für alle weiteren Informationen und Dokumentationen des Moduls haben wir euch eine Webseite zur Verfügung gestellt!
Dort findet ihr auch Beispielprogramme für Steuerungen und Visualisierungen!


https://revpimodio.org


----------------------------------------------------------------------------------

Installation:

Ab Jessie in den Kunbus Paketquellen:

Code: Select all

pi@RevPi ~/ $ sudo apt-get update

# Installieren 
pi@RevPi ~/ $ sudo apt-get install python3-revpimodio2

# Updaten (alles)
pi@RevPi ~/ $ sudo apt-get dist-upgrade

Wir wünschen euch viel Erfolg!
python3-RevPiModIO - https://revpimodio.org/ || Der RevPi ist das Beste, was passieren konnte!
matt.s
Posts: 71
Joined: 06 Sep 2017, 11:46

Re: RevPiModIO - Python3 Direktzugriff auf IOs

Post by matt.s »

Hallo,

vielen Dank für deine Arbeit! Ich unternehme gerade meine ersten Gehversuche mit RevPiModIO2 und scheitere leider schon an der Instantierung. Da die Python-Welt neu für mich ist übersehe ich vielleicht einfach etwas, sieht ein Experte eventuell gleich woran es liegt?

1) RevPiModIO2 nach Anleitung oben installiert
2) Python 3 (IDLE) auf dem RevPi gestartet
3) Bibliothek importieren

Code: Select all

import revpimodio2

4) Bei der Instantierung

Code: Select all

rpi = revpimodio2.RevPiModIO(autorefresh=True)
bekomme ich folgende Fehlermeldung:

Code: Select all

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    rpi = revpimodio2.RevPiModIO(autorefresh=True)
  File "/usr/lib/python3/dist-packages/revpimodio2/modio.py", line 84, in __init__
    self._configure(self.get_jconfigrsc())
  File "/usr/lib/python3/dist-packages/revpimodio2/modio.py", line 161, in _configure
    self, device, simulator=self._simulator
  File "/usr/lib/python3/dist-packages/revpimodio2/device.py", line 134, in __init__
    dict_device.pop("inp"), INP)
  File "/usr/lib/python3/dist-packages/revpimodio2/device.py", line 236, in _buildio
    self, dict_io[key], iotype, "little", False
  File "/usr/lib/python3/dist-packages/revpimodio2/io.py", line 309, in __init__
    else bool(int(valuelist[1]))
ValueError: invalid literal for int() with base 10: 'null'
Auch wenn ich noch die Definition eines mainloop aus dem Beispiel übernehme bekomme ich folgende Fehlermeldung:

Code: Select all

Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    rpi = revpimodio2.RevPiModIO(autorefresh=True)
  File "/usr/lib/python3/dist-packages/revpimodio2/modio.py", line 84, in __init__
    self._configure(self.get_jconfigrsc())
  File "/usr/lib/python3/dist-packages/revpimodio2/modio.py", line 161, in _configure
    self, device, simulator=self._simulator
  File "/usr/lib/python3/dist-packages/revpimodio2/device.py", line 134, in __init__
    dict_device.pop("inp"), INP)
  File "/usr/lib/python3/dist-packages/revpimodio2/device.py", line 236, in _buildio
    self, dict_io[key], iotype, "little", False
  File "/usr/lib/python3/dist-packages/revpimodio2/io.py", line 309, in __init__
    else bool(int(valuelist[1]))
ValueError: invalid literal for int() with base 10: 'null'
Schönen Gruß,
matt.s
User avatar
RevPiModIO
KUNBUS
Posts: 325
Joined: 20 Jan 2017, 08:44
Contact:

Re: RevPiModIO - Python3 Direktzugriff auf IOs

Post by RevPiModIO »

Hi Matt!

Der Fehler liegt auf jeden Fall an der piCtory-Konfiguraitonsdatei.
Er tritt an der Stelle auf, an der das Modul den Wert für die Default-Value eines IO einlesen will. Mich wundert, dass im JSON (config.rsc) 'null' und nicht null steht, was eigentlich für NULL, None also NICHTS der Fall sein müsste. Mit '' ist es ein String...
Wie wurde die piCtory Konfiguration erzeugt? Direkt über piCtory (der Webseite im RevPi)??? Wenn ja, welche Version und welche Module. Könntest du mir die /etc/revpi/config.rsc evtl. zukommen lassen?

Unabhängig davon habe ich das Problem aufgegriffen und verarbeite die Werte jetzt etwas anders. Die neue Version ist komplett getestet mit Code-Coverage und steht zum Download bereit.
Würdest du die neue Version in deinem Fall einmal testen, bevor Kunbus sie in Ihre Repositories aufnimmt?

Einfach am RevPi im Terminal:

Code: Select all

pi@RevPi0000:~ $ wget http://revpimodio.org/dnl/python3-revpimodio2_2.1.5-1_all.deb
pi@RevPi0000:~ $ sudo dpkg -i python3-revpimodio2_2.1.5-1_all.deb 
Und dann einfach wieder mit Python 3 (IDLE) auf dem RevPi deine Zeilen eingeben.

Gruß, Sven
python3-RevPiModIO - https://revpimodio.org/ || Der RevPi ist das Beste, was passieren konnte!
matt.s
Posts: 71
Joined: 06 Sep 2017, 11:46

Re: RevPiModIO - Python3 Direktzugriff auf IOs

Post by matt.s »

Hallo Sven,

die guten Nachrichteb vorab: Mit einem frisch installiertem Image funktioniert die Instanziierung des RevPiModIO2 mit der Software aus dem Kunbus Repository. Mit dem von dir oben verlinkten RevPiModIO 2.1.5-1 funktioniert es jetzt auch auf dem alten System. Soll ich dir trotzdem die /var/www/pictory/projects/config.rsc von beiden Systemen zukommen lassen? Dann könntest du mir bitte deine E-Mailadresse per PN schicken?

Die Pictory-Datei von dem nicht-funktionierendem System wurd mit Pictory 1.3.4 erzeugt und verwendet nur ein DIO-Modul. Früher hing an diesem System ein DIO-Modul und ein Feldbusmodul parallel rechts vom Core, das wurde geändert auf ein DIO links vom Core. Aber ich würde vermuten Pictory erzeugt die config.rsc komplett neu wenn man etwas an der Konfiguration der Module ändert und hinterlässt keine Dateileichen?

Im Unterschied zu dem fabrikneuen System hat das ältere System einige Variablen zum Export markiert weil ich auf diesem System auch logi.RTS und PROCON-WEB getestet habe. Könnte es etwas damit zu tun haben?
Schönen Gruß,
matt.s
User avatar
RevPiModIO
KUNBUS
Posts: 325
Joined: 20 Jan 2017, 08:44
Contact:

Re: RevPiModIO - Python3 Direktzugriff auf IOs

Post by RevPiModIO »

Version RevPiModIO2 2.2.1 vom 01.08.2018 - Download

Unterstützt Revolution Pi Core und Connect!

Für den Connect gibt es eine automatische Triggerfunktion des Hardware-Watchdogs!

Versionslog

(WHEEZY, JESSIE und STRETCH kompatibel)
python3-RevPiModIO - https://revpimodio.org/ || Der RevPi ist das Beste, was passieren konnte!
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41

Re: RevPiModIO - Python3 Direktzugriff auf IOs

Post by volker »

Super Sven, dass Du so schnell bereits die Connect Features in die Bibliothek aufgenommen hast.

Bitte lest aber auch mal hier:
viewtopic.php?f=3&t=862
Bei der Verwendung des automatischen Resets vom watchdog ("triggern" tut man den WD nicht, das macht er selber wenn er zuschlägt), bitte die Anmerkungen in dem o.g. Beitrag lesen. Das macht nämlich eigentlich nur für Debug- oder Entwicklungsphase Sinn - in einem produktiven System würde so ein automatisches Reset den Sinn eines watchdog ab absurdum führen.
Unser RevPi Motto: Don't just claim it - make it!
User avatar
RevPiModIO
KUNBUS
Posts: 325
Joined: 20 Jan 2017, 08:44
Contact:

Re: RevPiModIO - Python3 Direktzugriff auf IOs

Post by RevPiModIO »

Hi Volker!

Danke für den Hinweis! Da war ich wohl zu "schnell" und habe der Funktion einen schlechten Namen gegeben. Ich "trigger" den Watchdog natürlich nicht sondern "toggle" ihn. Darum habe ich die Funktion jetzt umbenannt und ein neues Update nachgeschoben.

Aus .core.watchdogtrigger ist nun .core.wdautotoggle geworden!!! Ich denke das macht DEUTLICH mehr Sinn!

PS: Die Funktion sollte natürlich nicht der alleinige Bestandteil des Python-Programms sein. Sie sollte nur verwendet werden, wenn das Python-Programm die eigentliche Arbeit (Steuern, Daten erfassen, usw.) macht. Sollte das Programm abstürzen, würde der WD nicht mehr getoggled werden und der Connect einen Restart machen. Mal sehen ob man diese Funktion noch mit zusätzlichen Systembedingungen verknüpft, dann hätte man noch mehr Sicherheit.
Wenn man sich selber um Auswertefunktionen kümmert, sollte man den Watchdog selber triggern. Dafür bietet RevPiModIO .core.wd.value = True / False an.

Also bitte eure Repositories mit der Version 2.2.2 aktualisieren, bevor die 2.2.1 in den Umlauf kommt!
https://revpimodio.org/quellen/quellen2/

Gruß, Sven
python3-RevPiModIO - https://revpimodio.org/ || Der RevPi ist das Beste, was passieren konnte!
User avatar
RevPiModIO
KUNBUS
Posts: 325
Joined: 20 Jan 2017, 08:44
Contact:

Re: Was RevPiModIO ist: Direktzugriff auf IOs mit Python!

Post by RevPiModIO »

Version 2.4.5 veröffentlicht / released
python3-RevPiModIO - https://revpimodio.org/ || Der RevPi ist das Beste, was passieren konnte!
User avatar
RevPiModIO
KUNBUS
Posts: 325
Joined: 20 Jan 2017, 08:44
Contact:

Re: Was RevPiModIO ist: Direktzugriff auf IOs mit Python!

Post by RevPiModIO »

Version 2.5.7

Wir haben einige wichtige Aktualisierungen seit RevPiModIO 2.5.3!
Update-Log

Info: Momentan hat die Kunbus sehr alte Versionen unserer Software in deren Repositories! Das Update muss also manuell oder über unser eigenes Repository eingespielt werden:
https://revpimodio.org/unser-repository/
python3-RevPiModIO - https://revpimodio.org/ || Der RevPi ist das Beste, was passieren konnte!
Post Reply