Konfiguration von Symbolen

Symbole können über die "Symbole Seite", welche in der Navigationsleiste in der linken Seite ausgewählt werden kann, angelegt werden.

Um Symbole anlegen zu können ist es notwendig, dass eine Verbindung ausgewählt wird. Hier im Beispiel ist die Verbindung "Spectra OPC UA" in der Filter-Leiste ausgewählt.

Auswahl einer einzelnen Verbindung

Über den "Symbol erstellen" Button wird der verbindungsspezifische Dialog geöffnet.

OPC UA Subscription Symbol anlegen

Eine OPC UA Subscription ermöglicht es von einem einzelnen OPC UA Knoten abzutasten (sampling). Hierbei werden OPC UA MonitoredItems verwendet, sodass nur Änderungen übertragen werden. Die Datenpunkte können an ein oder mehrere Output Symbole weitergeleitet werden, welches es dann z.B. in eine Influx Datenbank schreibt.

Auf der ersten Seite muss der Typ Subscription ausgewählt werden.

Subscription Typ auswählen

Auf der zweiten Seite wird der OPC UA Adressraum angezeigt. Hierzu muss ein OPC UA Browser konfiguriert sein. Einen oder mehrere Knoten können ausgewählt werden. Für jeden ausgewählten Knoten wird eine OPC UA Subscription erzeugt.

OPC UA Knoten auswählen

Auf der dritten Seite können spezifische Einstellungen vorgenommen werden.

Subscription spezifische Einstellungen

Auf der vierten Seite kann das Automapping konfiguriert werden. Für jedes OPC UA Subscription Symbol wird in der ausgewählten Verbindung ein Output Symbol angelegt und mit dem Input Symbol verknüpft. Im Beispiel wird MQTTPublishTopicPlain Symbol für die Verbindung 'MQTT Broker' erzeugt..

Konfiguration des Automappings

OPC UA BulkRead Symbol anlegen

Das OPC UA BulkRead Symbol erlaubt es mehrere OPC UA Knoten gleichzeitig in eine Struktur auszulesen. Dafür kommuniziert der Data Collector mit dem OPC UA Server über einen Handshake. Der OPC UA Server teilt dem Data Collector mit, wann die Daten ausgelesen werden sollen, und der Data Collector benachrichtigt den OPC UA Server, wenn der Datenpunkt abgearbeitet wurde. Dieser Prozess wiederholt sich.

Auf der ersten Seite muss der Typ BulkRead ausgewählt werden. Es gibt die Möglichkeit die Art des Handshakes auszuwählen.

Der Handshake-Typ Single setzt den Handshake auf das folgende Verhalten. Der OPC UA Server bietet einen OPC UA Knoten (Trigger-Knoten) vom Typ Boolean an, den der Data Collector ausliest. Soll der Datenpunkt ausgelesen werden, setzt der OPC UA Server den Wert auf true. Die konfigurierten Knoten werden in eine Struktur ausgelesen und weitergeleitet. Um den Handshake zu beenden, setzt der Data Collector den Trigger-Knoten auf false zurück.

Der Handshake-Typ Input/Output verwendet zwei OPC UA Knoten vom Typ Boolean. Der OPC UA Server setzt den Input Knoten auf true, wenn der Datenpunkt ausgelesen werden soll. Hat der Collector den Datenpunkt verarbeitet setzt er den Output Knoten auf true. Anschließend setzt der OPC UA Server den Input Knoten auf false. Um den Handshake zu beendet setzt der Data Collector den Output Knoten wieder auf false.

Beide Handshake-Typen lassen sich über den Confirm After Type einstellen. Mit Read beendet der Data Collector den Handshake nach erfolgreichen Lesen. Hier gibt es keine Garantie, dass der Datenpunkt auch wirklich geschrieben wurde. Mit WriteAny beendet der Data Collector den Handshake erst, wenn mindestens ein Output Symbol den Punkt erfolgreich geschrieben hat. Mit WriteAll müssen alle konfigurierten Output Symbole den Datenpunkt erfolgreich geschrieben haben.

Select BulkRead

Single Handshake Konfiguration

Auf der zweiten Seite wird der OPC UA Adressraum angezeigt. Alle Knoten die für den Datenpunkt ausgelesen werden sollen müssen ausgewählt werden. Der Trigger-Knoten soll nicht ausgewählt werden.

Auswahl der OPC UA Datenknoten

Auf der dritten Seite muss der Trigger-Eingang-Knoten und der Bestätigen nach Typ ausgewählt werden.

Konfiguration Trigger-Knoten und anderer Einstellungen

Auf der letzten Seite kann das Automapping konfiguriert werden. Dies ist analog zur Beschreibung für OPC UA Subscriptions.

Automapping konfigurieren

Input/Output Handshake Konfiguration

Der Input/Output Handshake-Type wird analog zum Single Handshake-Type konfiguriert. Auf der dritte Seite des Dialogs müssen aber die Trigger Eingang- und Trigger Ausgang-Knoten konfiguriert werden.

Configure subscription

