Zugriff auf Prozessdaten unter Java



Ähnliche Dokumente
Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Übung: Verwendung von Java-Threads

EasyWk DAS Schwimmwettkampfprogramm

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

4D Server v12 64-bit Version BETA VERSION

Web Services stellen eine Integrationsarchitektur dar, die die Kommunikation zwischen verschiedenen Anwendungen

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

CADEMIA: Einrichtung Ihres Computers unter Linux mit Oracle-Java

INHALT 1. INSTALLATION DES V-MODELL XT UNTER WINDOWS 7 2. INSTALLATION DES V-MODELL XT UNTER WINDOWS VISTA

OP-LOG

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

Step by Step Remotedesktopfreigabe unter Windows Server von Christian Bartl

CADEMIA: Einrichtung Ihres Computers unter Windows

Programmieren in Java

Vorkurs Informatik WiSe 15/16

Kurzanleitung zu XML2DB

4 Objektorientierte Programmierung mit Java 4.1 Java-Grundlagen

Nutzung von GiS BasePac 8 im Netzwerk

2 Die Terminaldienste Prüfungsanforderungen von Microsoft: Lernziele:

Robot Karol für Delphi

Tapps mit XP-Mode unter Windows 7 64 bit (V2.0)

Wählen Sie bitte START EINSTELLUNGEN SYSTEMSTEUERUNG VERWALTUNG und Sie erhalten unter Windows 2000 die folgende Darstellung:

ObjectBridge Java Edition

Datensicherung. Beschreibung der Datensicherung

PHP Kurs Online Kurs Analysten Programmierer Web PHP

Applications Applets (eingeschränkte Rechte)

Datenbank-Verschlüsselung mit DbDefence und Webanwendungen.

LabView7Express Gerätesteuerung über LAN in einer Client-Serverkonfiguration. 1. Steuerung eines VI über LAN

Local Control Network Technische Dokumentation

Datenbank-basierte Webserver

Android Remote Desktop & WEB

Installation der SAS Foundation Software auf Windows

Ein mobiler Electronic Program Guide

Step by Step Webserver unter Windows Server von Christian Bartl

Einführung in PHP. (mit Aufgaben)

Webbasierte Installation des Cisco AnyConnect VPN-Client 3.1 unter Linux

Eine Einführung in die Installation und Nutzung von cygwin

Flashfragen in ILIAS Test & Assessment. Helmut Schottmüller

CADEMIA: Einrichtung Ihres Computers unter Mac OS X

Database Exchange Manager. Infinqa IT Solutions GmbH, Berlin Stralauer Allee Berlin Tel.:+49(0) Fax.:+49(0)

EKF Software Server. Handbuch. Version 2.1. Hersteller: 2008 mesics gmbh Berliner Platz Münster info@mesics.de

Online-Publishing mit HTML und CSS für Einsteigerinnen

ICS-Addin. Benutzerhandbuch. Version: 1.0

Vorlesung Objektorientierte Softwareentwicklung. Kapitel 0. Java-Überblick

Administrator Handbuch

mobilepoi 0.91 Demo Version Anleitung Das Software Studio Christian Efinger Erstellt am 21. Oktober 2005

Einführung zum Arbeiten mit Microsoft Visual C Express Edition

2. Kommunikation und Synchronisation von Prozessen 2.2 Kommunikation zwischen Prozessen

Lizenzen auschecken. Was ist zu tun?

Berner Fachhochschule Hochschule für Technik und Informatik HTI. Kapitel 1. Einstieg in Java. Dr. Elham Firouzi

Auto-Provisionierung tiptel 30x0 mit Yeastar MyPBX

Internet online Update (Internet Explorer)

JPC Visualisierung in Java

Verwendung des Terminalservers der MUG

zur WinIBW Version 2.3

Anleitung zum Extranet-Portal des BBZ Solothurn-Grenchen

Autorisierung. Sicherheit und Zugriffskontrolle & Erstellen einer Berechtigungskomponente

CONVEMA DFÜ-Einrichtung unter Windows XP

Installationsanleitung SSL Zertifikat

Anleitung mtan (SMS-Authentisierung) mit SSLVPN.TG.CH

Lokale Installation von DotNetNuke 4 ohne IIS

Konfiguration VLAN's. Konfiguration VLAN's IACBOX.COM. Version Deutsch

Java Virtual Machine (JVM) Bytecode

Installationsanleitung für CashPro im Mehrbenutzerzugriff/Netzwerkbetrieb

Objektorientierte Programmierung für Anfänger am Beispiel PHP

TechNote. Produkt: TWINFAX 7.0 (ab CD_24), TWINFAX 6.0 Modul: SMTP, T611, R3 Kurzbeschreibung: Briefpapier- und Mailbodyunterstützung

