OPC UA Server auf einem ARM-Mikrocontroller unter Verwendung verschiedener RTOS
Die stark zunehmende Vernetzung und Automatisierung in Produktionsanlagen und Fabriken erhöht die Anforderungen an einen sicheren und zuverlässigen Datentransport. Um diese Herausforderungen zu meistern, heisst eine mögliche Lösung OPC UA.
OPC steht für «Open Platform Communications» und ist ein Kommunikationsstandard für die Industrie 4.0 sowie IoT. Durch OPC wird der Zugriff auf Maschinen, Geräte und andere Systeme im industriellen Umfeld standardisiert und damit ein herstellerunabhängiger Datenaustausch ermöglicht. Die Erweiterung UA «Unified Architecture» bezeichnet die neuste Spezifikation des Standards. Durch die Einführung der TCP/IP Kommunikation wurde eine Plattformunabhängigkeit erreicht, die die Anwendungsmöglichkeiten nochmals erweitert.
Während dem CSA-Boostcamp 2022 haben wir uns vertieft mit diesem Kommunikationsstandard auseinandergesetzt und anhand einer einfachen Anwendung seine Möglichkeiten in Erfahrung gebracht. Dabei wurde die Open-Source-Implementierung «open62541», die ausschliesslich auf der Norm IEC 62541 basiert, auf dem STM32H735-DK Discovery-Kit getestet. Open62541 läuft auf vielen gängigen Betriebssystemen und eignet sich durch einen minimalen Speicherbedarf bestens für Embedded-Systeme mit Mikrocontrollern. In unserer Demo-Applikation wurde ein OPC UA-Server auf einem Embedded Gerät erstellt, über einen Client auf einem Windows PC die Kommunikation aufgebaut und Daten mit dem Server ausgetauscht. Zur Evaluation der Portierungsmöglichkeiten wurde der OPC UA Server auf demselben Embedded Gerät mit zwei unterschiedlichen Betriebssystemen und Netzwerkstacks umgesetzt und getestet.
OPC UA basiert auf dem Konzept, dass jede Information durch einen sogenannten «Node» repräsentiert wird. Ein Node kann eine Variable, ein Datentyp, eine Referenz, ein Objekt o.ä. sein. Open62541 kann in diversen Konfigurationen erstellt werden. Um den limitierten Speicherressourcen in einem Mikrocontroller Rechnung zu tragen, wurde der Namespace Zero in einer minimalen Ausführung verwendet. Dieser definiert das Basis Nodeset und darf nicht durch applikationsspezifische Nodes erweitert werden. In einem ersten Schritt wurde das Betriebssystem FreeRTOS zusammen mit dem Netzwerkstack LwIP verwendet. Für den Verbindungsaufbau über TCP/IP und als Basis der Demo-Applikation wurde ein Beispiel-Projekt aus der STM32CubeIDE aufgesetzt.
Im FreeRTOS Heap-Speicher wurden ca. 20kB Speicher durch den OPC UA Server belegt. Beim Verbinden eines Clients wird jeweils zur Laufzeit zusätzlich ein Sende- und Empfangsbuffer benötigt. Ausserdem hat jeder erstellte Node einen Speicherbedarf. Die Grösse ist dabei abhängig von der Information, welche der jeweilige Node repräsentiert. Dieser Speicherbedarf muss bei der Planung der Speicherressourcen pro Anwendungsfall berücksichtigt werden. In unserer Demo-Applikation wurden zum Test 300 Variablen-Nodes erstellt und dabei knapp 270kB im RAM belegt.
Um die Daten des OPC UA Servers zu verwenden, ist eine entsprechende Gegenstelle (Client) nötig. Diese wurde mit der Software UaExpert auf einem Windows PC emuliert. UaExpert ist ein frei erhältlicher UA Referenz Client der Firma Unified Automation. In unserer Demo-Applikation können über den Client die Node-Struktur des Servers sowie die einzelnen Variablenwerte der Nodes ausgelesen werden. Der Variablenwert wurde mit jedem Tastendruck auf dem STM32H735-DK inkrementiert. Über einen weiteren Node konnte durch den Client eine LED auf dem STM32-Board ein- und ausgeschaltet werden.
In einem zweiten Schritt erfolgte der Austausch des Betriebssystems FreeRTOS mit AzureRTOS und des Netzwerkstacks LwIP mit NetX. Als Herausforderung stellte sich dabei die Portierung der Netzwerkfunktionen heraus. Azure bietet dafür jedoch einen Kompatibilitätswrapper, der die notwendige BSD Socket-API unterstützt. Damit gelang die Portierung der Netzwerkfunktionen von LwIP zu NetX schliesslich mit überschaubarem Aufwand. Zur Erhöhung der Sicherheit wurde in einem weiteren Schritt eine Authentifizierung per Benutzername und Passwort auf dem Server implementiert. Ein Client musste sich nun beim Verbinden auf den Server authentifizieren. Zusätzlich könnte die Sicherheit durch eine Verschlüsslung noch weiter erhöht werden. Open62541 unterstützt dafür mbed TLS, OpenSSL und LibreSSL.
Mit OPC UA ist ein herstellerneutraler Datentransport in unzähligen Anwendungsgebieten möglich. Von der Fertigungsebene bis in das Produktionsplanungs- oder ERP-System werden Informationen sicher und zuverlässig transportiert. Dabei können beispielsweise Embedded UA Server auf der Feldebene mit genormten Schnittstellen in ein Netzwerk eingebunden werden. Die geografische Verteilung der Komponenten ist möglich und durch Firewalls auch auf Netzwerkebene eine sichere Trennung sichergestellt.
Wir von der Firma CSA Engineering AG unterstützen Sie gerne bei Ihrem nächsten Vorhaben mit OPC UA.