Achtung: Die Trigger-Knoten dürfen nicht auf der zweiten Seite ausgewählt sein, denn sonst können sie nicht auf der dritten Seite ausgewählt werden.

Influx Measurement anlegen

In der Regel werden Influx Measurements über das Automapping aus einen Input Symbol erstellt. Manchmal ist es auch hilfreich ein Measurement manuell anzulegen oder umzukonfigurieren.

Zunächst muss die Verbindung ausgewählt werden, für die das Measurement erzeugt werden soll. Im "Symbol erstellen" Dialog muss der Symbol Typ Measurement ausgewählt werden.

Select Measurement

Auf der zweiten Seite können weitere Einstellungen vorgenommen werden.

Configure basic properties

Der Name wird innerhalb der App verwendet. Der Name des Measurements entspricht dem Influx Measurement Namen. Der Default-Wert der Behaltungsstrategie entspricht der Default Retention Policy der Datenbank.

Abschließend können die Tags und Fields des Measurements in der Symboltabelle konfiguriert werden. Dazu muss das erstellte Measurement per Mouse-Click expandiert werden. Neue Felder können in der letzten Reihe konfiguriert werden.

Configure basic properties

Es gibt 5 Konfigurationstypen:

  1. Metadata: verwendet für den Tag die Metadata Informationen des Input Symbols. Der Default Value wird verwendet um im Fall von fehlenden Metadaten einen Wert vorzugeben. kann der Wert nicht ermittelt werden (fehlt und kein Defaultwert), werden die Datenpunkte verworfen. Im Beispiel wird Host konfiguriert um den Hostname der Verbindung im Tag 'host' zu annotieren. Metadaten können nur von konfigurierten dynamischen Tags oder Fields verwendet werden.
  2. Static field: Text der als Feld im Measurement gespeichert wird. Achtung: In dieser Version wird immer der Datentyp String verwendet, selbst wenn der Text einer Zahl entspricht.
  3. Static tag: Text der als Tag im Measurement gespeichert wird.
  4. Dynamic field: Die Datenpunkte des ausgewählten Input Symbols werden in das Feld gespeichert. Lineare Transformation und fester Datentyp können ausgewählt werden. In der Regel ist es sinnvoll den Datentyp auf Auto zu belassen.
  5. Dynamic tag: Die Datenpunkte des ausgewählten Input Symbols werden in den Tag mit dem konfigurierten Key gespeichert. Der Datentyp des Datenpunkts muss einer Ganzzahl, einem Boolean oder einer einem String entsprechen. Andere Datentypen werden nicht unterstützt. WARNUNG: Dynamische Tags können die Performance der Datenbank verschlechter. Für jeden unterschiedlichen Tag-Wert wird innerhalb der Influx Datenbank eine neue Zeitreihe angelegt. Dynamische Tags können hilfreich sein, wenn es wenig Änderungen im Wertebereich gibt, da man über die InfluxQL WHERE Queries auf Tags aber nicht auf Fields durchführen kann.

Achtung werden mehr als ein dynamisches Tag oder Field verwendet, dann gelten die Beschränkungen der Join-Funktionalität.

Array in Influx Measurements

Besteht ein Datenpunkt aus einem Array, dann wird jedes Array Element als Datenpunkt in die Influx Datenbank geschrieben. Dazu annotiert der Data Collector jeden Punkt mit einem Tag 'index', welcher dem Index des Werts im Array entspricht. Ist ein statisches oder dynamisches Tag mit dem Key 'index' konfiguriert, wird dieses einfach überschrieben.Achtung für jeden Index wird innerhalb der Datenbank eine eigene Zeitreihe erzeugt.

Datenstrukturen in Influx Measurements

Ist der Datenpunkt eine Struktur, z.B. über OPC UA BulkRead oder dem Datentyp einer OPC UA Subscription erzeugt, dann kann das Datum ebenfalls in die Datenbank geschrieben werden. Dazu wird die Struktur flach in einen Datenpunkt konvertiert. Datenstrukturen können nur als Field aber nicht als Tag gespeichert werden.

Beispielstruktur im JSON-Format:

{
  "anInt": 3,
  "anBool": false,
  "nested": {
    "aString": "world",
  }
}

Die entsprechende Zeile im Influx LineProtocol mit einem dynamischen Feld mit Key 'data' zum Zeitstempel 132909231230223 sieht wie folgt aus:

name data_anBool=f,data_anInt=3,data_nested_aString="world" 132909231230223

Achtung: Arrays innerhalb der Datenstruktur werden nicht unterstützt. Ein Array das Datenstrukturen enthält, kann hingegen konvertiert werden.

MQTT Publish Topic Plain erstellen

In der Regel werden MQTT Publish Topic Plain Symbole über das Automapping aus einen Input Symbol erstellt. Manchmal ist es auch hilfreich ein Symbol manuell anzulegen oder umzukonfigurieren.

Zunächst muss die Verbindung ausgewählt werden, für die das Symbol erzeugt werden soll. Im "Symbol erstellen" Dialog muss der Symbol Typ MQTT Plain ausgewählt werden.

Select MQTT Plain

Auf der zweiten Seite können die grundlegenden Einstellungen vorgenommen werden.