Installationsanleitung. Hardlock Internal PCI Hardlock Server Internal PCI

Web Sockets mit HTML5. Quelle:

Handbuch ECDL 2003 Basic Modul 5: Datenbank Grundlagen von relationalen Datenbanken

Backup-Server einrichten

Upgrade auf die Standalone Editionen von Acronis Backup & Recovery 10. Technische Informationen (White Paper)

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

Betriebshandbuch. MyInTouch Import Tool

Guide DynDNS und Portforwarding

Ist Excel das richtige Tool für FMEA? Steve Murphy, Marc Schaeffers

Anleitung zur Einrichtung eines Netzwerkes für den Gebrauch von GVService unter Windows 7

Dieser Ablauf soll eine Hilfe für die tägliche Arbeit mit der SMS Bestätigung im Millennium darstellen.

COSA. Portal Client Installation JAVA J2SE / JRE Version 1.4.2_09, Stand Copyright

Windows 8 Lizenzierung in Szenarien

Java Einführung Programmcode

Version smarter mobile(zu finden unter Einstellungen, Siehe Bild) : Gerät/Typ(z.B. Panasonic Toughbook, Ipad Air, Handy Samsung S1):

Automatische Installation (wenn das SSO-Applet nicht vorhanden ist)! Abbildung 1:Auswahldialog für Installationslaufwerk

3. Stored Procedures und PL/SQL

Herzlich willkommen bei der Installation des IPfonie -Softclients!

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Artikel Schnittstelle über CSV

1. Formulieren Sie den Algorithmus <Bedienung eines Getränkeautomaten> nach den oben genannten Kriterien.

Internet und WWW Übungen


HBF IT-Systeme. BBU-BSK Übung 2 Stand:

Java Enterprise Architekturen Willkommen in der Realität

KURZANLEITUNG CYBERDUCK MIT CLOUD OBJECT STORAGE

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

DLLs (dynamic loaded libraries) mit MingW erstellen

Transkript:

Zugriff auf Prozessdaten unter Java N. JAZDI Institut für Automatisierungs- und Softwaretechnik (IAS), Universität Stuttgart SUMMARY Java has gained increasing importance in the field of industrial automation for many different reasons. Compared to other programming languages, Java is easier to use and strictly object-oriented. It is also platform independent, meaning that this programming language can create programs that execute on various platforms. Due to this special feature, it is not possible to access direct process control within a java application, which, unfortunately, is a very important need in industrial automation. This paper descripes potential solutions to overcome this lack within Communications API (Application Programming Interface ) and JNI (Java Native Interface) technologies. 1 EINLEITUNG Der enorme Wettbewerbs- und Kostendruck in der gesamten Automatisierungstechnik fordert nachdrücklich neue Technologien, die der Welt der Globalisierung und des Internets gewachsen sind. Web-Technologien sind hierbei die richtige Lösung. Sie bieten viele Vorteile, die in der Welt der Automatisierungstechnik unbedingt gebraucht werden, um mit den ständig wachsenden Anforderungen Schritt halten zu können. Der weltweite Zugriff auf Prozessdaten, die Ferndiagnosen und die Fernwartung über das Internet und die Beibehaltung bestehender Software sind einige dieser Vorteile. Sie bieten einen effektiveren Informationsaustausch und tragen zur Senkung der Kosten bei. und die Fernbedienung bzw. Fernsteuerung der Automatisierungssysteme soll dabei über eine Internet- Architektur geschehen. Die verschiedenen Komponenten, die zur Realisierung dieses Konzeptes notwendig sind, wie z.b. die Kommunikations- oder die Prozessvisualisierungskomponente, würden in individuell gestaltete Web-Seiten integriert. Bild 1 zeigt die Architektur des Konzeptes. Browser Mit Hilfe der Web-Technologien ist es möglich, verschiedene Haushaltsgeräte zu vernetzen und sie über einen PC zu bedienen bzw. zu überwachen. Sollte ein Gerät, wie z.b. die Waschmaschine defekt sein, reicht es aus, dass die Reparaturfirma über ein Netz die Verbindung zu dem defekten Gerät aufnimmt, um eine Ferndiagnose zu stellen. Grundsätzlich wäre es denkbar, dass sogar Teile der möglichen Softwarefehler über das Netz zu beheben sind (Fernwartung) bzw. dass nach der Feststellung der Hardwarefehler die Wartungskosten enorm sinken könnten. Prozessautomatisierungssystem Datenbankanbindung Internet/Intranet Das Institut für Automatisierungs- und Softwaretechnik der Universität Stuttgart hat eine Forschungsinitiative mit den Firmen Adstec [1] und aims GmbH [2] begonnen, um diesem Ziel einen Schritt näher zu kommen. Das Ziel des Forschungsvorhabens ist eine plattformübergreifende und herstellerunabhängige Lösung zur Überwachung und Steuerung komplexer technischer Prozesse über das Internet bzw. Intranet zu realisieren. Die Prozessüberwachung räumlich getrennter Anlagen Technischer Prozess Bild 1: Überwachung und Steuerung komplexer technischer Prozesse über das Internet bzw. Intranet Der Bediener (Client-Seite) baut eine Verbindung zum technischen Prozess über ein Netz (z.b. Internet/Intranet) via Browser auf. Auf der Server-Seite übernimmt die Systemverwaltungskomponente die zentrale Aufgabe der Steuerung und Koordinierung aller

