Skip to main content
shopping_basket Warenkorb 0
Einloggen

PYTHON – Automatisierung mit der „Monty-Sprache”: Teil 2

VdH
0

In Teil 1 habe ich den Hardware-Aufbau erläutert. Der „offene“ Charakter des RevPi-Projekts ermöglicht die Verwendung unzähliger Materialien, die aus dem Internet heruntergeladen werden können. Der Nachteil dieser Vielseitigkeit ist jedoch, dass wir all diese Komponenten von Drittanbietern installieren und einrichten müssen, was 90 % des Projekts ausmacht. In meinem Beispiel verwende ich die fantastische Bibliothek REVPIMODIO, die von meinem Freund Sven Sager geschrieben wurde und die den E/A-Zugriff sehr einfach macht, sowie seine PEVPIPYPLC für einfaches MQTT. Sie brauchen also etwas Geduld. Aber lassen Sie uns all dies Schritt für Schritt durchgehen ...

Vergessen Sie nicht, als Erstes eine Sicherungskopie Ihrer RevPi-Firmware zu erstellen, bevor Sie Änderungen vornehmen. Laden Sie dann das neueste Firmware-Update herunter und installieren Sie es (siehe diesen Beitrag). Lassen Sie mich Ihnen einen kurzen Einblick in meine Arbeitsweise mit „meinem Baby“ geben (ich habe das RevPi-Produkt und die Hardware entwickelt).

Ich verwende die Einheit gern im „Headless“-Modus: ohne HDMI-Monitor und Tastatur, nur an 12 bis 24 V DC angeschlossen und mit einem RJ45-Netzwerkkabel, das an meinen LAN-Switch angeschlossen ist. Der RevPi Core befindet sich im DHCP-Modus für die werksseitige Standardeinstellung (er erhält eine unbekannte IP vom DHCP-Server/Switch). Ich verwende daher den „Advanced IP Scanner“ (kostenloser Download hier) auf meinem PC, um die IP-Adresse zu finden.

In meinem Fall erhielt er die IP 192.168.0.241 (überprüfen Sie die MAC-Adresse oder den Namen, wenn sich mehr als ein RevPi in Ihrem lokalen Netzwerk befinden – MAC-Adresse und Nummernteil des Namens sind auf der orangefarbenen Frontplatte aufgedruckt).

Dann arbeite ich mit PuTTY (kostenloser Download hier) auf meinem Windows-PC, um SSH für den RevPi zu verwenden (um eine Verbindung mit Port 22 herzustellen). Der RevPi sollte die Linux-Anmeldeaufforderung anzeigen, da SSH standardmäßig aktiviert ist:

Verwenden Sie den Shell-Benutzernamen, der auf dem Etikett an der Seite des RevPi-Gehäuses aufgedruckt ist. Dieser ist standardmäßig „pi“ (bei Linux wird zwischen Groß- und Kleinschreibung unterschieden!). Das Kennwort ist standardmäßig individuell und wird anhand eines Hash-Algorithmus von der internen Seriennummer abgeleitet. Es ist auch auf dem Etikett aufgedruckt. Beachten Sie, dass das Tastaturlayout des RevPi standardmäßig das deutsche Layout ist. Bei Verwendung einer englischen Tastatur müssen „z“ oder „y“ umgeschaltet werden. Sobald Sie angemeldet sind, wird die Linux-Eingabeaufforderung angezeigt. Auf meinem RevPi sieht das wie folgt aus:

Beide Tools von Sven Sager, die ich zuvor erwähnt habe, können über das KUNBUS-Repository installiert werden. Dies macht die Installation ziemlich einfach: Geben Sie den Shell-Befehl „sudo apt update“ ein, um Ihre Paketliste zu aktualisieren, und geben Sie dann „sudo apt install python3-revpimodio2“ ein. Installieren Sie dann das andere Tool über „sudo apt-get install revpipyload“.

Das revpipyload-Tool ermöglicht Ihnen die Fernsteuerung Ihrer Python-„PLC“ (SPS) über Ethernet. Es verwendet XML-RPC („Extensible Markup Language Remote Procedure Call“). Daher müssen wir den XML-RPC-Server auf unserem RevPi aktivieren, indem wir die Konfiguration der App bearbeiten. Geben Sie den Shell-Befehl „sudo nano/etc/revpipyload/revpipyload.conf“ ein und bearbeiten Sie den Abschnitt [XMLRPC], wobei die Zeile „xmlrpc = 0“ mit „xmlrpc = 1“ überschrieben wird. Für alle Linux-Dummys unter Ihnen: Dies ist ein Befehlszeileneditor auf Ihrem RevPi, der sich noch nicht im GUI-Modus befindet. Ihre Maus ist also nutzlos, obwohl Sie sie innerhalb der Windows-GUI verwenden können. Sie müssen die Pfeiltasten auf der Tastatur verwenden, um zu der Zeile zu navigieren, die Sie bearbeiten möchten. Beenden Sie den Befehlszeileneditor mit „Strg X“ und speichern Sie die Änderungen an der entsprechenden Datei.

