Java im industriellen Einsatz auf der Steuerung sysWORXX CTR-700
Applikationsbeschreibung Java
Allgemeine Informationen
Die objektorientierte Programmiersprache Java existiert bereits seit 1995 und ist seit jeher eine der beliebtesten und am weitesten verbreiteten. Java hat sich über die Jahre stets weiterentwickelt und wird mittlerweile in Programmen und Anwendungen aus den unterschiedlichsten Branchen eingesetzt. Dazu gehören beispielsweise Banken und Kreditinstitute, aber auch Versicherungsgesellschaften. Java wird ebenso häufig im Bereich der Webentwicklung, sowohl für Front- als auch Back-End, angewendet. Weiterhin kann Java natürlich auch für industrielle Anwendungen, wie auf dem sysWORXX CTR-700, verwendet werden.
Java zeichnet sich dabei besonders durch seine Plattformunabhängigkeit aus. Einmal erstellt, lassen sich Java-Programme auf nahezu jeder beliebigen Hardware ausführen. Dabei ist es unerheblich, ob es sich dabei um ein Smartphone, Tablet, Windows- oder Linux-PC handelt. Diese Unabhängigkeit setzt lediglich zwei Dinge voraus:
- Verwendete Ressourcen müssen vorhanden sein, beispielsweise Kommunikationsschnittstellen oder etwa (digitale oder analoge) Ein- und Ausgänge.
- Auf dem ausführenden System muss eine entsprechende Java Runtime Environment (JRE) vorhanden sein. Für die meisten Betriebssysteme ist dies immer gegeben
Ein weiterer und nicht zu unterschätzender Vorteil von Java ergibt sich durch die sehr weite Verbreitung: jeder angehende Softwareentwickler, Informatiker, oder auch Hobby-Programmierer wird schon in der Anfangsphase seiner (beruflichen) Laufbahn mit Java in Kontakt kommen. An vielen Hochschulen wird es beispielsweise schon in den ersten Semestern behandelt. In den Weiten des Internets wird Java verbreitet zudem oft als „Programmiersprache für Anfänger“ empfohlen.
Integration auf dem sysWORXX CTR-700
Durch die weitestgehende Plattformunabhängigkeit von Java, ist die Ausführung einer entsprechenden JRE auch auf modernen (Automatisierungs-) Systemen möglich. Mit dem Edge Controller sysWORXX CTR-700 wird standardmäßig die freie Javaimplementierung OpenJDK angeboten. Mit dieser lassen sich ohne weiteres Java-Programme ausführen und für den industriellen Gebrauch anwenden.
Für das sysWORXX CTR-700 ist eine entsprechende Klassenbibliothek vorhanden, mit der die verschiedenen Hardwareinterfaces und IOs in eine Java-Applikation eingebunden werden können. So kann mit Java nicht nur eine generische Datenverarbeitung durchgeführt werden, sondern es kann direkt auf die Hardware- Peripherie des Gerätes zugegriffen werden.
Im Weiteren wird durch eine Demo- Anwendung veranschaulicht, wie eine Java-Applikation in Kombination mit dem sysWORXX CTR-700 angewendet werden kann.
MQTT-Demo inklusive I/O-Anbindung
Bei dem folgenden Beispielprogramm handelt es sich um eine Java-Applikation, welche als MQTT-Client auf dem sysWORXX CTR-700 eingesetzt wird. Dieser Client verbindet sich mit einem MQTT-Broker, abonniert vorgegebene Topics und schaltet entsprechend der eintreffenden Nachrichten die digitalen Ausgänge des Gerätes an oder aus.
Das gesamte Projekt kann am Ende dieses Artikels heruntergeladen und selbständig nachvollzogen werden. Die darin vorgenommenen Einstellungen sind die gleichen, auf welche in dem folgenden Text eingegangen wird.
Voraussetzungen
Für dieses Beispiel muss ein Maven-Project in Eclipse (4.11) angelegt und die entsprechenden Abhängigkeiten importiert werden. Neben den notwendigen Maven-Abhängigkeiten (maven-dependency-plugin, maven-compiler-plugin, maven-jar-plugin) ist es für den MQTT-Client erforderlich, das „Eclipse Paho”-Projekt, sowie die „Java Native Access”-Bibliothek einzubinden.
Zusätzlich wird die Treiber-Klasse für das sysWORXX CTR-700 benötigt. Diese kann aus der virtuellen Maschine für das sysWORXX CTR-700 bezogen oder aus diesem Demo-Projekt entnommen werden. Die folgende Abbildung zeigt, wie der Projektbaum aussehen sollte.
Neben dem sysWORXX CTR-700 und einer Verbindung zu einem Computer, werden zusätzlich noch ein MQTT-Broker und ein zweiter steuerbarer Client benötigt. Als MQTT-Broker kann beispielsweise ein mosquitto-Broker auf dem sysWORXX CTR-700 dienen, aber ebenso kann jeder andere Broker verwendet werden, zu dem eine Verbindung möglich ist.
Der zweite MQTT-Client muss in der Lage sein, auf die vorgegebenen Topics, welche das sysWORXX CTR-700 abonniert, Nachrichten zu senden. Dafür kann beispielsweise eine weitere Java-Applikation verwendet werden. In dieser Demonstration wird dafür Node-RED verwendet. Die Folgende Abbildung zeigt den schematischen Ablauf:
Programmablauf
Der Aufbau und die Funktionsweise des Hauptprogramms sind in der „Main.java” Datei zu finden. Bevor eine Verbindung aufgebaut werden kann, werden alle benötigten Variablen angelegt und Initialisierungen vorgenommen.
Es ist erforderlich, dass für eintreffende Nachrichten und Verbindungsabbrüche entsprechende Callback-Funktionen für den MQTT-Client angelegt werden. Eintreffende Nachrichten werden nicht nur angenommen, sondern auch zusätzlich auf der Konsole ausgegeben. Verbindungsabbrüche werden ebenso auf der Konsole angezeigt.
Beim Eintreffen neuer Nachrichten wird die Payload und das Topic je in einem Array gespeichert, damit diese außerhalb der Callback-Funktion weiterverarbeitet werden können. Ebenso wird ein Flag gesetzt, um eine neue Nachricht zu signalisieren.
Anschließend wird die Hauptschleife des Programms ausgeführt. Der Client erstellt eine Verbindung mit der angegebenen IP-Adresse eines vorhandenen MQTT-Brokers und abonniert nach erfolgreicher Verbindung insgesamt vier Topics. Die im Beispiel genutzte IP-Adresse ist 192.168.64.100 und der Standard-Port für MQTT 1883.
Im Beispiel werden folgende Topics verwendet:
- ctr700/do0
- ctr700/do1
- ctr700/do2
- ctr700/do3
Nachdem eine erfolgreiche Verbindung aufgebaut ist, befindet sich das Programm in einer Dauerschleife. Diese wird erst beendet, wenn die Verbindung zum MQTT-Broker unterbrochen wird, woraufhin es erneut versucht eine Verbindung aufzubauen, oder das Programm beendet wird (STRG + C auf dem CTR-700). Diese Schleife führt nur beim Eintreffen neuer MQTT-Nachrichten eine Auswertung aus. Weiterhin beschreibt sie in jedem Zyklus die digitalen Eingänge entsprechend des digiOut-Arrays. Dieses Array hält die Informationen über die Schaltungszustände der digitalen Ausgänge
Sollte das Flag für eine neue eintreffende Nachricht gesetzt worden sein (siehe oben), wird folgende Auswertung der Nachricht durchgeführt:
- Es erfolgt eine Zuordnung, zu welchem abonnierten Topic die Nachricht passt.
- Bei dem ausgewählten Topic wird dann der Inhalt der Nachricht ausgewertet:
- ON: Der entsprechende digitale Ausgang wird auf high gesetzt (LED geht an). → digiOut[i] = true;
- OFF: Der entsprechende digitale Ausgang wird auf low gesetzt (LED geht aus). → digiOut[i] = false;
- Wenn nichts davon zutrifft, wird die Nachricht nicht beachtet.
- Abschluss der Auswertung → Verlassen des Programmabschnitts.
Die folgende Tabelle visualisiert die Reaktionen des Programms auf verschiedene Topics und Payloads.
Verwendung der Klassenbibliothek für das sysWORXX CTR-700
Damit der oben beschriebene Programmablauf funktioniert und die Hardware des sysWORXX CTR-700 verwendet werden kann, muss eine entsprechende Instanz des CTR-700-I/O-Treibers erstellt und initialisiert werden. Dies erfolgt am Anfang des Programms, kann aber an einer beliebigen Stelle vor der Verwendung des Interfaces sein. Dies wird wie folgt durchgeführt:
Ctr700Drv ctr700 = new Ctr700Drv();
ctr700.init();
Nach der Initialisierung, kann die Klasse für das sysWORXX CTR-700 wie jede beliebig andere Klasse verwendet werden. Beispielsweise wird für die spätere Ausgabe der digitalen Ausgänge die folgende Methode verwendet:
ctr700.setDigiOut(i, digiOut[i]);
Auch hier dient der Platzhalter i für die verwendeten Kanäle.
Eine Dokumentation jeder Eigenschaft und Methode der Klassenbibliothek, kann in der Java-Datei „Ctr700Drv.java” nachgelesen werden.
Folgend ist ein Ausschnitt aus der Demo aufgelistet. Dieser zeigt die Schleife in der sich das Programm dauerhaft befindet, nachdem alle benötigten Variablen und Klassen initialisiert wurden und eine Verbindung zum MQTT-Broker aufgebaut wurde.
Übertragung und Start der Applikation
Damit das Programm auf dem CTR-700 ausgeführt werden kann, muss dieses zunächst als ausführbare Jar-Datei kompiliert werden. In Eclipse kann dies über den Pfad “File → Export…” ausgeführt werden, wie in folgender Abbildung gezeigt.
Dort muss die Konvertierung zu „Runnable JAR file” ausgewählt sein. Im nächsten Schritt muss eine „Launch configuration” ausgewählt, ein Pfad festgelegt und der Haken für das „Library handling” muss bei „Package required libraries into generated JAR” ausgewählt werden. Folgende Abbildungen zeigen die jeweiligen Schritte.
Nach der Konvertierung muss die generierte Jar-Datei auf das Gerät übertragen werden. Am einfachsten kann dies mit einem SFTP-Tool, wie zum Beispiel WinSCP erfolgen.
Damit die Applikation nun gestartet werden kann, muss auf die Linux-Konsole des CTR-700 zugegriffen werden. Dies kann entweder über SSH oder die serielle Service-Schnittstelle (µUSB) durchgeführt werden. Nach der Anmeldung ist es notwendig, in das Verzeichnis zu wechseln, in dem sich die Jar-Datei befindet. Bevor es gestartet werden kann, ist es zwingend erforderlich, dass das Programm Rechte für die Ausführung bekommt. Dies kann über folgendes Kommando ausgeführt werden:
chmod +x demo.jar
Danach kann die Applikation mit dem folgenden Kommando gestartet werden:
java -jar demo.jar
Die folgende Abbildung zeigt, wie dieser Ablauf aussehen könnte. Für den Zugriff wurde eine Linuxdistribution verwendet. Der Zugriff unter Windows erfolgt jedoch auf die gleiche Weise.
Steuerung über den zweiten MQTT-Client
Nach der Ausführung der Applikation ist das CTR-700 bereit, über MQTT Daten zu verarbeiten. Beispielsweise kann sehr einfach über Node-RED, welches ebenfalls auf dem sysWORXX CTR-700 parallel dazu verwendet werden kann, eine Steuerung realisiert werden.
Es können dafür Injektor-Nodes mit einer MQTT-Node verbunden werden. Die Injektoren senden eine bestimmte Nachricht inklusive Topics dann über die MQTT-Node an den Broker, welcher diese an alle Subscriber weiterreicht. Folgende Abbildungen zeigen, wie die Injektor-Nachrichten konfiguriert werden und der Node-RED-Flow aufgebaut werden kann:
Für das Ein- und Ausschalten der jeweiligen digitalen Ausgänge gibt es je eine Injektor-Node.
Abschließende Hinweise
Das betrachtete Beispiel veranschaulicht, wie einfach das sysWORXX CTR-700 mit Java verwendet werden kann. Jeder Java-Entwickler kann auf dieser Basis Applikationen entwickeln, welche direkt mit den Schnittstellen des Gerätes interagieren können. Statt dieser relativ einfachen Anwendung, könnten dann beispielweise Sensoren und Aktoren an die digitalen Ein- und Ausgänge angebunden und gesteuert werden.
Für den Einstieg und die generelle Verwendung des sysWORXX CTR-700 bieten wir auf unserer Produkt-Website eine Linux-VM zum Download an. Diese umfasst eine vorkonfigurierte Xubuntu-Installation. Ebenso beinhaltet diese die Klassenbibliothek, welche für die Softwareentwicklung mit Java benötigt wird. Dort ist auch weiteres Informationsmaterial, wie das Gerätehandbuch, SD-Karten-Image (Betriebssystem, usw.), aber auch weiterführende Dokumentation zum sysWORXX CTR-700 zu finden.