Moderator: miprotek

 
User avatar
miprotek
Topic Author
Posts: 144
Joined: 20 Jan 2017, 08:44
Contact:

Was RevPiModIO ist: Direktzugriff auf IOs mit Python!

16 Apr 2018, 09:37

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

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

Ab Version 2.2.0 für Core + Connect!

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 1395 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:
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:
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:
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/ || Supported by miprotek GmbH - http://www.miprotek.de || Der RevPi ist das Beste, was passieren konnte!
 
matt.s
Posts: 69
Joined: 06 Sep 2017, 11:46

Re: RevPiModIO - Python3 Direktzugriff auf IOs

16 Apr 2018, 17:38

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
import revpimodio2

4) Bei der Instantierung
rpi = revpimodio2.RevPiModIO(autorefresh=True)
bekomme ich folgende Fehlermeldung:
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:
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
miprotek
Topic Author
Posts: 144
Joined: 20 Jan 2017, 08:44
Contact:

Re: RevPiModIO - Python3 Direktzugriff auf IOs

17 Apr 2018, 13:28

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:
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/ || Supported by miprotek GmbH - http://www.miprotek.de || Der RevPi ist das Beste, was passieren konnte!
 
matt.s
Posts: 69
Joined: 06 Sep 2017, 11:46

Re: RevPiModIO - Python3 Direktzugriff auf IOs

17 Apr 2018, 14:46

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
miprotek
Topic Author
Posts: 144
Joined: 20 Jan 2017, 08:44
Contact:

Re: RevPiModIO - Python3 Direktzugriff auf IOs

06 Aug 2018, 07:24

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/ || Supported by miprotek GmbH - http://www.miprotek.de || Der RevPi ist das Beste, was passieren konnte!
 
User avatar
volker
Posts: 1047
Joined: 09 Nov 2016, 15:41

Re: RevPiModIO - Python3 Direktzugriff auf IOs

09 Aug 2018, 00:19

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
miprotek
Topic Author
Posts: 144
Joined: 20 Jan 2017, 08:44
Contact:

Re: RevPiModIO - Python3 Direktzugriff auf IOs

09 Aug 2018, 08:50

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/ || Supported by miprotek GmbH - http://www.miprotek.de || Der RevPi ist das Beste, was passieren konnte!
 
hanssimi
Posts: 1
Joined: 18 Oct 2018, 11:57

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

18 Oct 2018, 16:38

Hi,

I was wondering what the limits are for the python programs running (using RevPiModIO) on the RevPi for pure measuring purposes (sensor values from the AIO)

I want to measure a 4..20 mA signal at a e.g. freq. of 100Hz. Currently (this was before I saw the concept of cycleloop) I've tried this with a manual loop (see part of script below). But this causes regularly crashes, without knowing the issues.

Also in a next step I want to write this data to a (binary) file to transfer it to the cloud. So I was wondering if you have examples or best practises for doing exactly this:
- simply measuring AIO values (4..20mA, 0-10V, RTD, ...)
- frequencies up to 100Hz --> limit??
- writing this data to file and upload files (-> too load intensive for RevPi??)


Thanks a lot,

```
IO_LIST = ['InputValue_1','InputValue_2','InputValue_4']
perf_time_next = now + 1
number_of_samples = 60*100 # 1 minute at 100Hz
sample_count = 0

while sample_count < total_number_of_samples:
# Wait until next planned sample point start time
while perf_time_next > time.perf_counter():
# if time is short do busy-wait (cpu intensive)
pass
perf_time_next += polling_time # seconds

# ---------------------------------
# Sample
values = []
for input_name in IO_LIST:
values.append(float(revpi.io[input_name].value))

sample_count += 1
rawdata.append(values)
```

Who is online

Users browsing this forum: No registered users and 1 guest