W

Wir sollten die Berechtigungen für den Zugriff auf den XML-RPC-Server auf unserem RevPi konfigurieren. In der Konfigurationsdatei „/etc/revpipyload/aclxmlrpc.conf“ müssen wir IP-Masken mit Berechtigungsebenen hinzufügen. In meinem Fall füge ich die IP-Adresse meines Windows-PCs mit der Berechtigungsebene 4 hinzu (die höchste Ebene). Ich gebe also den Shell-Befehl „sudo nano /etc/revpipyload/aclxmlrpc.conf“ ein und füge die Zeile hinzu, die in diesem Bildschirmauszug abgebildet ist:

Da wir beim Schreiben und Debuggen unserer Python-Software die GUI des RevPi benötigen, müssen wir entweder einen HDMI-Monitor, eine USB-Maus und eine USB-Tastatur oder den Remote-Desktop-Zugriff von unserem PC aus verwenden. Wie gesagt, verwende ich den RevPi gerne im „Headless“-Modus. Daher muss ich den vorinstallierten „VNC-Service“ mit dem Shell-Befehl „sudo raspi-config“ aktivieren.

Da wir beim Schreiben und Debuggen unserer Python-Software die GUI des RevPi benötigen, müssen wir entweder einen HDMI-Monitor, eine USB-Maus und eine USB-Tastatur verwenden oder den Remote-Desktop-Zugriff von unserem PC aus verwenden. Wie gesagt, verwende ich RevPi gerne im Headless-Modus. Daher muss ich den vorinstallierten „VNC-Service“ mit dem Shell-Befehl „sudo raspi-config“ aktivieren.

Ich bewege den Cursor auf die Zahl 5 „Interfacing Options“ (Schnittstellenoptionen), drücke <enter>, wähle

„P3 VNC“ aus und drücke <enter>. Auf dem nächsten Bildschirm aktiviere ich VNC, indem ich „Yes“ (Ja) wähle:

Das System antwortet mit „VNC Server is enabled“ (VNC-Server ist aktiviert). Wenn ich diese Meldung mit OK bestätigt habe, fahre ich mit „3 Boot Options“ (3 Boot-Optionen) fort, da ich möchte, dass der RevPi im GUI-Modus startet. Wenn ich das Boot-Untermenü angezeigt bekomme, wähle ich „B1 Desktop/CLI“ und dann „B4 Desktop Autologin“ aus:

Zum Beenden von „raspi-config“ muss ich „<Finish>“ (Beenden) auswählen. Wenn das System nach einem Neustart fragt, klicke ich auf „Yes“ (Ja).

Wenn das System neu gestartet wird, wird die SSH-Verbindung unterbrochen. Klicken Sie daher nach 30 Sekunden mit der rechten Maustaste oben auf das PuTTY-Fenster und wählen Sie „Restart Session“ (Sitzung neu starten).

Auf dem PC muss ich zudem einen VNC-Viewer installieren (kostenloser Download hier). Nachdem ich diese Anwendung installiert habe, starte ich sie, gebe die IP-Adresse des RevPi als Adresse ein und stelle eine Verbindung zu ihr her. Und siehe da, die RevPi-Desktop-GUI öffnet sich auf magische Weise als Fenster auf meinem PC:

Um das E/A-System (Treiber) auf meinem RevPi zu konfigurieren, kann ich das browserbasierte Werkzeug „PiCtory“ verwenden, indem ich die IP-Adresse des RevPi in Firefox öffne. Doch ich muss mich zunächst in den Web-Server des RevPi einloggen. Beachten Sie, dass der Standardbenutzer diesmal NICHT „pi“, sondern „admin“ ist. Das Kennwort ist jedoch dasselbe, solange Sie es nicht geändert haben.

Lassen Sie mich ein paar Worte über Sicherheitsprobleme verlieren:

VERWENDEN SIE DIESE EINSTELLUNGEN NICHT FÜR EIN PRODUKTIONSSYSTEM!

Das Starten der GUI ohne Anmeldung ist für ein Versuchssystem in Ordnung. Ein Produktionssystem muss durch eindeutige und sichere Kennwörter geschützt werden. Außerdem darf es entweder nicht mit dem Internet verbunden sein oder jedes LAN, das über eine schlechte Zugriffsstrategie verfügt, oder der interne Web-Server muss ausgeschaltet werden. Zunächst benötigen wir den Web-Server, um „PiCtory“ auszuführen.

