Datenaustausch über OPC XML Beschreibung und Beispiel zum Datenaustausch über OPC XML Schnittstelle Allgemeine Hinweise Copyright © Siemens AG Copyright 2007 All rights reserved Datenaustausch über OPC XML Technische Änderungen des Produktes vorbehalten. Copyright Weitergabe sowie Vervielfältigung dieser Unterlage, Verwertung und Mitteilung ihres Inhaltes sind nicht gestattet, soweit nicht ausdrücklich zugestanden. Zuwiderhandlungen verpflichten zu Schadenersatz. Alle Rechte vorbehalten, insbesondere für den Fall der Patenterteilung oder GM-Eintragung. Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 2/34 Allgemeine Hinweise Datenaustausch über OPC XML Allgemeine Hinweise Copyright © Siemens AG Copyright 2007 All rights reserved Hinweis Die Applikationsbeispiele sind unverbindlich und erheben keinen Anspruch auf Vollständigkeit hinsichtlich Konfiguration und Ausstattung sowie jeglicher Eventualitäten. Die Applikationsbeispiele stellen keine kundenspezifische Lösungen dar, sondern sollen lediglich Hilfestellung bieten bei typischen Aufgabenstellungen. Sie sind für den sachgemäßen Betrieb der beschriebenen Produkte selbst verantwortlich. Diese Applikationsbeispiele entheben Sie nicht der Verpflichtung zu sicherem Umgang bei Anwendung, Installation, Betrieb und Wartung. Durch Nutzung dieser Applikationsbeispiele erkennen Sie an, dass Siemens über die beschriebene Haftungsregelung hinaus nicht für etwaige Schäden haftbar gemacht werden kann. Wir behalten uns das Recht vor, Änderungen an diesen Applikationsbeispiele jederzeit ohne Ankündigung durchzuführen. Bei Abweichungen zwischen den Vorschlägen in diesen Applikationsbeispiele und anderen Siemens Publikationen, wie z.B. Katalogen, hat der Inhalt der anderen Dokumentation Vorrang. Gewährleistung, Haftung und Support Für die in diesem Dokument enthaltenen Informationen übernehmen wir keine Gewähr. Unsere Haftung, gleich aus welchem Rechtsgrund, für durch die Verwendung der in diesem Applikationsbeispiel beschriebenen Beispiele, Hinweise, Programme, Projektierungs- und Leistungsdaten usw. verursachte Schäden ist ausgeschlossen, soweit nicht z.B. nach dem Produkthaftungsgesetz in Fällen des Vorsatzes, der grober Fahrlässigkeit, wegen der Verletzung des Lebens, des Körpers oder der Gesundheit, wegen einer Übernahme der Garantie für die Beschaffenheit einer Sache, wegen des arglistigen Verschweigens eines Mangels oder wegen Verletzung wesentlicher Vertragspflichten zwingend gehaftet wird. Der Schadensersatz wegen Verletzung wesentlicher Vertragspflichten ist jedoch auf den vertragstypischen, vorhersehbaren Schaden begrenzt, soweit nicht Vorsatz oder grobe Fahrlässigkeit vorliegt oder wegen der Verletzung des Lebens, des Körpers oder der Gesundheit zwingend gehaftet wird. Eine Änderung der Beweislast zu Ihrem Nachteil ist hiermit nicht verbunden. Copyright© Copyright 2007 Siemens A&D. Weitergabe oder Vervielfältigung dieser Applikationsbeispiele oder Auszüge daraus sind nicht gestattet, soweit nicht ausdrücklich von Siemens A&D zugestanden. Bei Fragen zu diesem Beitrag wenden Sie sich bitte über folgende E-MailAdresse an uns: mailto:[email protected] Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 3/34 Allgemeine Hinweise Datenaustausch über OPC XML Qualifiziertes Personal Copyright © Siemens AG Copyright 2007 All rights reserved im Sinne der Dokumentation sind Personen, die mit Aufstellung, Montage, Inbetriebsetzung, Betrieb und Instandhaltung der einzusetzenden Produkte vertraut sind und über die ihrer Tätigkeit entsprechenden Qualifikationen verfügen z. B.: • Ausbildung oder Unterweisung bzw. Berechtigung, Stromkreise und Geräte gemäß den Standards der Sicherheitstechnik ein- und auszuschalten, zu erden und zu kennzeichnen. • Ausbildung oder Unterweisung gemäß den Standards der Sicherheitstechnik in Pflege und Gebrauch angemessener Sicherheitsausrüstung. • Schulung in Erster Hilfe. Warnhinweise werden in dieser Dokumentation explizit nicht gegeben. Es wird jedoch ausdrücklich auf die Warnhinweise der Betriebsanleitung für das jeweilige Produkt verwiesen. Hinweis auf Exportkennzeichen AL: N ECCN: N Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 4/34 Inhaltsverzeichnis Datenaustausch über OPC XML Copyright © Siemens AG Copyright 2007 All rights reserved Inhaltsverzeichnis 1 Wie kann die OPC XML-DA Schnittstelle genutzt werden? ........................ 6 2 2.1 2.2 Voraussetzungen und Ziele dieser FAQ’s .................................................... 7 Was ist OPC? Warum OPC XML-DA? ............................................................. 7 Besondere Eigenschaften der OPC XML-DA Kommunikation ......................... 8 3 3.1 3.2 3.3 3.3.1 3.3.2 3.3.3 3.3.4 3.4 3.5 OPC-Client Software in Java ....................................................................... 10 Grafische Benutzeroberfläche des Java-Programms ..................................... 10 Erstellung der Klassen zur OPC Kommunikation ........................................... 12 Klassenbeschreibung der OPC Browser Applikation...................................... 14 Klasse MainWindow (MainApplet) .................................................................. 16 Klasse PWDWindow....................................................................................... 20 Klasse CyclicRead.......................................................................................... 20 Klasse Subscription ........................................................................................ 21 Ausführen des Beispiel-Programms ............................................................... 24 Import des Beispiel-Projektes in Eclipse......................................................... 24 4 4.1 4.2 Aufzeichnen von SOAP-Telegrammen zu Diagnosezwecken .................. 31 Einstellungen des Trace Tools MSSoapT3 .................................................... 31 Beispiele der Telegrammaufzeichnungen ...................................................... 32 5 5.1 5.2 5.3 Anhang .......................................................................................................... 34 Quelltexte und Softwaredokumentation .......................................................... 34 Weiterführende Informationen ........................................................................ 34 Literatur- und Quellenverzeichnis ................................................................... 34 Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 5/34 Wie kann die OPC XML-DA Schnittstelle genutzt werden? Datenaustausch über OPC XML 1 Wie kann die OPC XML-DA Schnittstelle genutzt werden? Das vorliegende Dokument beschreibt die Nutzung der OPC XML-DA (Open Process Control XML-DataAccess) - Server Funktionalität der SIMOTION Steuerung. Die Schnittstellen zur OPC-Kommunikation zwischen einem OPC-Client und der Steuerung werden dabei anhand eines in Java realisierten Beispielprogramms vorgestellt. Abbildung 1-1 zeigt einen schematischen Aufbau des OPC XML-DA Client-ServerSystems. Abbildung 1-1: Schematischer Aufbau desClient-Server-Systems Copyright © Siemens AG Copyright 2007 All rights reserved SIMOTION RT V4.1 MiniWeb Server Standard-Ethernet OPC XML-DA Server SOAP-documents For example: OPC-clientapplication Der OPC XML-DA Server ist ab der Firmware Version 4.1.1 in die SIMOTION Runtime integriert. Mittels Standard-Ethernet- oder PROFINETVerbindung kann ein Datenaustausch zwischen diesem OPC Server und einer Client-Anwendung realisiert werden. So kann ohne zusätzliche Engineering Tools, wie z.B. SIMOTION Scout, auf bestimmte Programmvariablen sowie Systemfunktionen der Steuerung zugegriffen werden. Die zur Verfügung stehenden Daten werden von dem sog. „Variablen-Provider“ bereitgestellt (s. Kapitel 5 - „Variablen-Provider“ der SIMOTION Dokumentation: SIMOTION IT - Ethernet basierende HMI- und Diagnosefunktion „Produktinformation SIMOTION DIAG.pdf“). Die folgenden Abschnitte dieses Dokumentes beschreiben die Grundlagen der hier verwendeten Technologien. Mittels des Beispielprogramms „OPCXML-Browser“ können die von der SIMOTION Steuerung per OPC zur Verfügung gestellten Variablen durchsucht werden. Anhand der Quellcodes werden die OPC - Zugriffs- und Kommunikationsfunktionen ausführlich erläutert. Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 6/34 Voraussetzungen und Ziele dieser FAQ’s Datenaustausch über OPC XML 2 Voraussetzungen und Ziele dieser FAQ’s In diesem Dokument wird der Umgang mit OPC XML-DA am Beispiel einer OPC-Client Software in Java erläutert. Das Ziel ist es, eine einfache Vorlage für eine Java-Anwendung zu bieten, auf der Weiterentwicklungen mit eigenen Anforderungen des Kunden aufbauen können. Dazu wird der Quelltext dieser Java-Anwendung zur freien Verwendung zur Verfügung gestellt. Copyright © Siemens AG Copyright 2007 All rights reserved Voraussetzungen zum optimalen Verständnis dieses Dokumentes sowie der Nutzung der Beispiel-Quelltexte sind Programmierkenntnisse in Java, weiterhin wird dringend empfohlen, sich mit der OPC XML-DA 1.0 Spezifikation vertraut zu machen. Um Änderungen an den bestehenden Projekten vorzunehmen wird die Verwendung der kostenfreien Java-Entwicklungsumgebung Eclipse empfohlen. Nähere Hinweise zur Nutzung dieser sind in Kapitel 3.4 dieses Dokumentes enthalten. 2.1 Was ist OPC? Warum OPC XML-DA? OPC beschreibt eine standardisierte und vor allem herstellerunabhängige Kommunikationsmöglichkeit zwischen unterschiedlichen Endgeräten. Die Pflege und die Weiterentwicklung dieses Standards unterliegt der OPCFoundation (http://opcfoundation.org). Die Kommunikation mittels OPC-DA (OPC Data Access, nicht zu verwechseln mit OPC XML-DA) basiert auf Microsofts COM/DCOMTechnologie (Component Object Model, Distributed COM, siehe http://www.microsoft.com/com/ für weiterführende Informationen) und setzt somit ein Microsoft basiertes Betriebssystem für die Verwendung dieser Technologie voraus. Bei OPC XML-DA hingegen löst man sich von der COM Technologie und nutzt mit dem XML-Dokumentenformat einen offenen und für viele Betriebssysteme nutzbaren Standard. Die eigentliche Kommunikation zwischen den Endgeräten findet hierbei über das SOAP (Simple Object Access Protocol, eine fest definierte XML-Datenstruktur) statt. SOAP wiederum setzt auf dem http-Protokoll auf. Dadurch wird bereits ersichtlich, dass ein Datenaustausch via OPC XML-DA hardwaremäßig auf einer Ethernet-Verbindung basiert. Prinzipiell handelt es sich bei der Kommunikation sowohl bei OPC-DA als auch bei OPC XML-DA um ein Client-Server-System. Ein OPC-Server stellt bestimmte Daten bereit, und ein entsprechender OPC-Client ist in der Lage, Daten von dem Server abzufragen bzw. auf dem Server zu verändern. Dabei muss ein Server laut OPC Spezifikation bestimmte vorgeschriebene Methoden und Datenschnittstellen anbieten, die vom Client angesprochen werden können. Beispielsweise muss jeder Server eine Read-Funktion anbieten, welche es einem Client ermöglicht, einen vorhandene Variable oder einen Datensatz (konkret: OPC-Item(s)) des Servers auszulesen. Eine weitere Funktion ist z.B. write, die ein Schreiben, Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 7/34 Voraussetzungen und Ziele dieser FAQ’s Datenaustausch über OPC XML also Verändern einer bereitgestellten Variablen des Servers realisiert. In Tabelle 2-1 ist eine stichwortartige Gegenüberstellung zwischen OPC XMLDA und OPC-DA enthalten. Copyright © Siemens AG Copyright 2007 All rights reserved Tabelle 2-1: Gegenüberstellung OPC XML-DA und OPC-DA 2.2 Besondere Eigenschaften der OPC XML-DA Kommunikation Wie schon in Tabelle 2-1 erläutert, hat die Nutzung des OPC XML-DA Standards vor allem den Vorteil, betriebssystemunabhängig zu sein. Dies ermöglicht erst die Realisierung der OPC-Server-Funktionalität auf einer Simotion-Steuerung, da die SIMOTION RT kein Windows-basiertes System ist und OPC-DA somit hier nicht verfügbar ist. Durch die Nutzung des ebenfalls offenen SOAP-Protokollstandards kann ebenfalls betriebssystemunabhängig auf diese Serverfunktionalität zugegriffen werden. Ein beliebiges Client-System, welches in der Lage ist SOAP zu verarbeiten, kann so als OPC-Client eingesetzt werden. Durch die Beschaffenheit einer auf http basierenden Kommunikationsstruktur ist eine beidseitige, also server- und clientseitige Verbindungsinitialisierung nicht möglich. Eine Kommunikation zwischen OPC-Client und OPC-Server muss stets von der Client-Seite angestoßen werden. Dadurch kann der Callback-Mechanismus des Servers bei OPC XML-DA nicht ohne weiteres realisiert werden. Bei OPC-DA ist der Server in der Lage, die Verbindung zum Client von sich aus herzustellen um bspw. zu melden, dass sich bestimmte Daten geändert haben. Um innerhalb eines gewissen Zeitintervalls von der Änderung eines Wertes im OPC-Server zu erfahren, müsste ein OPC XML-DA Client diesen Wert kontinuierlich mindestens ein Mal innerhalb dieses gewünschten Zeitintervalls abfragen (sog. Polling). Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 8/34 Voraussetzungen und Ziele dieser FAQ’s Datenaustausch über OPC XML Sollte sich der abzufragende Wert innerhalb einer Reihe von Zyklen nicht ändern, so wird er dennoch jedes Mal abgefragt und an den Client übertragen. Bei sehr kleinen Zeitintervallen entsteht so ein hoher Netzwerkverkehr sowie je nach System eine hohe Systemlast. Copyright © Siemens AG Copyright 2007 All rights reserved Um diese zu reduzieren bietet OPC XML-DA die Funktion Subscription an. Zur Erläuterung der Funktionsweise der Subscription sei auf Kapitel 3.3.4 dieses Dokumentes verwiesen. Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 9/34 OPC-Client Software in Java Datenaustausch über OPC XML 3 OPC-Client Software in Java Im Folgenden wird das Java Beispiel-Programm in Bezug auf die OPCFunktionalitäten und dessen Verwendung detailliert erläutert. Auf Basis dieser Beschreibung sollen Erweiterungen des Quelltexts ermöglicht werden. Weiterhin wird die Erstellung eines Projektes innerhalb der Entwicklungsumgebung Eclipse beschrieben. 3.1 Grafische Benutzeroberfläche des Java-Programms Copyright © Siemens AG Copyright 2007 All rights reserved Abbildung 3-1: Bedienoberfläche des Java Programms Die grafische Benutzeroberfläche (GUI – graphical user interface) ist in Abbildung 3-1 dargestellt. Es werden die folgenden OPC-Funktionalitäten unterstützt: • Read: Durch Klick auf ein neues Blatt im Browse-Baum (bewirkt implizites Ändern von ItemPath und ItemName) wird der aktuelle Wert der ausgewählten Variablen aus dem OPC-Server gelesen. Der Wert der Variablen wird im Ausgabefeld rechts angezeigt (hier z.B. „STOP“). Es besteht auch die Möglichkeit der manuellen Eingabe von ItemPath und ItemName. Durch Drücken von „Enter“ im Feld ItemName wird das eingegebene Item gelesen. Sollte dieses Item nicht vorhanden sein, wird eine entsprechende Meldung im unteren Statusbereich des Fensters angezeigt. • Write: Schreiben der in den Eingabefeldern ItemPath und ItemName spezifizierten Simotion Variablen. Der Schreibvorgang wird durch Ändern des Wertes im Eingabefeld ‚Var’ und anschließendem Klick auf den „Write“ Button oder Abschluss der Eingabe mit „Return“ ausgelöst. Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 10/34 OPC-Client Software in Java Datenaustausch über OPC XML • Browse: Browsen des Variablenhaushalts in der Simotion Steuerung; die Funktionalität ist ähnlich dem Windows Explorer. Mit jedem Öffnen eines Knotens wird die zugehörige Information von der Simotion Steuerung ermittelt. Solange die Browse-Antwort noch nicht vorhanden ist bzw. falls es keine Variablen (entspricht Blätter im Baum) gibt, ist eine Dummy-Variable als Blatt sichtbar. • Connect: Durch Ändern der URL (Eingabe durch Klick auf den Button „Connect“ oder mit „Return“ abschließen) kann eine Verbindung zu einem neuen Simotion Gerät aufgebaut werden. Dabei wird der existierende Variablenbaum neu aufgesetzt. Eine aufgebaute Verbindung wird mit grünem Farbhintergrund visualisiert und eine fehlende Verbindung wird mit orangenem Hintergrund angezeigt Copyright © Siemens AG Copyright 2007 All rights reserved • Im PWD Fenster können Loginname und Passwort geändert werden, voreingestellt sind die Standardeinstellungen der Simotion-Steuerung (Benutzername: simotion; Passwort: simotion). • Subscribe: Durch Klicken von „Subscribe“ kann die OPC-Funktion Subscription initialisiert werden. Nach Eingabe der benötigten Werte (oder Übernahme der voreingestellten Standard-Werte) im folgenden Eingabedialog (Abbildung 3-2) wird die im Feld ItemPath und ItemName angezeigte Variable für eine Subscription registriert. Für eine ausführliche Beschreibung dieser in OPC XML-DA verfügbaren Funktionalität sei hier auf Kapitel 3.3.4 verwiesen. Abbildung 3-2: Konfigurationsmaske Subscription • ReadCyclic: Mittels Drücken von ReadCyclic kann ein zyklisches Lesen („Polling“) mit dem eingestellten Intervall der in den Eingabefeldern ItemPath und ItemName spezifizierten Simotion Variablen gestartet werden. Gestoppt werden kann das zyklische Lesen durch Drücken des dann sichtbaren Buttons ‚Stop’. Die Anzahl der erfolgten Leseaufrufe wird im Ausgabefeld ‚Read Count:’ angezeigt Hinweis Je nach Version und Konfiguration der Java Virtual Machine kann die in Abbildung 3-1 dargestellte grafische Benutzeroberfläche ein anderes Design aufweisen. Dies hat jedoch keinen Einfluss auf die Funktionalität des Programms. Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 11/34 OPC-Client Software in Java Datenaustausch über OPC XML 3.2 Erstellung der Klassen zur OPC Kommunikation Die Klassen, welche die Kommunikation mit dem OPC Server ermöglichen sind in den beiden Paketen „org.opcfoundation.webservices.XMLDA._1_0“ sowie „org.opcfoundation.webservices.XMLDA._1_0.holders“ Copyright © Siemens AG Copyright 2007 All rights reserved enthalten. Diese liegen sowohl als Java Quelltext-Dateien als auch als kompilierte Java Klassen (*.class) vor. Sie wurden mithilfe des Tools „WSDL2Java“ (siehe Apache Axis) erstellt. Mit diesem Tool ist es möglich, aus einer WSDL1 - Datei Java-Quellcode zu generieren, welcher die Umsetzung von SOAP Telegrammen in Java realisiert. Die Datei OpcXmlDa_R1_0.wsdl, auszugsweise dargestellt in Abbildung 3-3, bildet hier die Grundlage für die erzeugten Java Klassen, sie wird von der OPC Foundation als Standard für die OPC XML-DA-Kommunikation bereitgestellt (http://opcfoundation.org/webservices/XMLDA/1.0/). Es handelt sich um eine im XML Format angelegte Beschreibung der Datenstruktur, Interfaces und Datentypen, welche für die Kommunikation zwischen Client Anwendung und OPC Server benötigt werden. In Abbildung 3-3 ist unter anderem das Element „Write“ abgebildet. Abbildung 3-3: Auszug aus WSDL-Datei OpcXmlDA_R1_0.wsdl Aus diesem hier beschriebenen Element erstellt das Tool „WSDL2Java“ zum Beipsiel die Klasse Write, mit den drei Variablen „Options“ vom Typ RequestOptions, „ItemList“ vom Typ WriteRequestItemList und 1 WSDL – Web Service Description Language, weitere Informationen s. http://www.w3.org/TR/wsdl Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 12/34 OPC-Client Software in Java Datenaustausch über OPC XML „ReturnValuesOnReply“ vom Typ boolean. Abbildung 3-4 zeigt einen Ausschnitt der daraus erzeugten Klasse. Copyright © Siemens AG Copyright 2007 All rights reserved Abbildung 3-4: Ausschnitt der Klasse Write Im Konstruktor (Zeile 21-29) werden die Variablen initialisiert. Im weiteren Verlauf dieser Klasse existieren Methoden, mit denen man neue Werte setzen (z.B. setOptions(options), oder die aktuell gespeicherten auslesen kann (z.B. getOptions()). Im Umgang mit diesen mittels WSDL2Java-erzeugten Klassen wird jedoch empfohlen, die mit der Applikation mitgelieferten Klassen (Java Paket „org.opcfoundation.webservices.XMLDA._1_0“) zu verwenden, da es innerhalb verschiedener Versionen von Apache Axis häufig zu Versionskonflikten kommt. Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 13/34 OPC-Client Software in Java Datenaustausch über OPC XML Hinweis 3.3 Bei der Erzeugung der Kommunikationsklassen mittels WSDL2Java erfolgte die Erzeugung der beiden Klassen service.java und serviceStub.java fehlerhaft. Dies hatte zur Folge, dass für die Verwendung der read-Funktion Korrekturen innerhalb der oben erwähnten Klassen notwendig wurden. Außerdem resultiert daraus ein geringfügig abgeänderter Aufruf der read-Funktion innerhalb der Client Applikation, weitere Informationen hierzu sind in Kapitel 3.3.1 enthalten. In der hier bereitgestellten Software-Version ist dieser Fehler jedoch behoben und die read-Funktion kann fehlerfrei eingesetzt werden. Klassenbeschreibung der OPC Browser Applikation Copyright © Siemens AG Copyright 2007 All rights reserved Im Folgenden werden die einzelnen Klassen des Java Programms und dessen Funktionsweise erläutert. Die eigentliche Anwendung, also der OPC Browser, besteht aus vier Basis-Klassen. Tabelle 3-1 enthält eine Übersicht sowie kurze Beschreibung jeder Klasse. Eine detaillierte Beschreibung der in den einzelnen Klassen enthaltenen Methoden ist in den folgenden Abschnitten dieses Dokumentes enthalten. Tabelle 3-1: Klassenübersicht der Applikationen Java Beispiel-Applikation MainWindow Klasse zur Initialisierung aller Anfangswerte des Programms. Enthält u.a. das GUI, einige OPCKommunikationsfunktionen sowie die main() Funktion PWDWindow Klasse zur Erzeugung des Fensters zur Passworteingabe CyclicRead Klasse zur Erzeugung und Aktualisierung des Fensters zur Parametereingabe der Programm-funktion Cyclic Read Subscription Klasse zur Erzeugung und Aktualisierung des Fensters zur Parametereingabe der Programmfunktion Subscription Im Folgenden werden die OPC XML-DA Zugriffsfunktionen getStatus, browse, read, write und subscription beschrieben. getStatus, browse, read und write werden dabei innerhalb der Klasse MainWindow realisiert, die Funktion subscription entsprechend in der gleichnamigen Klasse Subscription. Die Klasse CyclicRead stellt eine Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 14/34 OPC-Client Software in Java Datenaustausch über OPC XML Erweiterung der read-Funktion dar und ermöglicht ein zyklisches Lesen einer bestimmten Variablen. Dies entspricht also dem in Kapitel 3.1 bereits erwähnten Pollen einer Variablen. Zu jeder dieser Funktionen existiert eine Java Klasse innerhalb des Paketes „org.opcfoundation.webservices.XMLDA._1_0“ (z.B. Read.class, Write.class. etc.), die automatisch aus der WSDL Datei erzeugt wurde. Zusätzlich existieren noch weitere Klassen, für die Funktion write z.B. WriteResponse.class oder WriteRequestItemList.class. Diese Klassen haben je nach OPCFunktion bestimmte Aufgaben, z.B. ist die Klasse WriteResponse.class der Datentyp für die vom Server zurück gelieferten Daten eines write Aufrufs. Copyright © Siemens AG Copyright 2007 All rights reserved Grundsätzlich läuft ein Zugriff auf den OPC XML-DA Server der Simotion Steuerung wie folgt ab (hier am Beispiel der Funktion write): 1. Zunächst wird eine globale Instanz der Klasse ServiceStub mit Namen mySimotionWebService erzeugt. Die Klasse ServiceStub resultiert aus der WSDL-Datei und wurde automatisch erzeugt. Sie bildet die Basisklasse für die mittels Apache Axis nutzbaren Webservices. Weitergehende Informationen hierzu sind in der Dokumentation der Apache Axis Software zu finden. 2. Erzeugen einer Instanz und anschließende Initialisierung der Klasse Write. Diese enthält die beim Aufruf der write Funktion an den OPC-Server zu übergebenen Parameter. Für die Parametrierung dieser Instanz von Write wiederum werden Instanzen weiterer Klassen als entsprechender Datentypen benötigt, hier z.B. WriteRequestItemList, die die Liste der Items enthält, welche in den OPC-Server geschrieben werden sollen. 3. Erzeugen einer Instanz der zugehörigen Response-Klasse (hier WriteResponse, diese Klasse existiert für alle OPC-Funktionen, z.B. ReadResponse, etc.). Diese Instanz wird nach dem Aufruf der OPCFunktion write die vom OPC-Server zurück gelieferten Daten enthalten, hier z.B. eine Statusmeldung, ob das write erfolgreich war. 4. Nach der Ausführung der OPC-Funktion erfolgt eine Auswertung der vom OPC-Server gelieferten Daten, also der nun in der Instanz der Klasse WriteResponse enthaltenen Daten. Diese Daten stehen nun zur weiteren Bearbeitung innerhalb des Java-Programms zur Verfügung. Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 15/34 OPC-Client Software in Java Datenaustausch über OPC XML 3.3.1 Klasse MainWindow (MainApplet) Die Klasse MainWindow enthält die grundlegenden Funktionen zur Erstellung der grafischen Benutzeroberfläche (GUI) des Programms, auf die hier nicht weiter eingegangen wird. Weiterhin enthält sie die Implementierungen der OPC-Funktionen getStatus, browse, read und write. Diese werden im Folgenden ausführlich erläutert. Die Methode getStatus eignet sich hier besonders gut als Einstieg, da dem zugehörigen OPC-Aufruf eine relativ einfache Datenstruktur zugrunde liegt. Zunächst sollte jedoch die Methode mySimotionWebService_SetUp betrachtet werden: Diese realisiert keine OPC-Funktion, sondern initialisiert eine Instanz der Klasse ServiceStub, auf der die OPC-Kommunikation aufsetzt. Copyright © Siemens AG Copyright 2007 All rights reserved private void mySimotionWebService_SetUp() Wie in Kapitel 3.3 - 1. beschrieben, wird die Variable mySimotionWebService mittels des Aufrufs org.opcfoundation.webservices.XMLDA._1_0.ServiceStub mySimotionWebService; als globale Variable innerhalb des Java Programms erzeugt. Sie ist also innerhalb aller anderen Methoden verfügbar. Die Initialisierung von mySimotionWebService wiederum findet in der hier betrachteten Methode statt: mySimotionWebService = new org.opcfoundation.webservices.XMLDA._1_0.ServiceStub (new java.net.URL(jTextFieldURL.getText()), null); mySimotionWebService.setUsername(sUName); //credentials mySimotionWebService.setPassword(sPWD); Es wird also eine Instanz der Klasse ServiceStub erzeugt. Dem Konstruktor der Klasse wird die im URL-Textfeld des Java Programms eingetragene URL übergeben. Dies entspricht der URL, unter der die Simotion Steuerung (und somit der OPC-Server) angesprochen wird. Die zweite übergebene Variable (null) wird nicht weiter betrachtet. Anschließend werden noch Benutzername und Passwort gesetzt. private void getStatus() org.opcfoundation.webservices.XMLDA._1_0.GetStatus parameters = new org.opcfoundation.webservices.XMLDA._1_0.GetStatus(); Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 16/34 OPC-Client Software in Java Datenaustausch über OPC XML Die Variable parameters ist eine Instanz der Klasse GetStatus. Im Folgenden wird diese Variable initialisiert, hier lediglich mit der Zuweisung parameters.setLocaleID("en"); Dies entspricht bis hier hin dem in Kapitel 3.3unter 2. Zusammengefassten. Bei diesem relativ einfachen Aufruf getStatus besteht die Parameterinitialisierung lediglich aus dieser einen Zuweisung. Weitere Parametrierungen wie in Kapitel 3.3- 2. beschrieben werden hier nicht benötigt. Es reicht aus, die Variable parameter direkt zu initialisieren. Nun wird die Response-Klasse zu GetStatus instanziert (siehe Kapitel 3.33.): org.opcfoundation.webservices.XMLDA._1_0.GetStatusResponse getStatusResp = null; Copyright © Siemens AG Copyright 2007 All rights reserved Die Variable getStatusResp vom Typ GetStatusResponse wird die vom OPC-Server nach dem Aufruf der getStatus Methode zurück gelieferten Daten aufnehmen. Diese Zuweisung erfolgt beim eigentlichen Aufruf der OPC-Funktion (siehe Kapitel 3.3- 4.): getStatusResp = mySimotionWebService.getStatus(parameters); Hier wird der eigentliche Aufruf der Funktion getStatus an den OPCServer gesendet. Die vom Server gelieferten Daten werden in der Variablen getStatusResp vom Datentyp GetStatusResponse gespeichert. Eine Auswertung dieser vom Server gesendeten Daten, also eine Umsetzung in eine Java Programmvariable erfolgt in den beiden Anweisungen ServerStatus serverStatus = getStatusResp.getStatus(); String simotionServerStatus = serverStatus.getStatusInfo(); Der Datentyp ServerStatus ist ebenfalls eine aus der WSDL-Datei erzeugte Klasse. Die Variable simotionServerStatus vom Typ String kann dann innerhalb des Java Programms verwendet und beispielsweise als Statusmeldung ausgegeben werden. private void browse() Die Kommunikation zu dem OPC-Server mittels der Funktion browse gestaltet sich sehr ähnlich zu der oben beschriebenen Funktion getStatus. Zunächst wird wieder eine Variable parameters erzeugt, hier natürlich als Instanz der Klasse Browse anstatt als Instanz der Klasse getStatus. Daraufhin werden hier zusätzlich zu dem oben auch getätigten Aufruf parameters.setLocaleID("en"); noch die beiden Member-Variablen itemPath und itemName von parameters initialisiert: parameters.setItemPath(itemPath); Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 17/34 OPC-Client Software in Java Datenaustausch über OPC XML parameters.setItemName(itemName); Eine Besonderheit ist an dieser Stelle, dass nach dem ersten Verbindungsaufbau des Clients zur Simotion Steuerung die Methode browse aufgerufen wird, ohne das aktuelle Variabeln itemPath und itemName existieren. In diesem Fall werden leere Strings an den OPCServer übergeben mit der Anforderung, den Root-Knoten seiner internen Variablenstruktur zurückzuliefern. Im weiteren Verlauf dieser Methode werden dann analog zu getStatus die vom OPC-Server erhaltenen Daten weiter verarbeitet. Konkret werden hier die erhaltenen OPC-Items der internen Server-Variablen als Baumstruktur innerhalb der GUI dargestellt. private void write() Copyright © Siemens AG Copyright 2007 All rights reserved Eine etwas komplexere Datenstruktur liegt einem write-Aufruf zugrunde: (1) org.opcfoundation.webservices.XMLDA._1_0.Write parameters = new (…)Write(); (2) org.opcfoundation.webservices.XMLDA._1_0.RequestOptions options = new (…)RequestOptions(); (3) org.opcfoundation.webservices.XMLDA._1_0.WriteRequestItemList itemList = new (…)WriteRequestItemList(); (4) org.opcfoundation.webservices.XMLDA._1_0.ItemValue[] items = new ItemValue[1]; (5) org.opcfoundation.webservices.XMLDA._1_0.ItemValue item = new ItemValue(); Wie schon bei getStatus und browse, wird zunächst eine Instanz der Klasse Write selbst erzeugt (auch hier erneut eine Variable namens parameters(1)). Diese Variable parameters wird, ebenso wie schon gesehen, beim Aufruf der write Funktion an den OPC-Server übergeben, hier ist allerdings eine andere Initialisierung derselben nötig. Dazu wird die Variable options deklariert (2), die nachdem sie selbst initialisiert wurde (options.setLocaleID("en")) wiederum der Variablen parameters zugeordnet wird: parameters.setOptions(options); Es folgt die Variable itemList als Instanz der Klasse WriteRequestItemList (3) sowie die Variablen items (4) und item (5) als Instanz von ItemValue. Diese auf den ersten Blick redundante Struktur ist nötig, um die von der OPC XML-DA Spezifikation vorgegebene Datenstruktur einzuhalten. itemList ist also eine Liste von Items, und diese Liste von Items benötigt auch eine Liste von entsprechenden Werten (also ItemValues (4)). Da hier nur ein Item an den Server übermittelt wird, wird items als Array mit nur einem Element als Inhalt initialisiert Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 18/34 OPC-Client Software in Java Datenaustausch über OPC XML (ebenfalls (4)). Die Variable item (5) schließlich repräsentiert das eigentlich zu übertragene Item. Diese gesamte Struktur wird deutlicher, wenn man folgende Zuweisungen betrachtet: (1) item.setItemPath(itemPath); (2) item.setItemName(itemName); (3) item.setValue(str); //String str ist der in der GUI eingetragene //und zu schreibende Wert des //entsprechenden Items (4) items[0] = item; (5) itemList.setItems(items); (6) parameters.setItemList(itemList); Copyright © Siemens AG Copyright 2007 All rights reserved Zunächst wird die Variable item mit den aktuellen Werten belegt, also itemPath (1), itemName (2) und str (3) als den im OPC-Server zu schreibenden Wert. Dann wird dieses item an Position 0, also der ersten (und in diesem Fall einzigen) Position des Arrays items geschrieben (4). Mithilfe der Methode setItems wird das Array items nun der Variablen itemList zugeordnet (5), dieses wiederum wird mittels setItemList der Variablen parameters zugewiesen (6). Damit ist die Variable parameters für die write Funktion des OPC-Servers initialisiert. Analog zu den vorherigen Funktionen wird nun noch der WriteResponse-Typ deklariert: org.opcfoundation.webservices.XMLDA._1_0.WriteResponse writeResponse = null; Der eigentliche write-Zugriff auf den OPC-Server erfolgt ebenfalls analog zu den bereits beschriebenen Funktionen. writeResponse = mySimotionWebService.write(parameters); In diesem Beispiel besteht die anschließende Auswertung von writeResponse lediglich darin zu prüfen, ob sie null ist oder nicht. Ist dies nicht der Fall, wird durch den Aufruf der read-Funktion (siehe nächster Abschnitt) der aktuelle (also soeben neu geschriebene) Wert des OPC Items abgefragt. Eine weitere Möglichkeit wäre hier z.B., mittels der Anweisung parameters.setReturnValuesOnReply(true); den Wert der aktuell geschriebenen Variablen vom Server in der writeResponse mit zurücksenden zu lassen. Alle weiteren möglichen Optionen und Einstellungen der zu übermittelnden Parameter an den OPC-Server sind der OPC XML-DA Spezifikation 1.0 zu entnehmen. Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 19/34 OPC-Client Software in Java Datenaustausch über OPC XML private String read() Die Methode read, welche ein OPC-Item des Servers liest, ist vom Aufbau der Datenstruktur der Parameter dem des write-Aufrufes sehr ähnlich. Der Unterschied zu write resultiert daraus, dass die read-Funktion bzw. die Klasse Read fehlerhaft aus der WSDL-Datei erzeugt wurde (s. Kapitel 3.2). So wird nach der Korrektur dieser Fehler bei dem Aufruf nicht nur eine Variable (parameters) übergeben wie oben, sondern die Parameter options und itemList, die jedoch analog zu oben initialisiert wurden. Im Endeffekt fallen also die beiden Zuweisungen parameters.setOptions(options); Copyright © Siemens AG Copyright 2007 All rights reserved parameters.setItemList(itemList); weg, die (in obigen Fällen) die an den OPC-Server zu übermittelnde Variable parameters initialisiert. Stattdessen werden hier die beiden Parameter options und itemList direkt übergeben: readResponse = mySimotionWebService.read(options,itemList); Natürlich werden auch diese beiden Parameter analog zur write-Funktion vorher mit dem Namen, Pfad, etc. des zu lesenden Items initialisiert. Ein weiterer Unterschied zu den vorherigen Methoden ist, dass die Methode read vom Typ String ist, also einen String als Rückgabewert liefert. Bei diesem Rückgabewert handelt es sich um eben den vom OPCServer gelesenen Wert des Items. Dieser wird im weiteren Verlauf der Methode aus der Variablen readResponse ermittelt und dem Rückgabewert der read-Methode zugewiesen. 3.3.2 Klasse PWDWindow Die Klasse PWDWindow hat lediglich die Aufgabe, ein neues Fenster mit einer Benutzername-Passwort-Abfrage zu erzeugen und anzuzeigen. Die eingetragenen Daten werden in die Variablen String sUName und String sPWD geschrieben, und anschließend an die gleichnamigen Strings in MainWindow übergeben, die dort als globale Variablen deklariert wurden. 3.3.3 Klasse CyclicRead Die Klasse CyclicRead realisiert ein zyklisches Lesen einer Variablen im OPC-Server. Dazu wird im Hauptprogramm der Klasse MainWindow eine Instanz der Klasse CyclicRead erstellt. Dabei wird das aktuell im Variablenbaum ausgewählte Item an CyclicRead übergeben. CyclicRead erzeugt nun ein neues Fenster, in dem die weiteren Parameter des zyklischen Lesevorgangs eingetragen werden können. Die grundlegende Funktionalität, d.h. die Deklaration und Initialisierungen der benötigten Variablen und Parameter entsprechen dabei denen der Standard-Read-Funktion wie in Kapitel 2.2.1 beschrieben. Das zyklische Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 20/34 OPC-Client Software in Java Datenaustausch über OPC XML Auslesen der Variablen, also der sich zyklisch wiederholende Aufruf der read-Methode, wird mittels der Standard-Java-Klasse Timer und der zugehörigen Funktion einer TimerTask realisiert. Weitergehende Informationen hierzu sind in der Standard-Java-API2 zu finden (für Java 1.4.2 z.B. unter http://java.sun.com/j2se/1.4.2/docs/api/). 3.3.4 Klasse Subscription Copyright © Siemens AG Copyright 2007 All rights reserved Grundsätzlich könnte man die Funktion Subscription als „intelligentes Pollen“ interpretieren. Der Client registriert eine oder mehrere Variablen für die Subscription im Server. Daraufhin wird mittels der Funktion SubscriptionPolledRefresh dieses intelligente Polling eingeleitet. Technisch gesehen wird dabei vom Client eine Verbindung zum Server aufgebaut, die der Server für einen gewissen Zeitraum aufrechterhält, indem er die Antwort verzögert. Ändern sich innerhalb dieses Zeitraums einer der zur Subscription registrierten Werte im Server, so sendet dieser sofort nach dieser Änderung eine Antwort mit den entsprechenden neuen Werten an den Client. Ändert sich jedoch keiner der Werte innerhalb dieses Zeitraums, wird eine leere Antwort an den Client zurück gesendet, welche dann vom Client entsprechend ausgewertet werden kann. So kann eine Reduzierung des Datenverkehrs sowie der durch hochfrequentes Polling (s. CyclicRead) entstehenden Systemlast erreicht werden. Mittels des Aufrufs der Methode SubscriptionCancel wird eine laufende Subscription beendet. Innerhalb einer Subscription, also der Registrierung mittels der Methode subscribe, können eine oder mehrere Variablen überwacht werden. Die Identifizierung der zur Subscription registrierten Variablen wird über serverHandles realisiert. Diese serverHandles werden bei dem Aufruf der Methode subscribe vom OPC-Server zurückgeliefert. Der Client verwendet diese Handles, um bei Aufruf der Methoden SubscriptionPolledRefresh sowie SubscriptionCancel die anzusprechende(n) Variable(n) zu identifizieren. Abbildung 3-5 zeigt den gesamten Ablauf der Subscription-Funktion, welche im Anschluss an die Abbildung ausführlich erläutert wird. Wie hier bereits ersichtlich ist, werden bei der Subscription im Vergleich zu den bis jetzt betrachteten OPC-Funktionen noch einige zusätzliche Angaben benötigt. Der Ablauf der gesamten Funktion Subscription ist im Folgenden beschrieben. 2 application programming interface – Deutsch: Schnittstelle zur Anwendungsprogrammierung Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 21/34 OPC-Client Software in Java Datenaustausch über OPC XML Copyright © Siemens AG Copyright 2007 All rights reserved Abbildung 3-5: Flussdiagramm einer Subscription 1. Zunächst wird - wie bei allen anderen OPC-Funktionen auch - eine globale Instanz der Klasse ServiceStub mit Namen mySimotionWebService erzeugt. 2. Es folgt die Deklaration und Initialisierung von jeweils einer Instanz der Klassen Subscribe, SubscriptionPolledRefresh und SubscriptionCancel. Wie bei den anderen OPC-Funktionen sind diese Instanzen für die Parameterübergabe an die OPC-Funktion zuständig. 3. Die Instanzen aus 2. werden initialisiert mit den benötigten Werten. Dazu müssen weitere Variablen erstellt werden, beispielsweise eine Instanz der Klasse SubscribeRequestItem, welche in diesem Fall lediglich ein Item enthält, dass für die Subscription registriert werden soll. 4. Die Methode subscribe wird aufgerufen, das vorher zugewiesene Item wird für die Subscription im OPC-Server registriert. 5. Mittels der Methode SubscriptionPolledRefresh wird der Wert einer Variablen überprüft. Diese Methode muss zyklisch aufgerufen werden, die Antworten des Servers können durch die beiden Parameter holdtime und waitTime entsprechend der benötigten zeitlichen Aktualität herausgezögert werden. Hier ist der eigentliche Vorteil einer Subscription gegenüber einem einfachen Polling zu sehen. waitTime ist der Zeitraum, die der Server auf die Änderung einer Variablen warten soll. Die holdtime dagegen beschreibt einen Zeitraum, die der Server vor einer Rückmeldung eines Variablenwertes auf jeden Fall warten muss, ob nun eine Änderung des Wertes eintritt oder nicht. Also beginnt die eigentliche Überwachung einer Variablen nach der Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 22/34 OPC-Client Software in Java Datenaustausch über OPC XML Copyright © Siemens AG Copyright 2007 All rights reserved holdtime, danach, also innerhalb der waitTime, würde eine Variablenänderung im Server unmittelbar an den Client gesendet werden. 6. Abbildung 3-6 verdeutlicht diese Funktionalität. Durch Anpassung dieser beiden Parameter kann also je nach zeitlicher Anforderung der Anwendung ein Kompromiss zwischen Benachrichtigungszeitraum nach Werte-Änderung und Netzwerkverkehr gefunden werden. Zu beachten ist hier, dass der OPC-Server als holdtime eine absolute Zeitangabe in Form eines java.util.Calendar erwartet. Die Eingaben der GUI in Millisekunden werden im Java-Programm in eine Variable vom Typ Calendar konvertiert. Als Basis-Zeitwert wird der Antwortzeitpunkt des Servers auf die Registrierung der Subscription herangezogen, also der bei der Methode subscribe zurück gelieferte Parameter ReplyTime. Die waitTime hingegen wird vom OPC-Server als Zeitangabe in Millisekunden erwartet und kann also direkt aus der GUI übernommen und in den entsprechenden Parameter übertragen werden. Hinweis Die im Subscription-Dialog angezeigte Zeit basiert auf den SIMOTIONinternen Zeiteinstellungen. Zu beachten ist die Einstellung der Zeitzone bezogen auf die GMT. Während der Sommerzeit ist die die Standardeinstellung von GMT +60min auf GMT +120min einzustellen. Abbildung 3-6: Zusammenhang zw. holdTime und waitTime Minimaler Zeitraum bis zur Antwort des Services Maximaler Zeitraum bis zur Antwort des Services Hold Time Wait Time Veränderungen innerhalb dieses Zeitraumes resultieren in einer Rückmeldung nach Ablauf der Holdtime Veränderungen innerhalb dieses Zeitraumes resultieren in einer unmittelbaren Rückmeldung 7. Soll die Überwachung der Variablen beendet werden, geschieht dies mittels des Aufrufs der Methode SubscriptionCancel. Durch Übergabe des serverHandle bzw. des Arrays von serverHandles bei mehreren Variablen an den OPC-Server beendet dieser die Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 23/34 OPC-Client Software in Java Datenaustausch über OPC XML entsprechende Subscription, das heißt die Überwachung der Variablen auf Änderungen deren Werte. Um während des zyklischen Aufrufes von SubscriptionPolledRefresh nicht die Funktionalität des restlichen Programms zu beeinträchtigen, wird hier die Klasse SubscriptionPolledRefreshThread als Erweiterung der Java Klasse Thread genutzt. Mit der Implementierung der Funktion SubscriptionPolledRefresh innerhalb dieser Klasse wird erreicht, dass diese in einem separaten Thread ausgeführt wird und die while-Schleife, welche den zyklischen Aufruf von SubscriptionPolledRefresh enthält, nicht die Ausführung des restlichen Programms beeinträchtigt. Auf eine ausführliche Beschreibung des gesamten Quelltextes der Klasse Copyright © Siemens AG Copyright 2007 All rights reserved Subscription wird hier verzichtet, da die grundlegenden Mechanismen zur Initialisierung der benötigten Parameter etc. mit denen der anderen, bereits beschriebenen OPC-Funktionen identisch sind. Lediglich werden in dem Fall Subscription einige zusätzliche Parametrierungsvariablen verwendet (z.B. eben holdTime oder waitTime). Für weitergehende Informationen der Funktionsweise einer Subscription sei auf die OPC XMLDA 1.0 Spezifikation verwiesen. 3.4 Ausführen des Beispiel-Programms Zum Ausführen des Java Beispielprogramms müssen die folgenden Voraussetzungen erfüllt sein: • Installation von Java Runtime Environment JRE V1.4.2 (oder größer) (http://java.sun.com/j2se/1.4.2/download.html) • Extrahieren des zip-Archivs OPC-Xml-Browser.zip. Es entsteht ein gleichnamiges Verzeichnis OPC-Xml-Browser. Das Skript run.cmd muss in dem genau übergeordneten Pfad liegen. Sind diese Voraussetzungen erfüllt, kann die Beispiel-Applikation mittels Ausführen des Skripts „run.cmd“ gestartet werden. 3.5 Import des Beispiel-Projektes in Eclipse Um Änderungen oder Erweiterungen des Beispielprogramms vorzunehmen, wird empfohlen, die Java Programmierumgebung Eclipse zu verwenden. Diese ist kostenfrei verfügbar und kann unter der Adresse http://www.eclipse.org/downloads/ geladen werden. Das Beispiel-Projekt wurde erstellt und getestet mit der Version SDK 3.2.2 der Eclipse Programmierumgebung. Ebenso wird der Projektexport und -import auf Basis dieser Version beschrieben. Eine evtl. Änderung der Dialoge oder eingeschränkte/fehlerhafte Funktionalität des Projektimportes sowie der Lauffähigkeit des Beispiel-Projektes allgemein kann für andere Versionen des Eclipse SDK nicht ausgeschlossen werden. Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 24/34 OPC-Client Software in Java Datenaustausch über OPC XML Hinweis Unter http://www.eclipse.org/documentation/ ist eine (englischsprachige) Dokumentation des Eclipse SDK zu finden, welche einen Einstieg in die Arbeit mit Eclipse bieten kann. Um das Projekt in Eclipse zu öffnen, sind die folgenden Schritte notwendig: Über den Menüzugriff „File“ Î „Import“ (Abbildung 3-4) öffnet sich der folgende Dialog (Abbildung 3-5). Hier ist die Option „Existing Projects into Workspace“ auszuwählen und mit „Next“ zu bestätigen. Copyright © Siemens AG Copyright 2007 All rights reserved Abbildung 3-4: Importieren eines Eclipse-Projektes 1 Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 25/34 OPC-Client Software in Java Datenaustausch über OPC XML Copyright © Siemens AG Copyright 2007 All rights reserved Abbildung 3-5: Importieren eines Eclipse-Projektes 2 Im Dialog „Import“ (Abbildung 3-6) ist die Auswahl auf „Select archive file“ zu setzen und das mit diesem FAQ gelieferte zip-File „OPC-XmlBrowser.zip“ auszuwählen. Abbildung 3-6: Importieren eines Eclipse-Projektes 3 Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 26/34 OPC-Client Software in Java Datenaustausch über OPC XML Das bestehende Projekt wird nun in den Eclipse Workspace importiert und anschließend automatisch kompiliert. Es wird nach dieser Kompilierung nicht fehlerfrei sein, weil die benötigten externen Bibliotheken noch nicht eingebunden sind. Diese sind zwar in dem Projekt-Zip-File enthalten, jedoch werden sie nicht automatisch in das importierte Projekt integriert. Dies kann folgendermaßen nachgeholt werden: Durch einen Rechtsklick auf das importierte Projekt öffnet sich das Kontextmenü, hier ist „Properties“ auszuwählen (Abbildung 3-7). Copyright © Siemens AG Copyright 2007 All rights reserved Abbildung 3-7: Externe JAR-Dateien hinzufügen 1 Es erscheint der Properties-Dialog (Abbildung 3-8), unter „Java Build Path“ ist die Registrierkarte „Libraries“ zu aktivieren. Mittels des Buttons „Add external JARs“ müssen nun die fehlenden externen Bibliotheken eingefügt werden. Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 27/34 OPC-Client Software in Java Datenaustausch über OPC XML Abbildung 3-8: Externe JAR-Dateien hinzufügen 2 Copyright © Siemens AG Copyright 2007 All rights reserved Diese Bibliotheken befinden sich im während des Imports des Projektes neu angelegten Projekt-Ordner „OPC-Xml-Browser“, und dort im Unterordner „lib“. Der Projekt-Ordner ist zu finden im „Workspace“ von Eclipse, welcher beim Erststart der Eclipse Software angelegt wurde. Nach Drücken des Buttons „Add external JARs“ erscheint ein DateiAuswahl-Dialog (Abbildung 3-9). Es müssen alle im „lib“ Verzeichnis enthaltenen Bibliotheken (*.jar-Dateien) ausgewählt und dem Projekt hinzugefügt werden. Abbildung 3-9: Externe JAR-Dateien hinzufügen 3 Nach Übernahme dieser Einstellungen kompiliert Eclipse das Projekt erneut, nun wird der Quellcode fehlerfrei übersetzt. Durch Öffnen des im „Package Explorer“ entstandenen Verzeichnisbaums „OPC-Xml-Browser Æ src Æ simotion_opc_xml“ kann die Java-Klasse Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 28/34 OPC-Client Software in Java Datenaustausch über OPC XML „MainWindows.java“ ausgewählt werden. Diese ist wie in Kapitel 3.3 beschrieben die Hauptklasse des Java Programms. Ein Rechtsklick auf diese Klasse öffnet das zugehörige Kontextmenü, mit „Run as Æ Java Application“ wird das Programm ausgeführt (Abbildung 3-10). Hinweis Nach erstmaliger Ausführung des Programms kann es durch Klicken des in Abbildung 3-10 rot markierten „Start“ Buttons ausgeführt werden. Copyright © Siemens AG Copyright 2007 All rights reserved Abbildung 3-10: Programm ausführen Nachdem der Import des Projektes abgeschlossen ist, können nun Änderungen der OPC-Browser-Anwendung vorgenommen werden. Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 29/34 OPC-Client Software in Java Datenaustausch über OPC XML Nach einem Speichern einer geänderten Quelltextdatei kompiliert Eclipse wiederum automatisch die geänderte(n) Datei(en). Um Änderungen vorzunehmen reicht also ein Speichern der Quellen aus, die zugehörigen *.class Dateien erzeugt Eclipse selbständig. Copyright © Siemens AG Copyright 2007 All rights reserved Hinweis Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 30/34 Aufzeichnen von SOAP-Telegrammen zu Diagnosezwecken Datenaustausch über OPC XML 4 Aufzeichnen von SOAP-Telegrammen zu Diagnosezwecken 4.1 Einstellungen des Trace Tools MSSoapT3 Die gesendeten und empfangenen SOAP Telegramme können mittels des Trace-Tools MsSoapT3.exe zu Diagnosezwecken im XML Format angezeigt werden. Dazu müssen in MsSoapT3 folgende Einstellungen gewählt werden ( Abbildung 4-1): Copyright © Siemens AG Copyright 2007 All rights reserved Abbildung 4-1: Einstellung Trace-Tool Als „Destination host“ muss die IP-Adresse der Simotion Steuerung eingetragen werden. Der OPC XML Browser adressiert dann nicht mehr direkt die Steuerung, sondern verwendet stattdessen die folgende URL:http://localhost:8080/soap/opcxml (Abbildung 4-2). Das Trace Tool fungiert so als Gateway und leitet alle lokalen Anfragen an Port 8080 an den OPC Server weiter. Abbildung 4-2: Adressierung im OPC Browser Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 31/34 Aufzeichnen von SOAP-Telegrammen zu Diagnosezwecken Datenaustausch über OPC XML 4.2 Beispiele der Telegrammaufzeichnungen In Abbildung 4-3 und Abbildung 4-4 sind Aufzeichnungen der SOAPTelegramme als Beispiel dargestellt. Abbildung 4-3 enthält die Darstellung einer Browse-Anfrage an den OPC Server und dessen Antwort. Copyright © Siemens AG Copyright 2007 All rights reserved Abbildung 4-3: Browse Anfrage (oben) und Antwort (unten) Abbildung 4-4 stellt eine Read-Anfrage an den Server dar. Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 32/34 Aufzeichnen von SOAP-Telegrammen zu Diagnosezwecken Datenaustausch über OPC XML Copyright © Siemens AG Copyright 2007 All rights reserved Abbildung 4-4: Read Anfrage der Variablen var/servoControlClock mit Resultat 1000: Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 33/34 Anhang Datenaustausch über OPC XML 5 Anhang 5.1 Quelltexte und Softwaredokumentation Die Java-Quelltexte sowie eine Standard-Softwaredokumentation (JavaDoc, siehe http://java.sun.com/j2se/javadoc/) sind auf der „Tools and Applications“ – CD zu finden, welche weitere zusätzliche Anwendungen / FAQ’s zum Thema SIMOTION enthält. Copyright © Siemens AG Copyright 2007 All rights reserved 5.2 Weiterführende Informationen Für weitere Informationen zum Thema OPC im Allgemeinen ist der Internet auftritt der OPC Foundation zu empfehlen (http://www.opcfoundation.org/). Diese Organisation entwickelt und pflegt die OPC-StandardSpezifikationen. Zum Thema Eclipse sei die Internet-Seite http://www.eclipse.org/ empfohlen. Hier finden sich ausführliche Informationen über das Projekt Eclipse an sich sowie zu weiteren Projekten bezüglich der Eclipse Entwicklungsumgebung. 5.3 Literatur- und Quellenverzeichnis Tabelle 2-1: SIMOTION IT - Ethernet basierende HMI- und Diagnosefunktion, Siemens AG Abbildung 3-5: „OPC XMLDA 1.01 Specification.pdf“, OPC Foundation Technische Änderungen vorbehalten. Version 1.0 Ausgabe 07/2007 34/34