Abläufe, wie die Datenbankanbindungen, die Erstellung statischer bzw. dynamischer HTML-Anteile oder die Prozessankopplung. Die Prozessankopplung ist eine sehr komplexe Aufgabe, da die Prozessdaten zum Teil unter Echtzeitanforderungen gelesen bzw. geschrieben werden müssen. Zur Prozessankopplung sollen in der Forschungsinitiative unter anderem die Einsatzmöglichkeiten von Java untersucht und falls möglich eingesetzt werden. Java repräsentiert derzeit die wohl attraktivste Möglichkeit für den plattformunabhängigen Austausch von Applikationen im Internet. Java bietet die Möglichkeit, dass der Benutzer auf der Client-Seite interaktiv mit der Java- Applikation kommuniziert. In diesem Beitrag soll versucht werden, den Zugriff auf Prozessdaten unter Java zu erläutern. Nach einer allgemeinen Beschreibung der Sprache Java werden zwei zentrale Möglichkeiten eines Zugriffs auf Prozessdaten unter Java durch den Einsatz von Communications API und JNI-Technologien, beschrieben. 2 JAVA Sun Microsystems hat Java wie folgt definiert: Java ist eine einfache, objektorientierte, verteilte, interpretierte, robuste, sichere, portable, multithread-fähige und dynamische Sprache [3]. Java ist eine objektorientierte Programmiersprache, die an C++ angelehnt ist und einige Elemente von Smalltalk übernommen hat. Dazu zählen beispielsweise Bytecode oder Garbage collection (automatische Speicherverwaltung) [4]. Java ist nicht nur eine Sprache, sondern bildet mit dem Objektformat Java-Bytecode und der Java virtuellen Maschine (JVM) eine vollständige Systemplattform. Damit werden komplette Entwicklungssysteme bis hin zum inkrementellen Fern -Laden von Modulen als Ganzes direkt nutzbar bzw. austauschbar. Portierungsprobleme, wie sie allein schon durch den Übergang von einem Compiler auf einen anderen entstehen, tauchen nicht mehr auf. Um dies zu gewährleisten, wurde auf ein bewährtes Prinzip zurückgegriffen: Es wird eine virtuelle Maschine definiert, für die auf den heute üblichen Hardwareplattformen effiziente Interpreter implementiert werden können. Java-Programme werden mit einem Compiler in den sog. Bytecode für die Java virtuelle Maschine übersetzt. Java ist vollständig objektorientiert aufgebaut. Es ähnelt in weiten Zügen C++, verzichtet jedoch auf dessen prozeduralen Hintergrund. Java ermöglicht, die Vorteile der objektorientierten Methodologie und ihre Fähigkeiten des Entwickelns flexibler modularer Programme sowie die Mehrfachverwendung des Codes voll auszuschöpfen. Java- Quellcode Java Compiler Java- Bytecode Bild 2: Java Entwicklungsumgebung Ein Java Bytecode besteht aus Anweisungen für die JVM. Dies bedeutet, dass diese Anweisungen nicht für ein spezifisches System ausgelegt sind, sondern auf jeder Plattform unter jedem Betriebssystem lauffähig sind, so lange ein Java-Interpreter verfügbar ist. Diese Möglichkeit der Verfügbarkeit einer einzelnen Binärdatei, die auf beliebigen Plattformen ausführbar ist, spielt im Zusammenhang mit Applets (Java Anwendungen, die in einer Web-Seite ausgeführt werden können) die entscheidende Rolle, weil das World Wide Web selbst plattformunabhängig ist. Ebenso wie HTML- Dateien auf jeder Plattform gelesen werden können, lassen sich Applets auf jeder javafähigen Browser-Plattform ausführen. Während jede zugrundeliegende Plattform ihre eigene Implementierung der JVM hat, gilt jeweils dieselbe Spezifikation. Aufgrund dieses Umstandes kann die Java-Plattform eine Standard- und eine konstante Programmierungsschnittstelle zu den Applets und den Anwendungen auf jeder möglichen Hardware zur Verfügung stellen. Folglich ist die Java-Plattform für das Internet ideal, da ein Programm auf jedem Computer in der Welt lauffähig sein soll. Java Interpreter Java Bytecode lokal oder via Netz Class Loader Laufzeitsystem Betriebssystem Hardware Just-In-Time Compiler Bild 3: Java Laufzeitumgebung Java Klassen- Bibliothek JVM Ein weiteres Merkmal von Java ist das Multithreading. Es erlaubt einem Programm, mehrere Programmteile gleichzeitig ablaufen zu lassen. Die Standardbibliothek von Java bietet bereits Klassen, mit denen verteilte Anwendungen auf der Basis von

