Mit Node-RED Daten aus LOGO! visualisieren

Node-RED & LOGO!: Datenvisualisierung im IoT
1 Kommentar

Es ist ganz leicht, mithilfe eines IOT2000-Moduls Informationen aus LOGO! auf einem Node-RED-Dashboard darzustellen, das unterschiedliche Geräte miteinander verbindet. Dieser Artikel zeigt Ihnen, wie Sie vorgehen müssen, um den Status der digitalen und analogen Eingänge auf einem Dashboard anzuzeigen. Darüber hinaus schalten wir über das Dashboard die Ausgänge von LOGO!.

Node-RED ist eine grafische Entwicklungsumgebung, mit der es möglich ist, IoT-Komponenten miteinander zu verbinden. Durch eine webbasierte Anwendung werden Funktionsbausteine bereitgestellt. Diese können per Mausklick miteinander verbunden werden. Von Haus aus bringt Node-RED schon eine Vielzahl an Funktionsbausteinen mit. Zusätzliche Funktionalitäten können jederzeit über ein Paket-Repository nachgeladen werden. Node-RED basiert auf dem leichtgewichtigen Node.js und ist daher geeignet, auch auf preiswerter Hardware zu laufen. Ursprünglich wurde Node-RED von der IBM entwickelt, aktuell unterliegt das Projekt der Apache-2.0-Lizenz. Das bedeutet, dass die Software frei genutzt und erweitert werden kann. Auf dem IOT2000 ist Node-RED schon vorinstalliert.

Versuchsaufbau

Für unseren Beispielaufbau verwenden wir folgende Geräte:

  • Ein LOGO!-Modul, an dem zwei Potenziometer, Schalter und LEDs angeschlossen sind.
  • Ein IOT2000 Modul, auf dem Node-RED läuft.

Das IOT2000 und LOGO! sind mit unserem lokalen Netzwerk verbunden. Das Setup von LOGO! ist im Entwickler Magazin 3.18 beschrieben. Wie Sie das IOT2000 installieren und an das Netzwerk anbinden, wurde im Entwickler Magazin 5.18 detailliert gezeigt. Wir verwenden hier das Image in der Version V2.2.0 (example-v2.2.0.wic). Bitte schreiben Sie das Image mit einem Tool Ihrer Wahl auf die SD-Karte, stecken diese in das IOT2000 und booten danach. Als Träger dient eine Hutschiene, auf der wir die Geräte montieren. Den kompletten Aufbau können Sie in Abbildung 1 sehen.

Abb. 1: Alle Komponenten sind auf einer Hutschiene montiert

Abb. 1: Alle Komponenten sind auf einer Hutschiene montiert

LOGO! vorbereiten

Für unser Beispiel sind einige Vorbereitungen nötig. Zuerst einmal werden an die Eingänge I1 bis I6 Schalter angeschlossen, die 24 Volt auf die Eingänge legen können. An die Ausgänge werden LEDs mit einem Vorwiderstand von 1k Ohm angeschlossen. Wir verwenden in unserem Beispiel LOGO! mit Transistorausgängen. Wenn Sie Relaisausgänge verwenden, müssen Sie die Schaltung entsprechend anpassen. An die Eingänge I7 und I8 wird jeweils ein Potis angeschlossen. Die analogen Eingänge haben einen Arbeitsbereich von 0 bis 10 Volt, daher arbeiten wir hier mit einem zusätzlichen 10-Kiloohm-Vorwiderstand, um die Spannung anzupassen. Der Widerstand ist für eine Betriebsspannung von 24 Volt dimensioniert. Falls Sie eine andere Betriebsspannung verwenden, muss der Widerstand entsprechend angepasst werden. Abbildung 2 zeigt den kompletten Schaltplan.

Abb. 2: Die Beschaltung der LOGO!

Abb. 2: Die Beschaltung der LOGO!

Um die Kommunikation zwischen LOGO! und IOT2000 aufzubauen, muss LOGO! so konfiguriert werden, dass ein Zugriff von außen möglich ist. Das erledigen wir unter dem Menüpunkt Extras => Ethernetverbindungen. Hier fügen wir eine neue Serververbindung hinzu. Um die Serververbindung zu konfigurieren, klicken wir doppelt darauf. Auf Abbildung 3 ist zu sehen, welche Parameter gesetzt sein müssen, damit LOGO! den Zugriff von außen zulässt. Sobald Sie auf OK geklickt haben, können die Variablen von LOGO! gelesen und geschrieben werden. Die Variablen sind alle ein Byte breit. Das bedeutet, dass acht digitale Zustände in ein Byte hineinpassen. Ein Analogwert aber benötigt zwei Byte. Daher muss man beim Verwenden der Variablen etwas vorsichtig sein. Wenn ein Wert nicht in ein Byte passt, wird einfach das nächste Byte mitverwendet, wodurch andere Informationen überschrieben werden können. Dadurch kann recht viel Chaos entstehen. Also immer vorher darüber nachdenken, wie viele Bytes durch einen Wert belegt werden, um nicht lange nach Fehlern suchen zu müssen.

