# Allgemein, Technik

Raspberry PI mit Codesys zum OPC UA Server

Allgemein

Bei der Suche von Schnittstellen zur Codesys RT stößt man meist über Modbus. Leider ist dies nicht immer einfach bei Kopplungen zu Fremdsystemen. Zum Glück haben sich viele Hersteller auf den Standart: OPC UA geeinigt. Der Plattformübergreifend mit den meisten aktuellen Systemen harmoniert. Aber auch für Programmierer finden sich hier eine Vielzahl an Möglichkeiten um auf einen OPC UA Server zuzugreifen.

Als Voraussetzung von deiner “kurz”-Anleitung nehme ich, das der Umgang mit Codesys beherscht wird. Ansonsten evtl. einmal in diesen oder diesen Beitrag schauen.

Im Internet sind viele Beiträge die diesen Vorgang erleutern. Immer wieder ließt man von Versionsständen die nicht miteinander harmonieren. In diesem Beispeil wurde die Codesys Control für Raspberry Pi in Version 3.5.9.40 genutzt. Als Codesys Entwicklungsumgebung ist Version 3.5.7.0 im Spiel. Hierbei bin ich auf keine Probleme gestoßen. Als ebenfalls oft im Forum beschrieben wird ist ein nicht aktiver OPC Handler. Dies könne darunter liegen, dass die Codesys RT auf dem Raspberry schon aktiv ist bevor der Netzwerkadapter (eth0) aktiv wurde. Hierfür hilft ein kurzes:


sudo service codesyscontrol stop
sudo service codesyscontrol start

in der Konsole des Raspberry Pi’s. Dies könnte man evtl. auch schöner durch ein “sleep” beim starten des Dienstes lösen.

Codesys Control – Projekt vorbereiten

Als erstes benötigen wir in unserem Codesys Projekt eine neue Symboltabelle. Dafür fügen wir das neuen Objekt in unserer Application hinzu.

symbolkonfig

Hier öffenet sich nun ein neues Fenster. Wichtig ist hier: Die Funktionalität für OPC UA muss angewählt sein.
symbolkonfig2

Hier müssen nun anschließend das Mapping vorgenommen werden: Sprich: Vorhandene Datenpunkte aus Variabelenlisten werden ausgewählt und diesem werden dann dem OPC zur Verfügung gestellt. Wichtig ist hier die Zugriffsberechtigung! Als Standard wird hier Lesen-/Schreiben (RW) gesetzt. Anschließend müssen wir die Konfiguration noch übersetzten.

symbolkonfig3

Problem mit der CODESYSControl.cfg

In meinem Raspberry Pi hatte sich beim Hochladen der Applikation leider nicht der OPC Dienst von selbst gestartet. Grund war der fehlende Eintrag in der CODESYSControl.cfg. Diese findet man im Verzeichnis /etc/. Wer Probleme mit einer nicht funktionierenden Verbindung hat sollte diesen Eintrag mal überprüfen. Ich habe meine Konfiguration um folgende Punkte erweitern müssen.


[CmpOPCUA]
NetworkAdapter=eth0
NetworkPort=4841

In Nano sieht das dann so aus:

symbolkonfig4

Der Test

Auf meinem Android Handy habe ich zum Test nun den kostenlosen OPC UA Client der Firma Prosys installiert. Diesen findet man im Google Play hier.

Als erstes erscheint nach dem öffnen der Verbindungsverwalter. Hier erstellen wir eine neue Verbindung zu unserem Raspberry Pi Codesys RT. In meinem Fall ist es die “opc.tcp://192.168.178.91:4841“.

screenshot4

Jetzt nur noch Verbinden müssen wir uns noch, per “Browse” durch die Applikation klicken. Aber unter “Objects/DeviceSet/CODESYS Control for Raspberry Pi SL/Resources/Application/Glob_Var/” finden wir dann die angelegten Variablen. Diese kann ich dann per “+” in den “Monitor” abonnieren. Hier kann ich dann auch zum Test die Werte schreiben. Hierfür einen klick auf den Schreibstift und die Maske öffnet sich.

screenshot5

Hier trage ich nun einen belieben Wert ein und vergleiche ihn mit der Codesys RT und siehe da: Der Wert wurde übernommen und steht nun auf der Steuerung zur Verfügung.

symbolkonfig5

Ausblick

Ich werde die nächste Zeit mal eine Kopplung per Python vornehmen. Das Projekt FreeOpcUa auf Github macht einen guten Eindruck: https://github.com/FreeOpcUa/python-opcua. Als Ziel wäre es ein vernünfige Datenkopplung zwischen MySQL per OPC UA an die Codesys Control auf die Beine zu stellen. Somit könnte ich meine Einstellwerte bequeme von unterwegs per Weboberfläche an die Steuerung weitergeben,