TCP/IP einfach realisiert werden können. Die Java Remote Method Invocation (RMI) ermöglicht es auf sehr einfache Weise, Client-Server-Applikationen zu erstellen [5]. RMI ist eine Schnittstelle für verteilte Java Objekte. Sie ist in drei Schichten aufgeteilt. Die oberste, die Stub- Skeleton Schicht, ist für die Verwaltung der verteilten Objekte zuständig, die Remote Reference Schicht für die Kommunikation zwischen Client/Server und der JVM und schließlich die Transportschicht für die eigentliche Netzwerkfunktionalität. Die Netzwerkanbindung basiert auf dem TCP/IP Protokoll. RMI Client Stubs Remote Reference Transport Virtuelle Verbindung Netzwerkverbindung Bild 4: Die RMI Architektur RMI Server Skeleton Remote Reference Transport Der Verzicht auf Pointer leistet den größten Beitrag zur Vereinfachung der Programmiersprache, ohne dass dafür die Leistung gemindert wurde. Statistiken haben aufgezeigt, dass ein großer Teil von Fehlern in C/C++- Programmen auf Fehler bei der Pointer-Verarbeitung zurückzuführen sind. Der Verzicht der Java-Entwickler auf Operator-Overloading, multiple Vererbung und die Einschränkung der automatischen Typumwandlung tragen ebenfalls zu einer höheren Verlässlichkeit der Java-Programme bei. 3 ZUGRIFF AUF HARDWARE UNTER JAVA Java bietet keine Möglichkeit zum direkten Zugriff auf Systemressourcen. Solch ein Zugriff würde das Plattformunabhängigkeitsprinzip von Java verletzen, da z.b. die Schnittstellen plattformabhängig sind. Der Zugriff auf Netzwerkdaten ist dagegen möglich, falls der Webserver und die Applikation auf dem gleichen Rechner laufen. Hierzu ist jedoch ein Zugriff auf Prozessdaten explizit zu erlauben. Java bietet zwei Möglichkeiten, um auf die Systemressourcen zuzugreifen: Das Java Communications API (Application Programming Interface) und das Java Native Interface (JNI). Im Folgenden sollen beide Methoden kurz beschrieben werden. 3.1 Java Communications API Das Java Communications API, das als Standarderweiterung für die Java Plattform gilt, kann verwendet werden, um plattformunabhängige Kommunikationsanwendungen für Technologien wie Sprachpost (voice mail), Telefax und Smart Cards zu schreiben. Diese Communications API enthält einige beispielhafte Anwendungen, mit denen sich die Funktionalität der Ports überprüfen läßt. Das Communications API enthält Unterstützung für serielle Schnittstellen RS232 und IEEE 1284 parallele Ports. Das Java Communications Extension API besteht aus Klassen auf drei Ebenen, aus: Hochstufenklassen (high-level) wie CommPortIdentifier und CommPort, die den Zugriff und Besitz der Kommunikationsports verwalten, den Niedrigstufenklassen (low-level) wie SerialPort und ParallelPort, die eine Schnittstelle zu den physikalischen Kommunikationsports zur Verfügung stellen, wobei die aktuelle Freigabe der Java Kommunikation Extension API Zugriffe auf die seriellen (RS-232) und parallelen (IEEE 1284) Ports ermöglicht, und den Treiberstufenklassen (driver-level), die eine Schnittstelle zwischen den niedrigen Klassen und dem zugrundeliegenden Betriebssystem liefern. Treiberstufenklassen sind ein Teil der Implementierung, aber nicht Teil des Java Communications Extension API. Sie sollten nicht vom Programmierer in Anwendungen benutzt werden. Für den Einsatz von Java Communications API muss das Javax.comm-Paket in das Programm eingebunden werden. Dadurch wird es möglich, die Methoden dieses Paketes zu verwenden. Nachfolgend sollen die wichtigsten Dienste, die das Communications API zur Verfügung stellt, kurz beschrieben werden. Javax.comm Erweiterungspaket Das javax.comm-paket liefert die folgenden Grunddienste: Die Aufzählung der vorhandenen Ports auf dem System. Diese statische Methode CommPortIdentifier.getPortIdentifiers bringt ein Aufzählungsobjekt zurück, das ein CommPortIdentifier Objekt für jeden vorhandenen Port enthält. Dieses Comm- PortIdentifier Objekt ist die zentrale Einheit für die Zugriffssteuerung zu einem Kommunikationsport. Das Öffnen und die Inanspruchnahme des Kommunikationsports, indem man die Hochstu-fenmethoden in seinem CommPortIdentifier Objekt verwendet. Die Inanspruchnahme der Portbesitzabsicht zwischen mehrfachen Java-Anwendungen. Ereig-

