Node-RED Beispiel-Flows

Die Installation beinhaltet 7 Beispiel-Flows, welche die Funktionsweise der WinCC OA Nodes demonstrieren:

Default-Server

Abbildung 1. Default-Server - Arbeitsbereich

Das Default-Server-Beispiel ist strikt genommen kein Beispiel, sondern definiert einen globalen WinCC OA-Server, der für alle Beispiel-Flows verwendet wird. Dieser Server sollte konfiguriert werden, um die weitere Arbeit mit den Beispiel-Flows zu vereinfachen.

Increment

Abbildung 2. Increment Beispiel - Arbeitsbereich

Im Beispiel "Increment" wird eine Inject Node platziert, um eine inkrementelle Wertänderung einzugeben. Die dpGet-Node ruft den aktuellen Wert des Datenpunkts ab. Dieser Wert wird dann in der Function-Node um 1 erhöht und mit der dpSet-Node auf den gleichen Datenpunkt geschrieben.

Der dpConnect-Node ist mit dem Datenpunkt verbunden und gibt dann die Wertänderung mit der Debug-Node aus.

All Nodes

Abbildung 3. All-Nodes-Beispiel - Arbeitsbereich

Das "All Nodes" Beispiel besteht aus kleineren Teilbeispielen, in denen alle vorhandenen WinCC OA-Nodes Verwendung finden.

Das erste Teilbeispiel verwendet eine dpSet-Node um den Input der Inject-Node auf einen Datenpunkt zu schreiben. Die dahinter platzierte dpConnect-Node ist mit diesem Datenpunkt verbunden und übermittelt jede Wertänderung als Nachricht an die Debug-Node zur Ausgabe.

Im zweiten Teilbeispiel löst eine der beiden Inject-Nodes die dpNames-Node aus. Diese Nodes rufen vom Server alle Datenpunktadressen ab, die dem gegebenen Muster entsprechen. Die Liste dieser Adressen wird an eine Debug-Node zur Ausgabe und eine dpSet-Node zur weiteren Verarbeitung geschickt. Dieses Beispiel zeigt auch sehr gut die Verwendung der "Single output message" Eigenschaft der dpNames Node. Bei der unteren der beiden Nodes ist diese Eigenschaft aktiviert, wodurch nur eine einzige Nachricht versendet wird und auch nur ein einziges dpSet ausgelöst wird. Die obere Node hingegen versendet eine Nachricht per gefundenem Datenpunkt, was auch ebenso viele Aufrufe von dpSet verursacht. In diesem Fall ist eine einzelne Nachricht mit dem einzelnen dpSet-Aufruf die effizientere Methode.

Das dritte Teilbeispiel löst ein dpQuery aus. Die Abfrage sendet individuelle Nachrichten für jeden gefundenen, zutreffenden Datenpunkt aus. Nachrichten die zu dem gleichen Datenpunktelement gehören, werden zu einer Nachricht zusammengefasst. Diese Nachrichten werden danach mit der Debug-Node ausgegeben.

Das vierte Teilbeispiel behandelt dpGetPeriod und alertGetPeriod. Die obere Inject-Node löst einen Aufruf für die letzte 24 Stunden Periode aus. Die untere Inject-Node sendet eine Nachricht an die Change-Node, in der ein statischer Zeitstempel gesetzt wird. Dieser Zeitstempel wird verwendet, um den Zeitraum den dpGetPeriod und alertGetPeriod Abfragen zu definieren. Die resultierenden Wertänderungen und Alarme werden dann mit ihrem jeweiligen Zeitstempel ausgegeben. Bei Alarmen wird jeder Nachrichtentext durch die Einstellung in der Locale Property entweder in der eingestellten Sprache oder, bei keiner Einstellung, der Default-Sprache des Projekts erhalten.

Das Fünfte und letzte Teilbeispiel verwendet die verschiedenen Varianten von dpGet. Als Topic wird von den Inject-Nodes der Datenpunkt weitergegeben. Die dpGetAlias-Node fragt das Alias des Datenpunkts ab und übergibt dieses an die Debug-Node zur Ausgabe. Die dpGetDescription-, dpGetFormat- und dpGetUnit-Nodes fragen die Beschreibung, das Format und die Einheit des Datenpunkts ab. Diese Informationen werden, aufgrund der Einstellungen in der Locale Property in der eingestellten Sprache oder der Default-Sprache (bei keiner eingestellten Sprache) bezogen und dann ebenfalls mit der Debug-Node ausgegeben.

Spreadsheet

Abbildung 4. Spreadsheet-Beispiel - Arbeitsbereich

Dieses Beispiel liest eine Zeile aus einer Tabelle aus und setzt die darin enthaltenen Werte auf Datenpunkte. Die Node-RED Node "file in" wird benötigt, um die Tabelle einzulesen. Die Nodes "book", "sheet" und "sheet to Json" sind in "node-red-contrib-spreadsheet-in" enthalten, was installiert werden muss (z.B.: mit der Verwaltungsoption der Palette im Editor).

Die Inject-Nodes setzen das Topic der Input-Nachricht und lösen den Einleseprozess aus. Nachdem die Tabellendatei eingelesen ist, wandeln die Nodes "book", "sheet" und "sheet to Json" die Tabelle in ein JSON-Objekt um. Dieses Objekt wird dann in Zeilen aufgeteilt, von welchen eine, anhand des Topics, ausgewählt wird. Diese Zeile wird weiter in die einzelnen Werte aufgespalten. Die Werte werden mit der dpSet-Node an die zugehörigen Datenpunkte gesendet, nachdem das Topic auf die richtige Addresse geändert wurde.