Configure basic properties

Der Name wird in der App angezeigt. Das Thema entspricht dem MQTT Topic auf dem die Datenpunkte gespeichert werden. Die Qualität der Übertragung kann ausgewählt werden. Mit Beihalten lässt sich das Verhalten im Broker steuern.

Abschließend kann das Input Symbol in der aufgeklappten Zeile ausgewählt werden.

Configure basic properties

Die Datenpunkte werden als JSON versendet. Im folgenden werden Beispiele für Datentypen und ihr JSON Ergebnis dargestellt. Zahlen:

413658032
Strings:
"hello world"
Arrays:
[1, 2, 3, 4, 5]
Datenstruktur:
{
  "hello": "world",
  "anotherKey": false,
  "nested": {
    "structures": 2,
    "arePossible": -23.3
  },
  "anArray": [true, false, true, false]
}

MQTT Publish Topic Object erstellen

In der Regel werden MQTT Publish Topic Plain Symbole über das Automapping aus einen Input Symbol erstellt. Manchmal ist es auch hilfreich ein Symbol manuell anzulegen oder umzukonfigurieren.

Die Datenpunkte werden als JSON Objekt übertragen. Der Zeitstempel wird als ISO8061 mit Key 'timestamp' übermittelt. Am Ende des Abschnitt gibt es ein vollständiges Beispiel der Konfiguration und eines Datenpunktes.

Zunächst muss die Verbindung ausgewählt werden, für die das Symbol erzeugt werden soll. Im "Symbol erstellen" Dialog muss der Symbol Typ MQTT Object ausgewählt werden.

Select Measurement

Auf der zweiten Seite können die grundlegenden Einstellungen vorgenommen werden.

Configure basic properties

Der Name wird in der App angezeigt. Das Thema entspricht dem MQTT Topic auf dem die Datenpunkte gespeichert werden. Die Qualität der Übertragung kann ausgewählt werden. Mit Beihalten lässt sich das Verhalten im Broker steuern.

Abschließend kann das Symbol und das zu konvertierende JSON Objekt in der aufgeklappten Zeile konfiguriert werden werden.

Configure basic properties

Es gibt drei Konfigurationsarten: 1. Metadata: verwendet für den Tag die Metadata Informationen des Input Symbols. Der Default Value wird verwendet um im Fall von fehlenden Metadaten einen Wert vorzugeben. kann der Wert nicht ermittelt werden (fehlt und kein Defaultwert), werden die Datenpunkte verworfen. Im Beispiel wird Host konfiguriert um den Hostname der Verbindung im Tag 'host' zu annotieren. Metadaten können nur von konfigurierten dynamischen Tags oder Fields verwendet werden. 2. Static field: Statischer Text der als String im Objekt gespeichert wird. 4. Dynamic field: Die Datenpunkte des ausgewählten Input Symbols werden gespeichert. Lineare Transformation und fester Datentyp können ausgewählt werden. In der Regel ist es sinnvoll den Datentyp auf Auto zu belassen.

Das erstellte JSON Objekt hat die folgende Struktur:

{
  "host": "ite-si.de",
  "purpose": "demonstration",
  "timestamp": "2022-07-28T07:16:30.798761Z",
  "var0": 413658032,
  "var1": 827316064
}

Achtung werden mehr als ein dynamisches Tag oder Field verwendet, dann gelten die Beschränkungen der Join-Funktionalität.

Beschränkungen der Join-Funktionalität

Der Data Collector ermöglicht es mehrere Input Symbole mit einem Output-Symbol zu verknüpfen. Die Datenpunkte werden über ein Best-Effort-Prinzip zusammengeführt. Konfiguriert werden kann dies beispielsweise in Influx Measurements oder in MQTT Publish Topic Object Symbolen über dynamische Fields.

Das Best-Effort-Prinzip beim Zusammenführen der Punkte bedeutet, dass der Data Collector keine Garantien zur Korrektheit der Zeitstempel beim Join durchführt. Die Datenpunkte werden zusammengeführt, wenn Sie am Data Collector ankommen. Kommen zwei Datenpunkte gleichzeitig (Netzwerkpaket) an, sollte der Zeitstempel exakt passen. Haben zwei Datenpunkte den gleichen Zeitstempel aber kommen aufgrund von Jitter 2 Sekunden zeitversetzt an, so ist in diesem Zeitraum ein "Fehler" in den Daten zu finden. Im Allgemeinen werden die Datenpunkte bei OPC UA Server bei OPC UA MonitoredItems sortiert nach Zeitstempel übertragen, so dass der Fehler selten auftreten sollte.

Werden Input Symbole aus unterschiedlichen Verbindungen verwendet, dann wird der Fehler mit den Zeitstempeln in der Regel vorhanden sein. Meistens werden mehrere Daten in Bündeln übertragen, was dazu führt, dass die Datenpunkte nicht zeitgleich eintreffen. Zu erwarten sind in der Regel mehrere 100 ms, aber der Zeitraum kann auch deutlich größer sein. Hat eine der beiden Datenquellen einen Verbindungsabbruch, kann die Ungenauigkeit noch höher sein.