nisse werden fortgepflanzt, um interessierte Anwendungen zu benachrichtigen und dem Inhaber des Ports zu erlauben, Besitz abzutreten. Port- InUseException wird benutzt, wenn eine Anwendung den Port nicht öffnen kann. Niedere Klassen wie SerialPort und ParallelPort haben Methoden für die Verwaltung der I/O auf dem Kommunikationsport. Die Steuerung kommuniziert mit der Maschine über eine serielle Schnittstelle (RS232) ohne ein spezielles Protokoll. Zur Kommunikation mit der seriellen Schnittstelle wird das Communication API von Sun verwendet. Bild 5 zeigt die Systemarchitektur, die die Komponenten des Systems und deren Kommunikation graphisch darstellt. Das Empfangen von Ereignissen, die dem Kommunikationsport Zustandsänderungen beschreiben, wenn z.b. eine serielle Schnittstelle eine Zustandsänderung für Carrier Detect, Ring Indicator, DTR, etc. hat, ermittelt SerialPort Objekt ein SerialPortEvent, das die Zustandsänderung beschreibt. Applikation Auftragsannahme Auftragsbearbeitung Maschineneinstellung Im Folgenden werden zwei wichtige Bestandteile des Pakets näher beschrieben. ParallelPort (paralleler Kommunikationsport) Layoutdarstellung Auftragsverwaltung Maschinen -steuerung (Ser. Prot) Markierungsmaschine ParallelPort beschreibt die hardwarenahe Schnittstelle zu einem parallelen Kommunikationsport, die durch das Betriebssystem zur Verfügung gestellt wird. ParallelPort definiert die minimale angeforderte Funktionalität für die parallelen Kommunikationsports. SerialPort (RS-232 serieller Kommunikationsport) SerialPort beschreibt die hardwarenahe Schnittstelle zu einem seriellen Kommunikationsport, der durch das Betriebssystem zur Verfügung gestellt wird. SerialPort repräsentiert die minimal geforderte Funktionalität für die seriellen Kommunikationsports. Um die Einsatzmöglichkeiten von Communications API näher zu untersuchen, wurden bzw. werden verschiedene Projekte am IAS durchgeführt. Nachfolgend soll eine Fallstudie, bei der unter dem Einsatz von Communications API auf die Hardware zugegriffen wurde, kurz umrissen werden. 3.1.1 Fallstudie: Nadelpräger Am IAS wird versucht, ein objektorientiertes Framework zu entwickeln, das sich auf die Steuerung von Markiermaschinen und die Verwaltung von Markieraufträgen konzentriert. Unter Zuhilfenahme dieses Frameworks soll eine konkrete Applikation für den am IAS vorhandenen Modellprozess Nadelpräger entstehen. Die Fallstudie umfasst unter anderem folgende Anforderungen: Eine Berücksichtigung verschiedener Markierungstechnologien und Anlagekonfigurationen steht im Vordergrund. Die konkrete Applikation wurde jedoch für den Nadelpräger erstellt. Die zu markierende Spezifikation (Layoutdaten) kann als Textdatei oder in einer relationalen Datenbank abgelegt sein. Die Applikation verwendet eine Datei. Bild 5: Systemarchitektur der Nadelpräger Die Architektur des Systems wird in fünf Komponenten aufgeteilt, wobei die Komponente Markierungsmaschine der Hardware entspricht. Die drei Komponenten Layoutdarstellung, Auftragsverwaltung und Maschinensteuerung bilden das Framework. Zusammen mit der Komponente Applikation entsteht das Softwaresystem, zusammen mit der Komponente Markierungsmaschine schließlich das gesamte System. Die Komponente Applikation steuert den Programmablauf, insbesondere aber die Interaktion der Applikation mit dem Anwender. Die Layout-Komponente ist für die Erstellung der Layoutdateien aus den Textdateien zuständig. Die Verwaltung aller Aufträge (zugeordnet nach Prioritäten) wird von der Auftragsverwaltung-Komponente gesteuert. Zur Ansteuerung des Nadelprägers ist die Maschinensteuerung-Komponente zuständig. Sie erfolgt über eine serielle Schnittstelle. Die Steuerung gibt dem Nadelpräger Befehle und empfängt im Gegenzug Statusmeldungen. Zur Kommunikation mit dem Nadelpräger über die serielle Schnittstelle, wurde das Communications API eingesetzt. Hierzu diente die Klasse SerialPort. Mit Hilfe der Methoden dieser Klasse ist eine Kommunikation mit der Schnittstelle von der Java-Applikation aus möglich. Über diese Schnittstelle werden schließlich die ASCII-Dateien gesendet und empfangen. 3.2 Java Native Interface (JNI) Das Konzept der virtuellen Maschine (Plattformunabhängigkeit) erlaubt, wie schon erwähnt, keine hardwarespezifischen bzw. systemnahen Zugriffe. Auch bei ge-