Weather

Abbildung 5. Weather-Beispiel - Arbeitsbereich

Jede Stunde wird das derzeitige Wetter in Chicago abgefragt, in seine Einzelwerte aufgeteilt und diese an spezifische Datenpunkte geschickt. Für dieses Beispeil wird die Node-RED Node "openweathermap" benötigt. Diese Node ist Bestandteil des zusätzlich zu installierenden "node-red-node-openweathermap" (z.B.: mit der Verwaltungsoption der Palette im Editor). Zusätzlich muss ein API-key von der OpenWeatherMap-Webseite heruntergeladen werden.

Eine Inject-Node löst den Abruf der derzeitigen Wetterinformationen für Chicago von der OpenWeatherMap-Webseite aus. Die erhaltenen Informationen werden in der Split-Node auf einzelne Nachrichten verteilt. Die Switch-Node schickt diese Nachrichten dann, anhand ihres Inhalts, an die betreffenden Datenpunkte. Die Nachrichten werden im Debug ausgegeben und die Werte mit einem dpSet an die zugehörigen Datenpunkte geschickt.

Twitter

Abbildung 6. Twitter-Beispiel - Arbeitsbereich

Das "Twitter" Beispiel stellt Verbindung zu einem Datenpunkt her und tweetet dann über den gegenwärtigen Alarmzustand. Um dieses Beispiel zu verwenden, werden gültige Twitter-Anmeldedaten benötigt.

Die dpConnect-Node verbindet sich zu dem Alarmstatus eines Datenpunktelements und sendet eine Nachricht, wenn sich dieser Wert ändert. Diese Nachricht kann entweder einen aktiven, einen quittierten oder keinen Alarm beinhalten. Sollte kein Alarm vorhanden sein, wird der derzeitige Wert des Datenpunkts mit dpGet abgefragt und zu einer Meldung des Gut-Zustandes hinzugefügt. Ein aktiver Alarm fügt den aktuellen Wert zu einer Nachricht über den zu hohen Wasserstand hinzu. Ein quittierter Alarm führt zu einer Nachricht, dass der Alarmzustand behoben wurde. Die entsprechende Nachricht wird dann mit der Twitter Output-Node getweetet.

Energy

Abbildung 7. Energy-Beispiel - Arbeitsbereich

Dieses Beispiel simuliert eine Produktionslinie und überwacht deren Stromverbrauch sowie die damit verbundenen Stromkosten. Die Node-RED Node "power monitor" wird benutzt. Diese Node ist Bestandteil des zusätzlich zu installierenden "node-red-contrib-power-monitor" (z.B.: mit der Verwaltungsoption der Palette im Editor).

Die drei Inject-Nodes bilden die Simulation der Produktionslinie. Sie werden verwendet um, je nach ausgewähltem Zustand, verschiedene Werte an den verbundenen Datenpunkt zu senden. Eine Wertänderung dieses Datenpunkts löst einen Output der dpConnect-Node aus. Von dort löst die Überwachung des Energieverbrauchs einen Abruf der derzeitigen Strompreise aus. Die Verbrauchszahlen werden an die Funktions- und die Template-Node weitergegeben. Der ermittelte Preis wird ebenfalls an die Funktions- und die Template-Node versendet. In der Funktions-Node wird aus Verbrauch und Preis der tatsächliche Preis ermittelt. Die beiden Template-Nodes senden ihre Informationen als Teile einer Nachricht. Die resultierende Nachricht wird mit der Debug-Node ausgegeben.

dpConnect

Abbildung 8. dpConnect-Beispiel - Arbeitsbereich

Dieses Beispiel zeigt die Möglichkeiten der dpConnect-Node mit den verschiedenen Methoden zum Verbinden und Trennen von Datenpunkten.

Der erste Teil des Beispiels besteht aus mehreren Inject-Nodes, die Nachrichten an die dpSet-Node versenden. Dadurch können die Werte der Datenpunkte, auf welche sich die dpConnect-Nodes verbinden, verändert werden.

Im zweiten Teil des Beispiels löst die Inject-Node eine dpNames-Node aus, wodurch eine Nachricht mit allen, dem gegebenen Muster entsprechenden, Datenpunkten weitergesendet wird. Die dpConnect-Node verbindet sich daraufhin mit diesen Datenpunkten. Wenn der Wert eines Datenpunkts verändert wird, wird eine Nachricht mit der Datenpunktadresse und dem neuen Wert versendet und im Debug ausgegeben.

Die dpConnect-Nodes des zweiten und dritten Teil des Beispiels verwenden eine, mit beiden Teilen verbundene, Inject-Node. Mit dieser werden die, mit den dpConnect-Nodes verbundenen, Datenpunkte durch das versenden der Nachricht "dpConnect:disconnectAll" getrennt. Es ist auch bei beiden dpConnect-Nodes die Property "Separate connection for each datapoint" aktiviert, wodurch immer eine separate Nachricht für jeden Datenpunkt versendet wird.

Der dritte Teil des Beispiels sind je zwei Inject-Nodes einem Datenpunkt zugeordnet. Eine der Inject-Nodes sendet eine Nachricht mit der Datenpunkadresse an die dpConnect-Node um eine Verbindung zu diesem Datenpunkt herzustellen. Die andere Inject-Node versendet eine Nachricht mit "dpConnect:disconnect" um diese Verbindung zu trennen. Bei jeder Wertänderung der verbundenen Datenpunkte, oder dem Herstellen einer neuen Verbindung wird der derzeitige Wert über die Output-Node im Debug ausgegeben.