ADSLib auf dem Raspberry Pi 4 einrichten

ADS funktioniert unter Windows ohne Probleme, sobald man einmal die TwinCat XAE Shell installiert hat. Diese startet automatisch die notwendigen Dienste. Da wir von der Visualisierung aus mit der Beckhoff Steuerung kommunizieren wollen, brauchen wir jedoch eine Möglichkeit, dass ADS bzw. die ADSLib auch auf dem Raspberry Pi läuft. Dazu wollen wir das ganze in einen Docker Container einsperren.

Zum Glück gibt es von Beckhoff eine offene Quelle, aus der man sich selbst die ADSLib bauen kann. Auf dieser Basis bauen wir einen kleinen WebService, der in einem Docker Container läuft

Voraussetzungen

Wir haben einen kleinen Webserver geschrieben, der per ADS mit der Steuerung kommuniziert. Dieser Webserver ist auch auf GitHub zu finden: https://github.com/blog-h7d/AdsConnector

Das Repo kann direkt in Docker verwendet werden.

Zusätzlich benötigen wir einen Raspberry Pi 4. Wahrscheinlich funktioniert es auch auf einem 3er Raspberry Pi, aber darauf haben wir das nicht ausprobiert. Auf dem Raspberry Pi sollte Debian Buster installiert sein (auch hier geht wahrscheinlich Bullseye, aber auch das haben wir nicht ausprobiert).

Weiterhin muss auf dem Raspberry Pi Docker installiert sein.

ADSLib kompilieren

Das größte Problem ist es, die adslib.so für ARM zur Verfügung zu haben. Dafür haben wir auf einem Raspberry Pi 4, die AdsLib gebaut und diese dann mit in das Repo gepackt. Das automatische Bauen aus dem Installieren von pyads funktioniert leider nicht auf dem Raspberry Pi.

Wie sind wir also vorgegangen:

  1. Auf dem Raspberry Pi git und make installieren
  2. Mit git die aktuelle Version der ADSLib holen (wir haben die Fork genommen, die auch in pyads eingebunden ist)
  3. Version mit make bauen
  4. adslib kopieren (und ins Repo packen für den Docker Build prozess)

Das Dockerfile anlegen

Der Webserver ist in Python implementiert und kann in einen Docker Container gesperrt werden.

Dafür kann das Docker File verwendet werden, dass sich im Repository befindet. Dieses kann direkt aus dem Repo angesprochen werden. Der Ablauf istd abei wie folgt:

  1. Bauen des Container Images (Achtung: der Main Branch muss explizit angegeben werden)
  2. Stoppen eines evtl. vorhandenen Containers
  3. Löschen eines evtl. vorhandenen Containers
  4. Config File für den ADS Service lokal außerhalb des Containers anlegen
  5. Starten des Containers
  6. evtl. Aufräumen der Images (wichtig, wenn man immer wieder das Skript laufen lässt)

Für das Starten des Docker Containers gibt es zwei Möglichkeiten. Die einfache Variante ist es, den Docker Container in das Host Netzwerk zu bringen. So erspart man sich das Port-Forwarding. Das Shell Skript dafür sieht ungefähr so aus:

docker build  https://github.com/blog-h7d/AdsConnector.git#main -t ads-service-image

docker stop ads-service

docker rm ads-service

touch /home/pi/ads_config.json

docker run --name ads-service --network host \ 
  --mount type=bind,source=/home/pi/ads-config.json,target=/code/config.json \
  -d --restart=always ads-service-image:latest

docker image prune -f

Der Nachteil von diesem Skript ist, dass der Webservice nicht auf dem Wunsch-Port 8002 laufen kann, sondern der Port durch das Dockerfile festgelegt ist. Auch ist es schöner, wenn nur die spezifischen Ports weitergeleitet werden.

WebServer konfigurieren

Auf Basis von Quart haben wir einen kleinen WebServer erstellt, der mit Hilfe von pyads eine REST Schnittstelle zur Verfügung stellt, die der Kommunikation mit der Beckhoff Steuerung dient.

Der WebServer wird automatisch im Docker Container gestartet und steht unter dem Port 8002 zur Verfügung. Ruft man die Webseite auf, so sieht man als erstes die Remote Server Configuration.

Konfiguration der Steuerung

Hier müssen die Daten der Beckhoff Steuerung eingetragen werden. Mit Absenden werden die Daten gespeichert, mit Check kann überprüft werden, ob eine Verbindung zur Steuerung möglich ist. Wichtig ist es, dass auf der Steuerung die Route zum Container eingetragen ist.

Es sollte erst weiter gemacht werden, wenn der Check erfolgreich die Version der PLC anzeigt. Ansonsten stimmt irgendwas mit der Einrichtung nicht. Die häufigsten Fehler sind dabei:

  • IP-Adresse, AMSNetID und/ oder Port stimmen nicht
  • IP-Adresse und AMSNetID haben nicht den gleichen Anfang (unter Linux gibt es Probleme, wenn die AMSNetID nicht genauso anfängt wie die Server IP)
  • Vergessen die Route auf der Steuerung einzurichten
  • Port Forwarding in den Contaienr funktioniert nicht (erstmal im Host Modus testen, und danach das Port Forwarding einrichten)

Eine Antwort auf „ADSLib auf dem Raspberry Pi 4 einrichten“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.