Abb. 3: Netzwerkzugriff auf Variable aktivieren

Abb. 3: Netzwerkzugriff auf Variable aktivieren

Das Programm für unseren Beispielaufbau ist schnell erklärt. Wir speichern alle Eingangswerte in den Variablen V4.0 bis V4.5. Die Ausgangswerte werden aus den Variablen V5.0 bis V5.3 gelesen. In Abbildung 4 sehen Sie das LOGO!-Programm. Die Werte der Analogeingänge werden jeweils in zwei Bytes gespeichert. Der analoge Eingang AI1 wird in den Variablen V0 und V1 gespeichert. Der analoge Eingang AI1 wird in den Variablen V2 und V3 gespeichert. Wir müssen selbst darauf achten, dass die Daten nicht überschrieben werden können. Wenn wir AI2 in der Variablen V1 speichern würden, hätten wir Teile von AI1 überschrieben.

Auf der LOGO!-Seite ist nun alles vorbereitet; sehen wir uns jetzt an, was wir machen müssen, damit das IOT2000 mit Node-RED arbeiten kann.

Abb. 4: LOGO!-Programm

Abb. 4: LOGO!-Programm

IOT2000 vorbereiten

Damit LOGO! mit Node-RED zusammenarbeiten kann, müssen wir das passende Modul auf dem IOT2000 installieren. Das Modul ist für die Siemens-S7-Steuerung entwickelt worden, funktioniert aber auch mit LOGO! einwandfrei, da beide Steuerungen das gleiche Protokoll verwenden. Um das s7-Modul zu installieren, verbinden wir uns per SSH mit dem IOT2000 und führen auf der Kommandozeile folgende Befehle aus:

cd /usr/lib/node_modules/
npm install -g node-red-contrib-s7

Die Installation des Moduls dauert einige Minuten. Das ist ein guter Zeitpunkt, um die E-Mails zu checken. Sollten Sie eine Fehlermeldung bekommen, überprüfen Sie bitte, ob Sie vom IOT2000 aus eine Verbindung ins Internet haben. Nachdem die Installation abgeschlossen ist, können Sie Node-RED mit folgendem Kommando starten:

node /usr/lib/node_modules/node-red/red & 

Das Starten kann etwas dauern, bitte werden Sie nicht ungeduldig. Auf der Konsole wird das Log von Node-RED ausgegeben. Sobald hier die Meldung „Dashboard version 2.3.11 started at /ui“ erscheint, können Sie sich per HTTP mit der Webanwendung verbinden. Geben Sie dazu bitte im Browser die IP-Adresse Ihres IOT2000 mit der Portnummer 1880 ein. Nun können Sie den in Abbildung 5 dargestellten Startbildschirm von Node-RED sehen.

Abb. 5: Startbildschirm von Node-RED

Abb. 5: Startbildschirm von Node-RED

Node-RED konfigurieren

Bevor wir richtig mit Node-RED loslegen können, sollten wir uns noch einmal kurz orientieren. Auf dem Startbildschirm sehen wir auf der linken Seite alle zur Verfügung stehenden Nodes. Die Nodes sind in unterschiedlichen Kategorien zusammengefasst. Eine grobe Übersicht über die Kategorien ist in Tabelle 1 zu sehen. Bitte beachten Sie, dass es von den installierten Modulen abhängig ist, welche Kategorien und Nodes in der Installation verfügbar sind.

Kategorie Funktion
input Nodes, die Eingabewerte von Geräten liefern
output Nodes, die Ausgabewerte an Geräte senden können
function Notes, mit denen sich unterschiedliche Funktionen aufbauen lassen, die den Inhalt von Nachrichten modifiziere; hier sind auch einige allgemeine Funktionen untergebracht, wie etwa delay oder TCP Request
social Notes, die Verbindungen zu Social Media herstellen können (E-Mail, Twitter usw.)
storage Notes, die es erlauben, auf Daten zuzugreifen
analysis Funktionen zur Analyse von Daten
advanced Erweiterte Funktionen, zum Beispiel für das Ausführen von Programmen
boolean_logic Notes, die digitale Logikfunktionen bereitstellen
dashboard Alle Funktionen, die man auf dem Dashboard anzeigen kann
intel_gpio Die GPIO des IoT2000 ansteuern

Tabelle 1: Übersicht der Node-RED-Kategorien für Nodes

In der Mitte ist ein Tab zu sehen, der als Flow bezeichnet ist. Auf diesem Tab werden wir später die Abläufe (Flows) erstellen. Die Flows werden aus den Nodes zusammengebaut, die mit der Maus zusammen geklickt werden können.