Wenn ich in der PiCtory-Zeile des APPS-Tabulators auf „START“ klicke, gelange ich zu diesem Konfigurations-Tool. Weitere Informationen zur Verwendung von PiCtory finden Sie in den Tutorials auf den RevPi-Webseiten. Ich werde nur eine kurze Einführung zu meinem System geben, das aus dem RevPi Core, einem DIO- und einem AOI-Modul besteht, die genau in dieser Reihenfolge auf der DIN-Schiene montiert sind. Ich ziehe „RevPi Core V1.2“ aus der Liste „Base Devices“ (Basisgeräte) in den leeren Systemsteckplatz „0“ und lege ihn dort ab. Als Nächstes ziehe ich „RevPi DIO“ von „I/O Devices“ (E/A-Geräte) in den leeren Steckplatz rechts neben dem Core und lege es dort ab. Dann ziehe ich „RevPi AIO“ in den leeren Steckplatz rechts neben dem DIO-Modul und lege es dort ab. So sehen mein Fenster und meine DIN-Schiene aus:

Es gibt einige Konfigurationswerte, die angepasst werden müssen. Ich klicke auf das AIO-Modul, um es für den „Value Editor“ (Werteditor) auszuwählen. Ich blättere zum Abschnitt „RTD1“ und ändere die Werte wie abgebildet:

Ich verwende einen 4-adrigen PT100-Sensor, der gut kalibriert ist. Daher lasse ich die Skalierungswerte (Multiplier, Divisor, Offset) bei ihren Standardeinstellungen, um die Skalierung zu ignorieren. Die Temperaturwerte werden im Prozessabbild in °C * 10 gespeichert (Sie erhalten 254 bei 25,4 °C). Versuchen Sie nicht, den Divisor-Wert 10 zu verwenden, um direkt °C-Werte zu erhalten, da dies zu einem Verlust der 1/10 °C-Werte führt (das System verwendet 2-Byte-Ganzzahlen im Prozessabbild, was zu einer geringeren Präzision führt). Die Adresse im Prozessabbild, in dem der Wert gespeichert ist, heißt „RTDValue_1“, die ich zu „Temp10“ ändere (um den Multiplizierer 10 für °C anzugeben). Vergessen Sie nicht, das Häkchen für „Export“ zu setzen, da das Werkzeug von Sven Sager ein Häkchen für jeden Wert benötigt, der über MQTT gemeldet wird.

Nun fahren wir mit der Konfiguration des DIO-Moduls fort. Ich klicke auf das Modul, um es auszuwählen. Durch einen Rechtsklick auf „Export“ über der Auswahlspalte im Werteditor wird mir ein Kontextmenü angezeigt, in dem ich auf „Check NONE“ (KEINE auswählen) klicke, um die Auswahl aller Werte aufzuheben.

Dann verwende ich den Werteditor zum Umbenennen des Ausgangs „PWM 1“ in „PWM heater1“ sowie „PWM 2“ in “PWM heater2“ und zum Ändern des Ausgangstyps, wie im Bildschirmauszug dargestellt:

Wir benötigen die Ausgänge 1 und 2 als „Highside Switch“-Typ (Standardeinstellung) und nicht als „Push/Pull“-Typ. Letzteres würde man mit FET-Schaltern verwenden: einer zum Anschluss des Ausgangs an GND für einen Wert von 0 und einer zum Anschluss an die positive E/A-Versorgungsspannung (in der Regel 24 V) für den Wert 1. In diesem Modus würde jedoch eine Strombegrenzung von nur 100 mA pro Ausgang vorliegen, während der High-Side-Schaltermodus bis zu 500 mA von der positiven E/A-Versorgung an GND leiten kann, wenn der Ausgangswert auf 1 eingestellt ist. Die Ausgänge würden standardmäßig nur einen Binärwert von 0 oder 1 verwenden. Nur wenn Sie sie auf „PWN active“ (PWN aktiv) konfigurieren, verwenden sie die vorzeichenlosen Ganzzahlwerte „PWM_n“. Um einen Ausgang auf „PWN active“ (PWN aktiv) einzustellen, müssen wir den Wert von „OutputPWMActive“ ändern. Dieser Wert ist bitcodiert. Jedes Bit dieses Worts steht für einen Ausgang. Bit 0 steht für Ausgang 1, Bit 1 für Ausgang 2 usw. Der Wert des Konfigurationsworts wird addiert, indem alle Bitwerte 2^n addiert werden (n ist die Nummer des Ausgangs). In unserem Fall ist das ziemlich einfach: Wir benötigen Ausgang 1 (Bit 0) und Ausgang 2 (Bit 1) als PWM. Da 2^0 + 2^1 = 1+2 = 3 ergibt, schreiben wir eine 3 in das Konfigurationswort. Wir belassen „OutputPWMFrequency“ bei ihrem niedrigsten Wert von 40 Hz, da dies in der höchsten PWM-Auflösung von 1 % resultiert. Wenn Sie also 50 in die Position „PWM_heater“ des Prozessabbilds schreiben, erhalten Sie ein Tastverhältnis von 50 % an Ausgang 1. Z. B. würden Sie bei einem Wert von 12 ein Tastverhältnis von 12 % beim Einschalten und ein Tastverhältnis von 88 % beim Ausschalten erhalten, was in Einschaltimpulsen von 3 ms und Ausschaltimpulsen von 22 ms resultiert.

