OPC UA mit Python pandas / Jupyter verbinden
| Produkt | Python pandas / Jupyter |
|---|---|
| Kategorie | Analyse |
| OPC-UA-Rolle | Client |
OPC-UA-Daten direkt in einen DataFrame zu ziehen ist der schnellste Weg, eine Frage zu einer Maschine zu beantworten, und das richtige Werkzeug für eine einmalige Untersuchung. Ein Collector ist es nicht: Ein Notebook, das dauerhaft laufen muss, ist eine Produktionsabhängigkeit, die niemand überwacht.
Bevor Sie starten
- asyncua installiert, und der synchrone Wrapper, falls Sie await im Notebook nicht mögen.
- Lesezugriff auf den Server, und dessen Zertifikat vertraut, falls er Sicherheit verlangt.
- Eine klare Fragestellung. Notebooks sind hervorragend darin, eine zu beantworten, und schlecht im Dauerbetrieb.
Die Einrichtung
- Nutzen Sie im Notebook den synchronen Wrapperfrom asyncua.sync import Client gibt Ihnen dieselbe API ohne asyncio, was sich innerhalb der eigenen Event Loop von Jupyter weitaus besser verhält, als zu versuchen, eine zweite zu verschachteln.
- Sammeln Sie in eine Liste und bauen Sie den DataFrame einmalJe Notification an einen DataFrame anzuhängen ist langsam und alloziert ständig neu. Puffern Sie Notifications in einer Liste von Dicts und erzeugen Sie den DataFrame am Ende.
- StatusCode und beide Zeitstempel als Spalten behaltenSie werden sie brauchen. Eine Auswertung, die stillschweigend einen UncertainLastUsableValue mittelt, erzeugt eine Zahl, die niemand verteidigen kann, und den Status können Sie nicht rekonstruieren, nachdem Sie ihn verworfen haben.
- Auf SourceTimestamp indizieren, in UTCSetzen Sie ihn als zeitzonenbewussten DatetimeIndex. Naive lokale Zeitstempel mehrerer Maschinen zu mischen ist der Weg, auf dem eine Schichtgrenze eine Stunde falsch landet.
- Historie abrufen statt wartenWenn der Server historischen Zugriff unterstützt, lesen Sie ein vergangenes Zeitfenster, statt eine Stunde lang in einer Subscription zu sitzen. Wenn Sie Schichtaggregate brauchen, fordern Sie beim Server TimeAverage oder PercentGood an - er berechnet sie weit günstiger, als Sie es können.
- Überführen Sie es in einen echten Collector, wenn es funktioniertSobald das Notebook die Frage wiederholt beantwortet, verlagern Sie die Logik in einen kleinen Dienst mit Wiederverbindung und Überwachung. Ein Notebook, das auf dem Laptop von jemandem läuft, ist ein Produktionsvorfall, der nur auf einen zugeklappten Deckel wartet.
Wie der Adressraum aussieht
Was immer Sie auswählen, flach in Spalten gelegt. Strukturierte Werte werden zu Python-Objekten decodiert, wenn Sie zuvor die Datentypdefinitionen des Servers laden, die Sie dann in Spalten normalisieren können. Struktur aus Companion Specifications ist verfügbar, wenn Sie danach browsen, aber pandas bewahrt sie nicht für Sie.
Die Fallen
- Jupyter betreibt eine eigene Event-Loop, deshalb kann sich der reine Async-Client in einer Zelle merkwürdig verhalten. Der synchrone Wrapper umgeht das Problem vollständig.
- Eine Subscription in einem Notebook endet beim Neustart des Kernels, stillschweigend. Jeder so erhobene Datensatz hat Lücken, die Ihnen erst beim Plo
- Vor dem Prüfen der StatusCodes zu resampeln ist der klassische Auswertungsfehler: Schlechte und unsichere Werte werden in eine sauber aussehende Reihe eingemittelt.
- Zeitzonenlose Zeitstempel von mehreren Servern lassen sich nicht sicher vergleichen. Normalisieren Sie beim Einlesen auf UTC, nicht erst beim Plotten.
- Lange, unbegrenzte Historienabfragen gegen einen produktiven Historian bringen Ihnen einen Anruf ein. Begrenzen Sie jede Anfrage.
OEE-Daten daraus gewinnen
Ideal, um eine OEE-Berechnung zu prototypisieren, bevor man sie auf eine Plattform festlegt, und für die Diskussion über Definitionen, die immer folgt. Berechnen Sie die Verfügbarkeit aus Zustandsdauern, die Leistung gegen eine angegebene ideale Taktzeit, die Qualität aus Ausschusszahlen, und halten Sie jede Annahme in einer Zelle neben der Zahl fest. Es ist ein Modellierungswerkzeug, kein Monitoring-Werkzeug - sobald die Antwort in jeder Schicht vorliegen muss, gehört sie in einen Dienst.
Zuletzt geprüft am 7. September 2026 gegen OPC UA 1.05.07. OPC UA Connect ist ein unabhängiges Bildungsangebot und steht in keiner Verbindung zur OPC Foundation.