Auf der rechten Seite befinden sich Informationen zu den angewählten Nodes. Auch die Ausgaben des debug-Nodes sind hier zu finden. Weiterhin kann hier der Aufbau des Dashbords definiert werden.

Um unseren Beispielablauf zu erstellen, sind nur wenige Schritte nötig, die ich im Folgenden detailliert erkläre. Bitte wählen Sie nun unter input den s7 Node aus und ziehen ihn mit der Maus in den Flow-Tab. Um den Node zu bearbeiten, klicken Sie ihn bitte doppelt an. In Abbildung 6 sehen Sie nun das Fenster zum Editieren des Nodes. Klicken Sie hier bitte auf das Bleistifticon rechts von Add new S7 Endpoint, um einen neuen Verbindungspunkt (Endpoint) anzulegen. Ein Endpoint ist eine Datenverbindung zu einem externen Gerät, über die Nachrichten übermittelt werden können. Hier geben Sie nun die IPAdresse Ihrer LOGO! ein (Abb. 7). Bitte achten Sie darauf, dass bei Rack eine 1 und bei Slot eine 0 stehen muss. Der Port bleibt auf 102 stehen.

Nun wechseln wir auf den Reiter Variables und legen uns, wie in Abbildung 8 zu sehen ist, folgende zwei Variablen an:

DB1,INT0 LOGO!_Analog_Input_1
DB1,INT2 LOGO!_Analog_Input_2

Jetzt klicken wir auf Update und landen wieder automatisch auf der Seite zum Anlegen von Endpoints. Hier können Sie nun unter Mode auswählen, ob Sie alle Variablen oder nur eine bestimmte aus LOGO! lesen möchten. Bitte wählen Sie hier Single Variable aus. Unter Variable wählen Sie bitte DBI, INTo LOGO!_Analog_Input_I aus (Abb. 9). Wenn wir an dieser Stelle eine andere Auswahl treffen würden, würde ein komplettes JSON-Objekt als Nachricht übermittelt werden. Viele der anzeigenden Nodes können aber nur einzelne Variablen verarbeiten. Daher stellen wir den Endpoint so ein, dass er nur eine Variable liefert.

Wir haben unseren Node nun so konfiguriert, dass er aus LOGO! von der virtuellen Adresse 0 einen Wert ausliest und bereitstellt. Um in den Flow zurückzukehren, klicken Sie bitte auf Done. Unser Node sieht nun etwas verlassen aus; wir sollten schnell für etwas Gesellschaft sorgen.

Unter Output finden Sie den debug-Node. Das ist ein wirklich hilfreicher Node, den man gar nicht oft genug einbauen kann. Der Debug-Node zeigt uns im Debug-Tab an, welche Nachricht gerade in unserem Ablauf unterwegs ist. Ziehen Sie bitte den Node in den Flow-Tab. Danach verbinden Sie ihn mit dem LOGO!_Analog_Input_1-Node. Um den zweiten analogen Eingang von LOGO! auch einzubinden, wiederholen Sie die Schritte einfach für die zweite Variable.

Damit Ihre Änderungen wirksam werden, müssen Sie den Flow deployen. Oben rechts auf der Seite findet sich dazu der Deploy-Button. Nachdem das Deployen abgeschlossen ist, können Sie im Debug-Tab die aktuellen Werte des analogen Eingangs von LOGO! lesen.

In Abbildung 10 ist zu sehen, wie sich der Debug-Output unseres Flows verändert, wenn wir am Potenziometer von LOGO! drehen. Sehen wir uns nun an, wie sich die Werte der Analogeingänge gut leserlich darstellen lassen.

Abb. 10: Der Debug-Output unseres Flows

Abb. 10: Der Debug-Output unseres Flows

Dashboard

Um die in Node-RED vorhandenen Daten darzustellen, gibt es das Dashboard. Dort können verschiedene Nodes zur Anzeige platziert werden. Für die analoge Anzeige gibt es hier ein schönes Messgerät, die Gauge. Wählen Sie bitte das Gauge-Messgerät unter dem Menüpunkt Dashboard aus und ziehen es in den Flow-Tab. Nun verbinden Sie es mit dem s7 Node. Der Gauge Node zeigt aktuell mit einem roten Dreieck an, dass er noch nicht ausreichend konfiguriert ist. Es reicht, wenn Sie ihn auswählen und auf Done klicken, dann wird er automatisch der Defaultanzeigegruppe hinzugefügt. Wenn wir nun deployen, würde unsere Anzeige zwar funktionieren, aber nur die Werte von 1 bis 10 anzeigen. Der analoge Sensor von LOGO! liefert Werte zwischen0 und1023. Das bedeutet, dass wir noch einmal in Gauge hineinklicken und die Range auf 0 bis 1000 anpassen müssen. Mit Done speichern Sie die Änderung und verlassen das Menü. Nun ist immer noch ein blauer Kringel an der Gauge zu sehen. Er zeigt an, dass ein Node noch nicht deployt wurde – das erledigen wir jetzt. Unter http://:1880/ui können Sie jetzt das Dashboard aufrufen. In nächsten Abschnitt sehen wir uns an, wie man die digitalen Ein- und Ausgänge von LOGO! in Node-RED einbindet.

