Datenerfassung bei Werkzeugmaschinen mit OPC UA und Python

In diesem Beitrag:

Digitale Fertigung, Industrie 4.0 und insbesondere der Einsatz von Künstlicher Intelligenz setzen voraus, dass Daten verfügbar sind. Zur intelligenten Steuerung von Produktionsanlagen oder zur Prozessüberwachung wird zunehmend OPC UA eingesetzt. OPC UA ermöglicht es, mit geringem Aufwand leistungsstarke Software zu programmieren, um Daten von Maschinen und Anlagen unterschiedlicher Hersteller zu lesen und zu schreiben. Wir erklären Ihnen, wie OPC UA funktioniert und wie es genutzt werden kann, um Steuerungssignale einer Werkzeugmaschine auszulesen. Zur Datenerfassung stellen wir Ihnen zwei Methoden vor: die kostenlose Software UaExpert und die Open Source Python-Bibliothek opcua-asyncio.

  • Was ist OPC UA?
  • Datenerfassung bei Werkzeugmaschinen
  • Leistungsstarke OPC UA Clients selbstständig programmieren

Was ist OPC UA?

OPC UA steht für „Open Platform Communications Unified Architecture“ und ist ein offener Industriestandard für die Kommunikation sowie den Datenaustausch in der Automatisierungstechnik. Entwickelt von der OPC Foundation, bietet OPC UA eine plattformunabhängige, sichere und zuverlässige Kommunikation zwischen verschiedenen Geräten und Systemen in industriellen Umgebungen. OPC UA ermöglicht den Datenaustausch zwischen unterschiedlichen Herstellern für eine nahtlose Integration von unterschiedlichen Maschinen, Anlagen und Steuerungen. Bei OPC UA wird eine Server-Client-Verbindung aufgebaut. Das bedeutet, dass ein Server Daten zur Verfügung stellt und ein Client diese Daten liest und schreibt. Dafür muss sich der Client im selben Netzwerk wie der Server befinden.

Bild 1: OPC UA arbeitet über eine Server-Client-Verbindung

Datenerfassung bei Werkzeugmaschinen

Während OPC UA prinzipiell kostenlos genutzt werden kann, muss für den OPC UA-Server von Werkzeugmaschinen in der Regel eine kostenpflichtige Lizenz beim Steuerungshersteller erworben werden. Mit einem OPC UA-Client ist es dann möglich, auf die Steuerungsdaten zuzugreifen. Im Folgenden wird die Erfassung von Steuerungsdaten an einer Sinumerik 840D SolutionLine vorgestellt. Ein Edge-Device wird eingesetzt, das über Ethernet mit dem Anlagennetz der Maschine verbunden ist. Als OPC UA-Client wird die kostenlose Software „UaExpert“ auf dem Edge-Device ausgeführt. Eine umfangreiche Dokumentation zu UaExpert finden Sie hier. UaExpert verfügt über eine Bedienoberfläche und bietet damit einen nutzerfreundlichen Einstieg in die Datenerfassung über OPC UA.

Bild 2: Einfache Kommunikation zu OPC UA-Servern mit der kostenlosen Software UaExpert

Zunächst muss die Verbindung mit dem OPC UA-Server hergestellt werden. Über das Plus-Symbol in der Werkzeugleiste oben kann ein neuer OPC UA-Server hinzugefügt werden. Für die Anmeldung werden die IP-Adresse und der Port des Servers, sowie der Benutzername und das Passwort benötigt (Bild 2). Diese Informationen können Sie der Maschinensteuerung unter dem OPC UA-Untermenü entnehmen. Bei erfolgreicher Verbindung wird der Server in der oberen linken Ecke angezeigt. Als nächstes können Sie sich die Werte der einzelnen Variablen anzeigen lassen. Hierfür lassen sich unter der Baumstruktur im linken Fenster die verfügbaren Variablen und Datenpfade des Servers durchsuchen (Bild 3). Relevante Variablen ziehen Sie per Drag-and-Drop in das mittlere Fenster. Dadurch wird der Wert der Variable direkt angezeigt. Der gesamte Datenpfad der Maschinenvariable wird im Fenster rechts dargestellt.

Bild 3: Nutzeroberfläche von UaExpert

Leistungsstarke OPC UA Clients selbstständig programmieren

