Fernüberwachung mithilfe von IIoT-Routern und Datengateways
Fernerfassung von Daten mit Java und Basic
Im zweiten Artikel dieser Serie wurde gezeigt, wie Daten von Maschinen und Anlagen, die sich an mehreren Standorten befinden, gesammelt werden und wie die Daten auf einem zentralen Server aggregiert und mithilfe einer Monitoringsoftware eines beliebigen Anbieters analysiert werden. Automatisierungs- und Softwareentwickler können nun mit Datenfernlösungen, die die Basic- und Java-Programmierung untersützen, ihren eigenen Code schreiben, um IIoT-Router an die jeweiligen Anforderungen anzupassen.
Das eWon Flexy unterstützt die Basic- und Java-Programmierung. Benutzer können so ihren eigenen Code schreiben, um den IIoT-Router an ihre Anforderungen anzupassen. Die Syntax der Basic-Programmstruktur des Gerätes kommt der des Standard-Basic sehr nahe, bietet aber spezifische Zusatzfunktionen. Damit lassen sich z.B. folgende Funktionen ausführen:
- • Internet-Verbindung via WAN als Fallback für die Standard-Mobilfunkverbindung, falls diese temporär nicht zur Verfügung steht
- • E-Mails senden, SMS senden/empfangen
- • Historische Daten als CSV-Datei auf eine externe Speicherkarte exportieren
- • Prüfen, ob die Alarmbenachrichtigung ordnungsgemäß gesendet wird
- • Komplexere Alarmbedingungen erstellen
- • Benutzerdefinierte Textdateien erstellen/ändern/löschen
- • Ein eigenes Client-Protokoll (seriell oder IP) entwickeln, um Daten von nicht standardisierten Feldgeräten zu erfassen
- • Daten über HTTP(S) und MQTT (ThingWorx, AWS, BlueMix, Azure), FTP oder per E-Mail senden.
Das Flexy verfügt zudem über eine integrierte Webentwicklungsumgebung, in der Benutzer ihr eigenes Basic-Programm erstellen können. Über diese Schnittstelle ist es z.B. möglich, Abschnitte innerhalb des Codes zu verwalten, einen Code zu importieren/exportieren, Syntax-Highlighting zu verwenden, eine Suche im Code durchzuführen, Codes schrittweise zu debuggen oder sich Fehler/Befehle direkt in der Konsole anzeigen zu lassen bzw. direkt von dort zu auszudrucken.
Programmierung mit Java
Das Gerät unterstützt ebenfalls die Java-Programmierung, die von IT-Entwicklern für komplexere Anwendungen bevorzugt wird, wie z.B.:
- • Große Anwendungen/OEM-Anwendungen
- • Erstellen eines eigenen Publishing-Protokolls (Flexy als Server)
- • Programmieren eines I/O-Servers
Die Java-Programmierung bietet darüber hinaus die gleichen Möglichkeiten wie die Basic-Programmierung. Das Ewon Java Toolkit (ETK) basiert auf der J2SE-Technologie (JAVA Standard Edition). Gemeinsam mit ETK API bietet J2SE ein umfangreiches Framework mit zahlreichen Möglichkeiten für die Entwicklung von Anwendungen. Im Folgenden werden drei praktische Beispiele aufgeführt. Das erste Beispiel ist ein Fallback-Mechanismus, um die Netzwerkverbindung für den Fall zu gewährleisten, dass die Ethernet-WAN-Verbindung ausfällt. Das zweite Beispiel zeigt, wie Daten mit HTTP(S) über das Internet an die IoT-Plattform ThingWorx von PTC gesendet werden. Das dritte Beispiel beschreibt, wie mit MQTT Informationen mit der IoT-Plattform Bluemix von IBM ausgetauscht werden.
Beispiel 1: Änderung des Empfängers von Alarmbenachrichtigungen in Abhängigkeit von der Tageszeit
Beim Monitoring könnte es interessant sein, den Empfänger der Alarmbenachrichtigung in Abhängigkeit von der Tageszeit zu ändern. In diesem Beispiel wird die E-Mail-Alarmbenachrichtigung 'Tank1level', die mitteilt, wenn Tank1 voll ist, zwischen 8 und 16 Uhr an Ingenieur 1 gesendet. Außerhalb dieser Tageszeiten wird die E-Mail-Benachrichtigung an Ingenieur 2 gesendet. Die OnAlarm-Funktion wird hier genutzt, um jeweils nach der Änderung des spezifischen Alarmstatus einen bestimmten Skriptabschnitt auszuführen. Dann wird unverzüglich nach der Änderung des Alarmstatus von 'Tank1Level' der Skriptabschnitt 'Send_Notification' ausgeführt. Die erste Skriptzeile ist dabei eine Bedingung, die prüft, ob der Alarm aktiviert ist (IF AlarmStatus% = 2). Das heißt, dass keine Benachrichtigung gesendet wird, wenn der Alarmstatus von aktiviert auf deaktiviert wechselt. Danach werden die Zeitdaten vom Flexy abgerufen und in einer lokalen Variablen (Temp_Time$ = Time$) gespeichert. Da diese Variable auch das Datum, die Minuten und die Sekunden (z.B. 11.10.2017 15:02:53) beinhaltet, werden die Stunden durch Angabe der Position in der Zeichenfolge (Val Temp_Time$ (12 To 13)) extrahiert. Somit ist es einfach, die Bedingung zu erstellen: "Wenn die Uhrzeit (Stunden) einen Wert zwischen 8 und 16 hat, (Then) E-Mail-Benachrichtigung (SendMail) an Ingenieur 1 senden. Andernfalls (Else) die Benachrichtigung an den anderen Ingenieur (Engineer2) senden." Abschließend wird die Printfunktion genutzt, um eine Nachricht in der Konsole anzuzeigen und die Programmausführung zu debuggen.
Beispiel 2: Senden von Daten über HTTP(S) (ThingWorx)
Das Flexy kann Daten über HTTP(S) senden. Das lässt sich nutzen, um Daten zwischen dem Gerät und IoT-Plattformen von Drittanbietern wie AWS (Amazon), BlueMix (IBM), Azure (Microsoft) oder ThingWorx (PTC) zu übertragen. ThingWorx ist eine der bekanntesten IoT-Plattformen in den USA. Diese Plattform erfasst alle Arten von Daten und ermöglicht die Nutzung erweiterter Funktionen wie 'erweiterte Realität' (englisch: augmounted reality, kurz AR) und Algorithmen für maschinelles Lernen. Im Script wird bei Änderung eines Tag-Werts (Onchange 'Tagname') der Wert durch Aufrufen der Funktion 'UpdateThingWorxProperty' an ThingWorx gesendet. Der Thingworx 'AppKey' sowie der 'TagName' des Tags, der die Funktion aufgerufen hat, werden direkt in den Funktionsparametern angegeben. Nach dem Aufruf der Funktion werden einige weitere Parameter benötigt, wie die Thingworx-Projekt-URL, die HTTP(S)-Methode ($Method$ = 'Put') und der entsprechende Tag-Wert ($Tagvalue = GETIO $Tagname$). Sobald diese Daten korrekt in Variablen gespeichert sind, können die JSON-Datei (zu sendende Daten) und der HTTP-Header (Inhaltstyp und ThingWorx AppKey) zusammen mit der ThingWorx-URL und der HTTP-Methode mit der Funktion RequestHTTPX verkettet werden.
Beispiel 3: Tag-Werte über MQTT auf der IoT-Plattform Bluemix veröffentlichen
Das Ewon Flexy unterstützt ebenfalls das Message-Queue-Telemetry-Transport (MQTT)-Protokoll. MQTT wurde entwickelt, um die Übertragung kleiner Datenmengen zu vereinfachen, die sich auf einer großen Anzahl an Servern und Clientgeräten befinden, die durch geringe Bandbreiten, hohe Latenzzeiten oder unzuverlässige Netzwerke eingeschränkt sind, und eignet sich somit für dynamische Kommunikationsumgebungen. Der Hauptzweck ist dabei die Fernüberwachung. Die Vorteile der Nutzung des MQTT-Protokolls mit Ewon Flexy bestehen in der Möglichkeit, Operationen ohne Datenverlust ab einem beliebigen Haltepunkt wieder aufzunehmen. Darüber hinaus lassen sich Daten bei Netzwerkunterbrechungen puffern, bis die Netzwerkkommunikation wieder aufgenommen wird und ein Client die Daten liest. Um Tag-Werte (hier 'Temperatur') auf der IoT-Plattform Bluemix von IBM mithilfe von MQTT und einem Basic-Skript zu publizieren, stellen Anwender zunächst die benötigten Parameter über 'MQTT SetParam' ein und stellen eine Verbindung zum MQTT-Broker (MQTT 'Connect)' her. Timer 1 des Flexy ist dann so eingestellt, dass alle 5s die Funktion 'MqttPublishValue' (TSet 1,5; OnTimer 1, 'Goto MqttPublishValue') ausgeführt wird. Es ist erforderlich, in die MqttPublishValue-Funktion ein kurzes Skript zu integrieren, um die Struktur der Flexy-Zeitwerte (Time$) an die der IoT-Plattform anzupassen. Sobald das erledigt ist, kann die JSON-Mitteilung ermittelt und über MQTT (MQTT 'Publish') auf der Plattform veröffentlicht werden. Schließlich wird nach der Überprüfung des Verbindungsstatus (If ConnectionStatus% = 5) der Printbefehl genutzt, um durch Anzeige der Zeichenfolge 'Value published to Bluemix' auf der Konsole zu bestätigen, dass das Skript ordnungsgemäß ausgeführt wurde. Ein wichtiger Hinweis: Obwohl im Beispiel zur Vereinfachung und Erleichterung des Verständnisses kein verschlüsseltes MQTT verwendet wird, wird dringend empfohlen das ebenfalls unterstützte MQTT TLS zu benutzen.
Fazit
Diese Beispiele haben gezeigt, wie einfach es für Entwickler ist, die Funktion des IIoT-Routers und Daten-Gateways an die eigenen Anforderungen anzupassen. Viele weitere Beispiele von Basic- oder Java-Programmen, die von der Ewon-Entwickler-Community erstellt wurden, finden sich auf https://developer.ewon.biz bzw. auf dem Ewon-Techforum https://techforum.ewon.biz/. Die Website developer.ewon.biz wurde speziell für Entwickler erstellt und bietet umfassende Informationen über die im Ewon Flexy verwendeten Technologien sowie über die Talk2M-Plattform.
Artikelserie: Fernzugriff auf Maschinen und Anlagen
ICJ 2/2017: Schritt für Schritt zur Remote-Access-Lösung
ICJ 3/2017: Plug&Play-Lösung für die Datenfernerfassung
ICJ 4/2017: Fernüberwachung für Automatisierungs- und Software-Entwickler
Im zweiten Artikel dieser Serie wurde gezeigt, wie Daten von Maschinen und Anlagen, die sich an mehreren Standorten befinden, gesammelt werden und wie die Daten auf einem zentralen Server aggregiert und mithilfe einer Monitoringsoftware eines beliebigen Anbieters analysiert werden. Automatisierungs- und Softwareentwickler können nun mit Datenfernlösungen, die die Basic- und Java-Programmierung untersützen, ihren eigenen Code schreiben, um IIoT-Router an die jeweiligen Anforderungen anzupassen.
Das eWon Flexy unterstützt die Basic- und Java-Programmierung. Benutzer können so ihren eigenen Code schreiben, um den IIoT-Router an ihre Anforderungen anzupassen. Die Syntax der Basic-Programmstruktur des Gerätes kommt der des Standard-Basic sehr nahe, bietet aber spezifische Zusatzfunktionen. Damit lassen sich z.B. folgende Funktionen ausführen:
- • Internet-Verbindung via WAN als Fallback für die Standard-Mobilfunkverbindung, falls diese temporär nicht zur Verfügung steht
- • E-Mails senden, SMS senden/empfangen
- • Historische Daten als CSV-Datei auf eine externe Speicherkarte exportieren
- • Prüfen, ob die Alarmbenachrichtigung ordnungsgemäß gesendet wird
- • Komplexere Alarmbedingungen erstellen
- • Benutzerdefinierte Textdateien erstellen/ändern/löschen
- • Ein eigenes Client-Protokoll (seriell oder IP) entwickeln, um Daten von nicht standardisierten Feldgeräten zu erfassen
- • Daten über HTTP(S) und MQTT (ThingWorx, AWS, BlueMix, Azure), FTP oder per E-Mail senden.
Das Flexy verfügt zudem über eine integrierte Webentwicklungsumgebung, in der Benutzer ihr eigenes Basic-Programm erstellen können. Über diese Schnittstelle ist es z.B. möglich, Abschnitte innerhalb des Codes zu verwalten, einen Code zu importieren/exportieren, Syntax-Highlighting zu verwenden, eine Suche im Code durchzuführen, Codes schrittweise zu debuggen oder sich Fehler/Befehle direkt in der Konsole anzeigen zu lassen bzw. direkt von dort zu auszudrucken.
HMS Industrial Networks GmbH
Dieser Artikel erschien in Industrial Communication Journal 4 2017 - 08.12.17.Für weitere Artikel besuchen Sie www.sps-magazin.de