Digitale Ein- und Ausgänge

Wir haben uns in den vorherigen Abschnitten sehr detailliert angesehen, was alles zu tun ist, um die analogen Daten von LOGO! in Node-RED einzubinden. Daher können wir uns bei den digitalen Ein- und Ausgängen etwas kürzer fassen. Prinzipiell werden digitale Daten genauso eingebunden wie analoge Daten. Den s7 Endpoint haben wir schon definiert. Das heißt, wir müssen ihn nur erweitern. Erweitern heißt in unserem Fall, zusätzliche Variablen in die Liste der Variablen mitaufzunehmen. Klicken Sie dazu bitte auf den Endpoint und editieren diesen. Den Reiter Connection lassen wir unverändert. Wählen Sie nun den Reiter Variables aus. Hier können Sie nun folgende Variablen hinzufügen:

DB1,X4.0 I1
DB1,X4.1 I2
DB1,X4.2 I3
DB1,X4.3 I4
DB1,X4.4 I5
DB1,X4.5 I6
DB1,X5.0 Q1
DB1,X5.1 Q2
DB1,X5.2 Q3
DB1,X5.3 Q4

Nachdem Sie den Endpoint mit den zusätzlichen Variablen erweitert haben, erzeugen Sie sich mit Copy-and-paste acht zusätzliche Nodes für die Eingänge von LOGO!. Nun passen Sie die Nodes so an, dass sie immer nur eine Variable liefern. Die Nodes verbinden Sie nun mit Switches. Der Switch kann auch zur Anzeige von logischen Werten verwendet werden. Wenn Sie die einzelnen Elemente etwas aufgeräumter im Dashboard haben möchten, fassen Sie die Eingangs- und Ausgangsanalogwerte jeweils in Gruppen zusammen.

Für die vier Ausgänge von LOGO! benötigen Sie nun noch s7-Ausgänge. Auch hier gilt: einen Ausgang erzeugen, danach die restlichen kopieren und die Konfiguration der Nodes anpassen.

In Abbildung 11 sehen Sie den kompletten Flow, mit dem Sie alle Werte aus LOGO! verwenden können. Das dazugehörige Dashboard könnte wie in Abbildung 12 aussehen. Wir sind hier absichtlich nicht besonders tief in die Layoutmöglichkeiten des Dashboards eingestiegen, weil man sehr schnell durch einfaches Ausprobieren an das gewünschte Ziel kommt. Das Dashboard ist eine wirklich leicht zu verwendende Komponente.

Abb. 11: Alle Nodes, um LOGO! mit Node-RED anzusteuern

Abb. 11: Alle Nodes, um LOGO! mit Node-RED anzusteuern

Abb. 12: Das Dashboard mit allen Ein- und Ausgängen

Abb. 12: Das Dashboard mit allen Ein- und Ausgängen

Fazit

Wir haben hier nur einen Bruchteil dessen zeigen können, was mit Node-RED möglich ist. In Verbindung mit LOGO! haben wir unendlich viele Möglichkeiten, kleine und große IoT-Projekte in die Tat umzusetzen. Es ist einfach möglich, LOGO! mit vielen unterschiedlichen IOT-Geräten oder Datenquellen zu verbinden. Über das Dashboard können wir mit wenig Aufwand einen guten Überblick über das Projekt bekommen. Wenn man erst einmal eine Node-RED-Instanz am Laufen hat, fragt man sich, warum man nicht schon immer damit gearbeitet hat. Das vorinstallierte Node-RED auf dem IOT2000 erleichtert es enorm, vernetzte Projekte mit IoT-Geräten aufzubauen.

Entwickler Magazin

Entwickler Magazin abonnierenDieser Artikel ist im Entwickler Magazin erschienen.

Natürlich können Sie das Entwickler Magazin über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Shop ist das Entwickler Magazin ferner im Abonnement oder als Einzelheft erhältlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

1 Kommentar auf "Node-RED & LOGO!: Datenvisualisierung im IoT"

avatar
400
  Subscribe  
Benachrichtige mich zu:
Jakob
Gast

Ich wollte mich nur mal bedanken für den sehr hilfreichen Beitrag. Er hat mir sehr geholfen das Setup richtig einzustellen. Daumen hoch.

X
- Gib Deinen Standort ein -
- or -