Ich muss diese Konfiguration speichern und sie in den Systemtreiber laden. Ich klicke also im Menü auf „File“ (Datei) und dann auf „Save as Start-Config“ (Als Startkonfiguration speichern). Dann klicke ich im Menü „Tools“ (Werkzeuge) auf „Reset Driver“ (Treiber zurücksetzen), wodurch die Konfiguration in den Treiber geladen wird und diesen aktiviert. Dadurch sollten alle LEDs an den drei Modulen grün leuchten.

Ich habe das Windows PC-Gegenstück für die RevPiPyControl-Software, ein Python-Tool namens „RevPi PLC Control“, bereits heruntergeladen und installiert (hier erhalten Sie es kostenlos). Mit diesem Tool können Python-Skripte auf dem RevPi einfach gespeichert und automatisch gestartet werden. Außerdem gewährt es mir einen schönen GUI-basierten Zugriff auf alle aktuellen Werte des Prozessabbilds. Über diese GUI können Sie sogar Werte einstellen.

Gehen Sie über „Main“ (Hauptmenü) zu „Connections...“ (Verbindungen). Geben Sie eine neue Verbindung ein, indem Sie ihr einen Namen und eine IP-Adresse zuweisen. Belassen Sie „Port“ (Anschluss) bei seinem Standardwert 55123. Klicken Sie auf „Apply“ (Übernehmen), um die neue Verbindung in die Liste auf der linken Seite aufzunehmen. Klicken Sie dann auf „Save“ (Speichern), um diese Verbindung zu speichern. Bestätigen Sie abschließend das eingeblendete Meldungsfenster, indem Sie auf „Yes“ (Ja) klicken.

Wenn Sie jetzt auf „Connect“ (Verbinden) klicken, wird Ihre neue Verbindung aufgelistet.

Wählen Sie sie aus und Ihr PC stellt sofort eine Verbindung zu Ihrem RevPi her. Ignorieren Sie die rote Meldung „FILE NOT FOUND“ (Datei nicht gefunden), bei der es nur darum geht, dass noch kein Python-SPS-Programm auf dem RevPi gespeichert ist. Klicken Sie jedoch auf „PLC watch mode“ (SPS-Überwachungsmodus), um Ihre aktuelle Modulkonfiguration aufzurufen („Devices of RevPi“ [Geräte des RevPi]). Wenn Sie z. B. auf „RevPi AIO“ klicken, werden alle Werte aus dem Prozessabbild aufgelistet:

Temp10 zeigt mir 402 an, was bedeutet, dass ich in meinem Büro bei 40,2 °C gegrillt werde (nur ein Scherz). Wenn ich auf „RevPi DIO“ klicke, erhalte ich folgende Liste:

Durch Eingabe von 25 in „PWM_heater1“ wird der physische Ausgang noch nicht geändert. Wir müssen zuerst auf „Autorefresh values“ (Werte automatisch aktualisieren) und dann auf „Write values to RevPi“ (Werte auf RevPi schreiben) klicken. Sie erhalten eine Warnmeldung. Wenn Sie wissen, was Sie tun, klicken Sie auf OK, und geben Sie 25 in „PWM_heater1“ ein, um ein Tastverhältnis von 25 % an Ausgang 1 zu erhalten. Das sehen Sie auf einem Oszilloskop:

Das war eine Menge Installation und Konfiguration. Lassen Sie uns nun eine kurze Pause einlegen, bevor wir in Teil 3 mit dem Python-Programm fortfahren. Nicht verpassen, abonnieren!

Volker de Haas started electronics and computing with a KIM1 and machine language in the 70s. Then FORTRAN, PASCAL, BASIC, C, MUMPS. Developed complex digital circuits and analogue electronics for neuroscience labs (and his MD grade). Later: database engineering, C++, C#, industrial hard- and software developer (transport, automotive, automation). Designed and constructed the open-source PLC / IPC "Revolution Pi". Now offering advanced development and exceptional exhibits.

Verwandte Inhalte

DesignSpark Electrical Logolinkedin