Anstelle von UaExpert können Sie mit geringem Aufwand auch eigene, leistungsfähigere Softwarelösungen für die Datenerhebung über OPC UA entwickeln. Im Folgenden wird ein Skript zur Datenerfassung, basierend auf der Programmiersprache Python, vorgestellt. Das Skript erstellt einen OPC UA Client, der die Positionsdaten der X- und Y-Achse der Maschine ausliest und die Werte in das Terminal schreibt. Ein kostenloser Download unserer Beispielumsetzung ist über folgenden Link möglich:

Hier geht es zum Download

Das heruntergeladene Skript öffnen Sie in einer Entwicklungsumgebung wie Microsoft Visual Studio Code. Um das Skript auszuführen, muss auf dem Rechner Python in der Version 3.4 oder höher installiert sein. In einem Terminal installieren Sie die OPC UA Python Bibliothek. OPC UA verfügt über eine Python Bibliothek, welche jedoch veraltet ist. Stattdessen empfehlen wir die aktuellere opcua-asyncio Bibliothek zu nutzen, welche auch für das folgende Programmierbeispiel genutzt wird. Zur Installation nutzen Sie zum Beispiel den Installationsdient pip:

pip install asyncua

Im Skript werden zunächst die erforderlichen Bibliotheken importiert.

import asyncio
from asyncua import Client
import time

Bei OPC UA befindet sich jede Variable an einer Node (englisch für Knotenpunkt). Für eine eindeutige Identifikation besitzt jede Node einen Identifier, welcher in unserem Fall dem Datenpfad der Variable entspricht. Nähere Informationen sind der offiziellen Dokumentation zu entnehmen. In der main-Funktion des Skripts werden zunächst die auszulesenden Nodes des Servers definiert (Zeile 10). In dem gezeigten Beispiel werden die Positionsdaten der Maschinenachsen ausgelesen. Die zugehörigen Datenpfade der beiden Variablen wurden zuvor über UaExpert identifiziert. Die Funktion kann beliebig um weitere Nodes erweitert werden. In diesem Beispiel ist zu beachten, dass unter ” Channel/GeometricAxis/vaIw“ die Positionsdaten aller Achsen hinterlegt sind. Erst mit den Indizes [1] bzw. [2] erhalten wir die Position für Achse 1 (X-Achse) bzw. Achse 2 (Y-Achse).

#Nodes definieren, die gelesen werden sollen
node_pos_x = client.get_node('ns=2;s=/Channel/GeometricAxis/vaIw[1]')
node_pos_y = client.get_node('ns=2;s=/Channel/GeometricAxis/vaIw[2]')

In Zeile 15 und Zeile 16 werden für die Position in X und Y jeweils eine lokale Variable definiert. In diese Variablen werden die Werte der Nodes gespeichert. Die Variable timestamp erhält den aktuellen Zeitstempel. Der print-Befehl schreibt anschließend die Achspositionen und den Zeitstempel in das Terminal. Alternativ implementieren Sie an dieser Stelle Ihre präferierte Datenbank.

print(f"Timestamp: {timestamp}, PosX: {pos_x}, PosY: {pos_y}")   

Zuletzt werden die Zugangsdaten des Servers eingegeben (Zeilen 24-27). Analog zu UaExpert werden hier IP-Adresse und Port des Servers sowie der Nutzername und das Passwort eingetragen.

# Login-Daten des Servers eingeben
IP_Adresse = "192.168.1.1"
Port = "4840"
Nutzername = "Nutzer"
Passwort = "Passwort"

Das Skript kann nun ausgeführt werden. Wurden die Datenpfade korrekt eingegeben, sollten nun die Live-Daten der Maschine im Terminal angezeigt werden. Die Aktualisierungsrate wird dabei in der Regel durch den Server auf der Steuerung limitiert.

Auf Grundlage dieser Funktionalität können nun vielfältige und umfangreiche Funktionen entwickelt werden. Beispielsweise ist es möglich, die Maschinendaten direkt in Datenbanken zu speichern. In unserem KI-Experimentierfeld haben wir zudem eine Funktion umgesetzt, wodurch die Datenaufzeichnung über OPC UA durch einen Befehl im NC-Code gezielt gestartet und beendet wird. Für weitere Umsetzungsbeispiele und Informationen kontaktieren Sie unseren Experten Aleks Arzer.

Beitrag teilen!