wissen zeitkritischen Anwendungen ist eine Lösung in reinem Java nicht immer möglich. Das Java Native Interface (JNI) ist aber eine Möglichkeit, um die nativen Codes, die in C oder C++ implementiert sind, in eine Java Anwendung einzubinden. Allerdings ist zu beachten, dass Java Applikationen, die native Methoden einsetzen, nicht mehr plattformunabhängig sind. Im Folgenden soll mit Hilfe einer Java Applikation, die eine native Methode enthält, das Konzept des JNI erläutert werden. Die native Methode soll die Message- Box() Funktion des Windows 32 API sein, die eine graphische Dialogbox ausgibt. Zunächst wird ein Java Programm, in dem die native Methode deklariert ist, geschrieben: Aufruf einer nativen Methode class Beipiel_JNI { public static void main (String [] args) { Beipiel_JNI app = new Beipiel_JNI (); app.showmessage ("Die native Methode wurde aufgerufen!"); private native void ShowMessage (String msg); static { System.loadLibrary ("MsgImpl"); Der static Block in der Deklaration ruft die Methode System.loadLibrary auf. Diese Methode lädt ein DLL in den Speicher und verlinkt es. Der Pfad zu diesem DLL muss dabei entweder in die Systemumgebung eingetragen sein oder das DLL muss im gleichen Verzeichnis wie das Java Class File gespeichert werden. Javah: Headerfile Generator für das Einbinden von C/C++-Code Zunächst wird die Beispiel_JNI.java Klasse mit javac kompiliert. Hierzu wird zuerst in das Verzeichnis, in dem der Quellcode gspeichert ist, gewechselt und anschließend mit javac Beipiel_JNI.java kompiliert. Anschließend wird das Werkzeug javah verwendet, um ein Headerfile von der Klasse Beipiel_JNI zu erstellen. Hierzu wird der Befehl javah -jni Beipiel_JNI verwendet. Javah liest den Java-Quellcode und generiert für jede Deklaration einer nativen Methode eine prototypische Funktion in ein C- oder C++-Headerfile. Im Folgenden ist das generierte Headerfile zu sehen: /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class Beipiel_JNI */ /* * Class: Beipiel_JNI * Method: ShowMessage * Signature: (Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_ Beipiel_JNI _ShowMessage (JNIEnv *, jobject, jstring); #ifdef cplusplus #endif #endif Die Präprozessor Anweisung #ifdef cplusplus besagt, dass dieses File sowohl mit einem C- als auch mit einem C++-Compiler kompiliert werden kann. JNIEnv jobject und jstring sind Datentypdefinitionen von JNI. Der letzte Schritt ist das Schreiben eines C- oder C++- Quellcodes. Dieser verweist auf das Headerfile, welches von Javah generiert wurde. Im vorliegenden Beispiel wäre dies Beipiel_JNI.h. Nachfolgend wird der C++- Code, der eine Dialogbox aufruft, dargestellt: #include <windows.h> #include " Beipiel_JNI.h" BOOL APIENTRY DllMain(HANDLE hmodule, DWORD dwreason, void** lpreserved) { return TRUE; JNIEXPORT void JNICALL Java_ Beipiel_JNI _ShowMessage(JNIEnv * jenv, jobject thisx, jstring jmsg) { const char *msg; msg = jenv ->GetStringUTFChars(jMsg,0); MessageBox(HWND_DESKTOP, msg, "Java Native Interface, JNI", MB_OK MB_ICONEXCLAMATION); jenv ->ReleaseStringUTFChars(jMsg,msg); Der Code wird kompiliert und daraus eine DLL generiert. Dieser Teil ist plattformabhängig. Das generierte DLL-File heißt in diesem Beispiel MsgImpl.dll. Die Java-Applikation ruft nun beim Ausführen die angegebene native Methode auf Wie das oben beschriebene Beispiel zeigt, bietet Java eine überschaubare Methode für den Zugriff auf Hardware mittels JNI-Technik. Dies bedeutet, dass auch die vorhandenen Treiber Funktionen, die in C oder C++ vorliegen, von einer Java Applikation aus aufrufbar sind. Zur Veranschaulichung des oben beschriebenen Konzeptes soll eine Möglichkeit der praktischen Umsetzung, nämlich die Fernbedienung eines Kaffeeautomaten unter dem Einsatz von JNI kurz dargestellt werden. #ifndef _Included_ Beipiel_JNI #define _Included_ Beipiel_JNI #ifdef cplusplus extern "C" { #endif

3.2.1 Fallstudie: Einsatz von JNI bei der Fernsteuerung eines industriellen Kaffeeautomaten Am IAS wurde im Rahmen eines Pilotprojektes ein Konzept realisiert, das die Ansteuerung eines am IAS vorhandenen industriellen Kaffeeautomaten mit Hilfe eines Web-Browsers von einem beliebigen Ort aus ermöglicht. Die durch die Messfühler erfassten Zustände der Steuerelemente und Ventile des Kaffeeautomaten sowie die verschiedenen Temperaturen werden als Sensorsignale durch das Java-Programm abgefangen und ausgewertet. Die Wünsche des Anwenders werden durch das Programm an die entsprechenden Aktoren weitergegeben. Die Implementierung erfolgte auf einer Windows-NT-Plattform. Bild 6 zeigt die Systemarchitektur zu diesem Projekt. der Komponente IO-Schnittstelle und ihrer Teilkomponenten wieder. Datenweitergabe Fehlerdaten Steuerbefehle Statusdaten Aktordaten Timer Bild 7: Aufbau der Komponente IO-Schnittstelle TimerEvent Datenvergleich Datenerfassung Systemzustand Sensorwert e Sensordaten Client Server Hardware Anwender Applet RMI Anwendung JNI IO-Treiber Kaffeeautomat Die Komponente Datenerfassung enthält Methoden, die über das JNI alle Sensorwerte und Temperaturdaten erfassen. Zudem wandelt sie die rohen analogen Werte in dimensionsbehaftete Werte um. Die Komponente Datenvergleich fragt beim Eintreffen einer Nachricht von der Komponente Timer mittels der Datenerfassung alle Sensoren ab und vergleicht den neuen Zustand mit dem in den Klassen der einzelnen Sensoren festgehaltenen Werte. Die Komponente Timer erzeugt periodisch eine Nachricht (Event), die die Komponente Datenvergleich veranlasst, die Sensordaten erneut von der Komponente Datenerfassung anzufordern. Die Komponente Datenweitergabe beinhaltet Methoden zur Ansteuerung der Aktoren über das JNI. Dafür erhält sie von der Komponente Steuerung der Anwendung die entsprechenden Befehle und gibt diese, JNI-mäßig aufbereitet, an die Aktoren weiter. Eventuelle Fehlermeldungen werden an die Komponente Steuerung weitergereicht. Bild 6: Die Systemarchitektur Die Applikation besteht aus zwei Teilen: Einer Java- Anwendung, die auf dem Prozessrechner - der gleichzeitig auch der Web-Server ist - läuft und einem Java- Applet, das von diesem Server auf den jeweiligen Client geladen und dort in einem Browser ausgeführt wird. Beide Teilanwendungen kommunizieren miteinander über Remote Method Invocation (RMI). Der Aufruf der nativen Methoden (in diesem Fall Aufruf der DLL's von den IO-Karten) wurde gemäß des Verfahrens, das im vorherigen Abschnitt beschrieben wurde, realisiert. Hiermit wurde ein direkter Zugriff von einer Java-Anwendung aus auf die Hardware realisiert. Das Ergebnis ist die Fernsteuerung des Kaffeeautomaten von jedem beliebigen Rechner über das Internet. Bild 8 zeigt die Bedienungsoberfläche des Applets. Das Applet dient zur Interaktion mit dem Anwender und zur Zustandsausgabe des Systems. Die Anwendung auf dem Server besteht aus drei Teilkomponenten, der Kaffeesteuerung, der RMIServerSteuerung und der Fehlerbehandlung. Sie dient der Verarbeitung der Anwenderwünsche und ihrer Umsetzung in Befehle für die Aktoren. Die Komponente Kaffeesteuerung beinhaltet unter anderem die Komponente IO-Schnittstelle, die als Verbindung zwischen der Anwendung und dem Java Native Interface (JNI) dient. Sie ist für die Kommunikation mit der Hardware zuständig und wird dafür in die vier Teilkomponenten Datenerfassung, Datenvergleich, Datenweitergabe und Timer unterteilt. Bild 7 gibt den Aufbau Bild 8: Das Applet zur Fernbedienung des Kaffeeautomaten

3.3 Vergleich zwischen Communications API und JNI Das Communications API bietet viele Methoden, mit deren Hilfe ein Zugriff auf Systemressourcen (über serielle Schnittstellen RS232 oder IEEE 1284 parallele Schnittstellen) unter Java möglich wird. Dies setzt auf das JNI-Konzept, bietet jedoch nur die Möglichkeit über serielle- oder parallele Schnittstellen auf die Hardware zuzugreifen. Um das Communications API zu verwenden, muss das Javax.comm-Paket in das Java-Programm eingebunden werden. Das Javax.com-Paket ist plattformabhängig,, wobei es nicht für alle Plattformen vorhanden ist. Die API's werden weiter entwickelt und bieten somit immer mehr Möglichkeiten für den Zugriff auf Prozessdaten. Der größte Nachteil ist die Einschränkung der Ports und das fehlende API für alle Plattformen. Das JNI Konzept bietet eine sehr überschaubare Möglichkeit für den Zugriff auf Systemressourcen unter Java. Es ist eine übergreifende Technologie im Gegensatz zu Communications API. Das Konzept gilt für alle Plattformen und es ist möglich, die Java-Aufrufe von C/C++ Applikationen aus durchzuführen. Als Fazit ist festzuhalten, wenn eine Möglichkeit besteht, auf die Systemressourcen über die serielle- oder parallele Schnittstelle zuzugreifen und für die einzusetzende Plattform das Communications API vorhanden ist, auf diese Möglichkeit zugegriffen werden sollte. Falls diese Möglichkeit allerdings nicht besteht, sollte das JNI-Konzept eingesetzt werden. 4 ZUSAMMENFASSUNG Java ist eine an C++ angelehnte, objektorientierte Programmiersprache. Java hat sich für interaktive Web- Applikationen durchgesetzt. Im Bereich der Automatisierungstechnik gewinnt Java immer mehr an Bedeutung. Dies hat verschiedene Gründe. Zum einen ist Java im Vergleich zu anderen Sprachen einfacher und streng objektorientiert. Zum anderen ist Java plattformunabhängig. Dies bedeutet, dass Java Programme auf allen Zielplattformen, auf denen eine JVM installiert ist, laufen. Für direkte Zugriffe auf die Hardware bietet Java verschiedene Möglichkeiten. Hier sind das API und das JNI Konzept zu nennen, wobei das Communications API auch auf das JNI-Konzept zugreift. Das Java Communications API, das als Standard-Erweiterung für die Java Plattform gilt, kann verwendet werden, um plattformunabhängige Kommunikationsanwendungen für Technologien wie Sprachpost (voice mail), Telefax und Smart Cards zu schreiben. Die Kommunikation erfolgt jedoch über serielle- oder parallele Schnittstellen. Das Konzept von Java Native Interface (JNI) bietet eine Möglichkeit, um die nativen Codes, die in C oder C++ implementiert sind in eine Java Anwendung einzubinden. Hierbei ist zu beachten, dass Java Applikationen, die native Methoden einsetzen, nicht mehr plattformunabhängig sind. Für die Portierung auf eine andere Plattform genügt es jedoch, die native Methode auf einer neuen Hardware zu implementieren. 5 LITERATUR [1] http://www.ads-tec.de/ [2] http://www.aims-stuttgart.de [3] http://java.sun.com/products/jdk/1.1/docs/guid e/jni/index.html [4] Klimas, E. J., Skublics, S., Thomas, D. A.: Smalltalk With Style. Prentice Hall (1995) [5] Arnold, K., Gosling, J.: The Java Programming Language (second edition). Addison- Wesley, Reading, Mass (1998) [6] Chang, Dan; Harkey, Dan: Client/Server Data Access with Java and XML, WILEY & SONS, (1998) [7] Flanagan, D.:Java in a nutshell: a desktop quick reference for Java Programmers. O'Reilly & Associates Inc. (1997) [8] Lauber, R., Göhner, P.: Prozessautomatisierung 1 (3. Auflage). Springer-Verlag, (1999) [9] Liang, Sheng: Java Native Interface: Programmer's Guide and Spezification, Addison- Wesley, Amsterdam (1998) [10] Nilsen, K.: Adding Real-Time Capabilities to Java. Communication of the ACM, vol. 41 No. 6, (1998) 49-56 Java lässt keinen direkten Zugriff auf Systemressourcen zu, da z.b. Schnittstellen systemabhängig sind. Ein direkter Zugriff auf Netzwerkdaten ist jedoch möglich, wenn der Daten-Server gleichzeitig der Web-Server ist.