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.
Ü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.
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.
Auf der dritten Seite können spezifische Einstellungen vorgenommen werden.
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..
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.
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.
Auf der dritten Seite muss der Trigger-Eingang-Knoten und der Bestätigen nach Typ ausgewählt werden.
Auf der letzten Seite kann das Automapping konfiguriert werden. Dies ist analog zur Beschreibung für OPC UA Subscriptions.
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.
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.
Auf der zweiten Seite können weitere Einstellungen vorgenommen werden.
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.
Es gibt 5 Konfigurationstypen:
- 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.
- 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.
- Static tag: Text der als Tag im Measurement gespeichert wird.
- 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.
- 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.
Auf der zweiten Seite können die grundlegenden Einstellungen vorgenommen werden.
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.
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.
Auf der zweiten Seite können die grundlegenden Einstellungen vorgenommen werden.
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.
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.
Mehrere Symbole gleichzeitig konfigurieren
In der Symboltabelle in der Kopfzeile befinden sich auf der rechten Buttons, die alle Symbole gleichzeitig in der Tabelle bearbeiten oder löschen können. Diese werden auch Mehrfach-Buttons genannt. Buttons am Ende einer Symbolzeile funktionieren nur auf diesem Symbol. Die Mehrfach-Buttons führen dieselbe Operation nur auf allen ausgewählten Symbolen auf der Tabelle auf. Möchte man nur einen Teil der Symbole gleichzeitig bearbeiten kann man die Auswahl der Symbole in der Tabelle mit den Filtern anpassen. In der folgenden Abbildung werden alle Symbole auf der Seite 1 und 2 der Tabelle beim Drücken eines Mehrfach-Buttons bearbeitet.
Automapping Button
Die Automapping Funktion ermöglicht schnell für ein oder mehrere Input-Symbole ein Output-Symbol pro Output Typ und Input-Symbol zu erstellen. Dazu müssen die Verbindungen der Output Typen ausgewählt werden.
Beim normalen Automapping für ein einzelnes Input-Symbol wird ein Output-Symbol pro ausgewählter Verbindung erstellt. Wird das Automapping für mehrere Input-Symbole durchgeführt, wird fü jedes Input-Symbol ein Output-Symbol pro ausgewählter Verbindung erstellt.
Bearbeiten Button
Die Bearbeitung Button ermöglicht eine oder mehrere Symbole zu bearbeiten. Bei OPCUASubscription kann z.B. ein Interval, ein Timeout und ein Deadband eingestellt werden. Die Bearbeitungsfunktion funktioniert nur für Symbole des gleichen Symboltyps. Befinden sich unterschiedliche Typen, z.B. OPCUASubscription und OPCUABulkread in der Tabelle, muss man zunächst den gewünschten Typ über den Filter in der Tabellenkopfzeile auswählen.
Bei der normalen Bearbeitungsfunktion für einzelne Symbole kann der Deadband ausgeschaltet werden, in dem der Schalter deaktiviert wird und das Modal gespeichert wird.
Bei der Mehrfach-Bearbeitungsfunktion gibt es einen zusätzlichen Button, mit der die Deadbands aller Symbole gleichzeitig zurückgesetzt werden kann. Hier muss ebenfalls das Modal gespeichert werden, damit das Zurücksetzen der Deadbands wirksam ist.
Löschen Button
Der Löschen Button ermöglicht es ein oder mehrere Symbole zu löschen. Einzelne Symbole werden durch den Löschen Button in der jeweiligen Symbolzeile gelöscht. Durch das Drücken des Mehrfach Löschen Button in der Kopfzeile werden alle in der Tabelle aufgelisteten Symbole gleichzeitig gelöscht.
Um unbeabsichtiges Löschen zu verhindern, wird vor jedem Löschvorgang noch eine Bestätigung des Nutzers abgefragt.