Dipl.-Ing. Christian Baumann

Distributed Information Exchange

Auszug aus der Dissertation "Company Wide Web (CWW) - Einsatz von Intranets im Bereich der industriellen Kommunikation"
Institut für Fertigungstechnik, Technische Universität Wien, August 1997, Veröffentlichungstermin: Jänner 1998.



Inhaltsverzeichnis


1 Einleitung

Wie z.B. in [CB96] und [CB97] beschrieben, stößt der Einsatz von Internet-Technologien für industrielle Kommunikationssysteme in manchen Anwendungsbereichen an seine Grenzen, d.h. daß manche Anforderungen durch den Einsatz von Intranets nicht optimal zu erfüllen sind. Dies führt zur Forderung, für diese Problembereiche neue Lösungen zu realisieren, was in diesem Kapitel durch die Entwicklung eines neuen Kommunikationskonzeptes durchgeführt wird. Dieses Konzept, vom Autor "D.I.E.P.E." - "Distributed Information Exchange in Production Environments" benannt, benutzt dabei die vorhandenen Internet-Technologien als Basis und ergänzt bzw. erweitert sie in den angesprochenen Problembereichen.
D.I.E.P.E. basiert einerseits auf den praktischen Erfahrungen, andererseits auf den theoretischen Erkenntnissen des Autors. Es ist daher sowohl durchgängig konzipiert und daher in weiten Bereichen anwendbar, als auch gleichzeitig mit angemessenem Aufwand zu implementieren und damit praxistauglich.
Das Konzept besteht aus einer Kommunikationsarchitektur, welche ein Kommunkationsprotokoll benutzt. Um externe Systeme in die Architektur zu intregrieren, müssen entsprechende Schnittstellen definiert werden. Im folgenden werden die Anforderungen an diese Komponenten von "D.I.E." zusammengefaßt.

Zurück zum Inhaltsverzeichnis


2 Anforderungen

2.1 Kommunikationsarchitektur

Einen integralen Bestandteil des gesamten Konzeptes bildet die Definition und Entwicklung einer neuartigen Kommunikationsarchitektur ("D.I.E" - "Distributed-Information-Exchange"), die folgende Zielsetzungen erfüllen muß:

2.2 Protokoll

Zur Realisierung der Architektur ist die Entwicklung eines Übertragungsprotokolls ("D.I.E.P." - "Distributed-Information-Exchange-Protocol") nötig, welches folgenden Anforderungen nachkommt:

2.3 Interface

Zur Einbindung von Fremdsystemen sind Schnittstellenspezifikationen zu erstellen. Um dabei besonders auf die Einbindung von technischen/industriellen Anwendungen zu achten, müssen folgende Punkte erfüllt werden:

In Abbildung 2-1 sind einige der Schnittstellen, die im Bereich der industriellen Kommunikation auftreten, dargestellt.


Abbildung 2-1: DIE Schnittstellen

Zurück zum Inhaltsverzeichnis


3 Aufbau der Architektur DIE

Ziel der Kommunikationsarchitektur ist der effiziente, dynamische und ereignisgesteuerte Austausch von Daten. Diese Daten entstehen an verteilten Quellen und müssen an verteilte Ziele übertragen werden, wobei der Datenaustausch virtuell auf Applikationsebene stattfindet.


Abbildung 3-2: Aufbau von DIE

Der Begriff "Application" wird im Zusammenhang mit DIE als Software verstanden, welche auf einem beliebigen Hardwaresystem ablaufen kann. Die einzige Anforderung an ein solches System ist, daß es in ein TCP/IP-Netzwerk integriert werden kann, also einen Netzwerkanschluß und einen IP-Stack (z.B. im Betriebssystem integriert) aufweisen muß. Die Applikation kann in jeder Programmiersprache realisiert werden, die am Zielsystem zur Verfügung steht und auf den IP-Stack zugreifen kann. Darüber hinaus kann die Applikation über beliebige Interfaces auf weitere sog. "externe Ressourcen" zugreifen (Feldbussysteme, SPS, serielle Geräte etc.). Eine Applikation spricht über ein Interface einen Kommunikationsmodul an, dieser besteht aus "Objects", dem "Object-Handler" sowie einem "Channel".
Abbildung 3-2 zeigt den Aufbau der Kommunikationsarchitektur DIE, im folgenden werden die einzelnen Komponenten beschrieben. Um die Beschreibungen besser darstellen zu können, wird folgendes Beispiel (Abbildung 3-3) herangezogen:


Abbildung 3-3: Beispielsystem DIE

Im Beispielsystem laufen drei Applikationen:

  1. Ein Prozeßleitsystem (PLS), welches über eine SPS (externe Ressource) mehrere Anlagen steuert. Am PLS laufen die zwei Kommunikationsmodule C1 und C2. (Bemerkung: Dieselbe Funktionalität könnte auch mit nur einem Modul erzielt werden).

  2. Ein Visualisierungssystem mit Bedienfunktion (VIS), welches den Zustand der Anlage darstellt und dem Benutzer die Möglichkeit gibt, die Anlage ein- bzw. auszuschalten. Auch auf diesem System existieren zwei Kommunikationsmodule.

  3. Eine Datenbankapplikation, welche alle Daten der Anlage aufzeichnet (LOG). Sie wird über ein Kommunikationsmodul mit Daten beschickt.

Im Beispielsystem sind zwei Objekte definiert. Der Wert des Objekts "Füllstand" wird von PLS geschrieben und an VIS und LOG übergeben. Der Wert von "Betriebszustand Setzen" wird von VIS gesetzt und an PLS und LOG übertragen.

3.1 Application

Wie bereits erwähnt, sind die Applikationen jene Elemente, die virtuell miteinander kommunizieren. Die eigentliche Kommunikation wird aber vom Object-Handler abgewickelt. Abstrakt gesehen stellen Applikationen Daten für Partnersysteme bereit bzw. fordern Daten von diesen an, indem sie Inhalte von Objekten beschreiben bzw. lesen.
Die Zuordnung zwischen Applikationen und Kommunikationsmodulen ist flexibel realisierbar. So kann ein Modul von mehreren Applikationen verwendet werden oder eine Applikation mehrere Module benützen (siehe Abbildung 3-2). Da auf einem Rechnersystem (in einer Multitaskingumgebung) mehrere Applikationen ablaufen können, könnte eine Kommunikation mit DIE auch als lokale Schnittstelle zwischen Anwendungen verwendet werden.
Applikationen, die auch mit externen Ressourcen kommunizieren, sind z.B.:

Applikationen ohne externe Ressourcen sind beispielsweise:

Weiters steht die Möglichkeit offen, die Funktionen der Schichten "Application" bis "Object-Handler" in einer einzigen Anwendung zusammenzufassen, um auch spezielle Anforderungen abzudecken, wie z.B. Systeme ohne Multitaskingfähigkeit, mit wenig Speicher, geringer Rechenleistung etc.

3.2 Interface

DIE-Interfaces bilden die Schnittstellen zwischen der Applikation und dem Kommunikationsmodul, indem sie der Applikation Zugriff auf die Objekte ermöglichen. Interfaces können entweder direkt auf (den Speicherbereich der) Objekte zugreifen oder durch Aufruf von Funktionen des Object-Handlers. Die Art des Zugriffs ist davon abhängig, ob ein Interface direkt an die Applikation oder an den Object-Handler gekoppelt ist.
Die direkte Kopplung an die Applikation wird mit Programmbibliotheken realisiert (z.B. DLLs), im anderen Fall werden betriebssystemabhängige Funktionen, wie z.B. DDE oder OLE unter Windows, verwendet. In Abbildung 3-4 werden die beiden Varianten dargestellt.


Abbildung 3-4: Interfacetypen

3.3 Objects

Objekte stellen die zentralen Elemente der Kommunikationsarchitektur aus Sicht der Applikation dar. Sie beinhalten jene Daten, die zwischen den Applikationen ausgetauscht werden. Obwohl sich jedes Objekt physisch auf einem bestimmten Rechner (bzw. in dessen Speicher) befindet, haben alle Anwendungen eine eindeutige Sicht auf alle Objekte.
Ein Objekt ist charakterisiert durch:

In den beiden folgenden Tabellen sind die Objektdefinitionen für die im Beispiel gezeigte Konfiguration enthalten.
 

Bezeichnung  PLS1:C1/Anlage_A/Füllstände/Ist_Wert_1 
Datentyp/struktur Real
Source PLS1:C1
Target 1 VIS:C2
Events 1 "einmal pro Minute und bei jeder Änderung um mehr als 10 %"
Target 2 LOG:C1 
Event 2 "bei jeder Änderung"

Tabelle 3-1: Objektdefinition für "Füllstand"
 

Bezeichnung VIS:C1/Anlage_A/Betriebszustand
Datentyp/struktur Bit
Source  VIS:C1 
Target 1 PLS:C2
Event 1  "jede Änderung" 
Target 2  LOG:C1 
Event 2  "jede Änderung" 

 Tabelle 3-2: Objektdefinition für "Betriebszustand Setzen"

3.4 Object-Handler

Der Object-Handler ist jener Teil der Architektur, der die eigentliche Kommunikations-funktionalität leistet. Seine Aufgaben sind:

Provider/User

Die Funktionalität des Object-Handlers kann in zwei Bereiche gegliedert werden, wovon nur ein Teil vorhanden sein muß. Diese Trennung kann verwendet werden, um bei Bedarf die Implementierung zu vereinfachen.
Der Provider-Teil beinhaltet alle Funktionen, die mit der Verwaltung und Bearbeitung der Objekte zusammenhängt. Ein Provider kann Anfragen erhalten und abarbeiten, aber selbst keine fremden Objekte anfordern. Im Gegensatz dazu verwaltet ein User keine lokalen Objekte, sondern kann nur auf Objekte von Providern zugreifen.
Die in Abschnitt 4 vorgestellte Implementierung des DIE-Protokolles zeigt ein Beispiel für eine derartige Trennung. Auch die in der Beispielkonfiguration verwendeten Module können in Provider und User gegliedert werden (siehe auch Tabelle 3-3).

Object-Server

Ein weiterer Sonderfall ist möglich: Der Betrieb eines Object-Handlers ohne übergelagerte Applikation. Auf diese Weise kann z.B. ein Object-Server realisiert werden, dessen Aufgabe darin besteht, (große Mengen an) Daten zu verwalten (anzufordern, zu empfangen, zu speichern, bei definierten Ereignissen weiterzuleiten etc.).

3.5 Channel

In der oberen Schicht der Architektur kommunizieren die Applikationen "virtuell" miteinander. Auf Ebene des Channels wird die Datenübertragung "real" abgewickelt. Da IP den Einschränkungen der Client-Server Architektur unterliegt (Server kann nicht von sich aus Daten an einen Client senden), umfaßt ein DIE-Channel je einen Server- und einen Client-Teil. Um Unklarheiten zu vermeiden, werden bei DIE statt "Client" und "Server" die Begriffe "Talker" und "Listener" verwendet.
Sowohl Talker als auch Listener benötigen für ihre Aufgabe je einen IP-Socket, d.h. einen eindeutigen Kommunikationskanal in einem IP-Netzwerk, bestehend aus IP-Adresse und Portnummer. Aus Sicht der Kommunikationsarchitektur ist nur der Port des Listeners relevant, dieser muß den jeweiligen Partnermodulen bekannt sein. Die Datenübertragung über IP kann wahlweise mit TCP oder UDP erfolgen.
Die Adresse eines Channels muß systemweit eindeutig sein (was bereits durch die IP-Sockets erzwungen wird) und wird wie folgt aufgebaut:
<IP_Adresse_Host>:<Portnummer_Listener>
Alternativ zu diesem Adressierungsschema ist im vorliegenden Konzept auch eine Zuweisung von Namen zu den IP-Adressen bzw. Portnummern angedacht. Dies würde die Übersichtlichkeit der Konfiguration eines Gesamtsystems wesentlich erleichtern, aber ein eigenes Service, vergleichbar mit DNS, erfordern.

In Tabelle 3-3 ist das Adressierungsschema der in diesem Abschnitt verwendeten Beispielkonfiguration angeführt.
 

Bezeichnung Adresse Typ des Object-Handlers
PLS1:C1 172.16.10.20:2050 Provider
PLS1:C2 172.16.10.20:2051 User
VIS:C1 172.16.10.23:2050 Provider
VIS:C2 172.16.10.23:2051 User
LOG:C1 172.16.33.47:2050 User

Tabelle 3-3: Adressierung der Kanäle

Zurück zum Inhaltsverzeichnis


4 Das Protokoll DIEP

4.1 Funktionsweise

In Abbildung 4-5 ist die grundlegende Funktionsweise des Protokolls DIEP dargestellt: Ein User benötigt bestimmte Daten von einem Provider und stellt eine Anfrage. Aufgrund der Objektdefinition ergeben sich die Adresse des Providers (IP-Adresse + Port) und die Adresse des Objekts selbst. Der Talker-Teil des Users sendet die Anfrage an den Listener-Teil des Providers. Der Provider sendet eine Antwort (Reply) über seinen Talker-Teil an den Listener-Teil des Users. Die Zieladresse wird aus dem Request entnommen (s.u.).


Abbildung 4-5: Funktionsweise von DIEP

Dieses Prinzip klingt simpel, unterscheidet sich aber grundlegend von allen anderen Protokollen, die in der TCP/IP Protocol-Suite Verwendung finden:
Der erste Unterschied besteht darin, daß für DIEP immer zwei Sockets verwendet werden. D.h. einerseits, daß nach Übertragung eines Telegrammes (Request oder Reply) der Socket sofort wieder geschlossen bzw. freigegeben werden kann, und somit für andere Kommunikationsverbindungen zur Verfügung steht. Andererseits bedeutet es, daß zur Übertragung entweder das zuverlässigere Protokoll TCP oder das schnellere und flexiblere UDP verwendet werden kann.
Darüber hinaus zeigt sich ein weiterer Unterschied zu den Standard TCP/IP-Protokollen. Da auch der User über einen Listener verfügt, sind Request und Reply voneinander völlig getrennt. Deshalb kann die Antwort vom Provider entweder sofort abgesetzt werden oder einmal bzw. mehrfach zu beliebigen späteren Zeitpunkten, z.B. zyklisch oder bei bestimmten Ereignissen.
Die in 3.4 angedeutete Möglichkeit der Trennung von Provider- und Userfunktionalität läßt eine Anzahl von Varianten zu, die je nach Bedarf bzw. gegebenen Rahmenbedingungen eingesetzt werden können (siehe Abbildung 4-6). In einem Gesamtsystem können beliebige Varianten gemischt werden.


Abbildung 4-6: Provider/User Varianten
 

Variante 1

In dieser Variante sind Provider und User in einem Modul integriert. Beide verwenden einen gemeinsamen DIE-Channel (d.h. Talker und Listener).Variante 1 wird zum Einsatz gebracht, wenn ein System sowohl Objekte zur Verfügung stellt, als auch auf Objekte anderer Provider zugreift. Die Implementierung der Variante ist relativ komplex, dafür ist ein derartiges System flexibler einsetzbar, als z.B. die Varianten 3, 4 und 5. Nach Variante 1 aufgebaute Systeme können mit allen anderen Varianten kommunizieren.

Variante 2

Wie in Variante 1 sind auch in diesem Fall Provider und User in einem Modul integriert. Der Unterschied besteht darin, daß für Provider und User jeweils ein eigener Channel zur Verfügung steht. Durch diese Trennung können Sicherheitsaspekte erfüllt und Performanceprobleme gelöst werden. Der Nachteil der Variante 2 besteht darin, daß sowohl die Implementierung als auch die Verwaltung komplex sind. Darüber hinaus benötigt ein System der Variante 2 vier Sockets. Systeme, die nach den Varianten 1 und 2 aufgebaut sind, können für alle Anwendungszwecke eingesetzt werden. Daher kann kein "typisches" Einsatzgebiet angegeben werden.

Variante 3

In dieser Variante wird nur der Providerteil implementiert und mit Talker und Listener ausgestattet. Diese Art bietet sich an, wenn ein System lediglich Objekte zur Verfügung stellt, aber keinen Zugriff auf Objekte anderer Provider benötigt. Die Implementierung ist weniger komplex als bei den Varianten 1 und 2. Ein typisches Einsatzgebiet für die Variante 3 sind "black-box" Systeme, wie z.B. der in 5.2 beschriebene IIPLS-Variablenserver.

Variante 4

Diese Variante stellt das Gegenstück zu Variante 3 dar. In diesem Fall ist lediglich der User Teil implementiert. D.h. diese Variante kann selbst keine Objekte zur Verfügung stellen, sondern benötigt einen Provider, z.B. Variante 1, 2 oder 3. Ein System dieser Art ist relativ einfach zu implementieren. Ein typisches Einsatzgebiet ist ein Visualisierungssystem, beispielsweise basierend auf Java-Applets, das je nach dargestellter Seite von den entsprechenden Providern nur die notwendigen Objekte anfordert; damit können überflüssige Datenübertragungen vermieden werden. Ein anderes Beispiel für einen User nach Variante 4 ist der in Abschnitt 5.3 beschriebene DIE-Tester.

Variante 5

Diese Variante besteht aus einem User, der lediglich den Listener-Teil des Channels besitzt. Eine derartiger User ist zwar am einfachsten zu implementieren, kann aber von sich aus keine Objekte anfordern und benötigt daher einen Object-Manager (siehe Variante 6). Durch die Möglichkeit der einfachen Implementierung eignet sich ein User der Variante 5 sehr gut zur Realisierung von ereignisgesteuerten Schnittstellen zu Fremdsystemen. Ein typisches Beispiel ist die Schnittstelle zwischen einem PPS- und einem BDE-System. Sobald die BDE neue Daten liefert (z.B. bei Rückmeldungen), werden diese per DIE an das PPS-System übergeben. Eine derartige Implementierung kann herkömmliche Schnittstellen (z.B. Polling) ersetzen.
Auch der in Abschnitt 5.4 entwickelte IIPLS-Variablenbrowser ist nach dieser Variante implementiert.

Variante 6

Mit dieser Variante wird ein Object-Manager implementiert. Der Object-Manager muß eingesetzt werden, wenn in einem Gesamtsystem ein oder mehrere User nach Variante 5 verwendet werden. Diese beinhalten keinen Talker und können daher von sich aus keine Daten anfordern. Diese Aufgabe wird von Variante 6 übernommen. Darüber hinaus kann der Object-Manager auch Daten für andere User (Varianten 1, 2 und 4) anfordern. Der Vorteil dieser Strategie ist, daß in einem Gesamtsystem bei Bedarf an einem zentralen Punkt festgelegt werden kann, welche Provider welche Objekte (Daten) unter welchen Bedingungen an welche User übertragen. Ein System nach Variante 6 benötigt nicht unbedingt einen Listener-Teil. Die Implementierung eines solchen empfiehlt sich aber trotzdem, da damit der Object-Manager selbst z.B. von einem anderen System fernbedient werden kann. Der im Abschnitt 5.3 beschriebene DIE-Tester kann (im manuellen Betrieb) die Funktion eines Object-Managers erfüllen.
 

4.2 Strukturierung der Daten

Die Strukturierung der Daten, die von einem Provider gehalten werden, steht in unmittelbarem Zusammenhang mit der Adressierung der Objekte, die in 3.3 behandelt wurde. Der Provider ist durch seine Kanalbezeichnung eindeutig identifiziert, die Daten werden durch "Object-Path" und "Object-ID" referenziert (siehe z.B. Tabelle 3-1).
Damit entspricht die Strukturierung einem "Baum", wie er auch z.B. bei Verzeichnissen oder einem URL verwendet wird. Die Anzahl der Ebenen des Object-Path ist beliebig wählbar, so können sowohl einfache (flache) als auch komplexe (tiefe) Strukturen abgebildet werden. Abgesehen von den Applikationsdaten (Objekten) sind auch bestimmte Systemobjekte festgelegt. Diese haben vorgegebene Bezeichnungen und beinhalten Informationen über den Provider selbst (Softwarebezeichnung und -version, Protokollversion, Betriebszustand etc.). Folgendes Beispiel soll die Strukturierung der Daten veranschaulichen:

/Anlage_A/Betriebszustand
/Anlage_A/Fuellstand_1/Ist
/Anlage_A/Fuellstand_1/Soll
/Anlage_A/Fuellstand_2/Ist
/Anlage_A/Fuellstand_2/Soll
/Anlage_A/Drehzahl/Ist
/Anlage_A/Drehzahl/Soll
/Anlage_B/...
/...
/sys/protocol
/sys/software
/sys/alive
/...

Zur Auswahl mehrerer Objekte können diese auch mittels Jokerzeichen "*" adressiert werden, beispielsweise

/Anlage_A/Fuellstand_*/Ist
/sys/*
...

4.3 Anfrage (Request)

Ein Request wird von einem User an einen Provider abgesetzt. Ein Request betrifft entweder das Lesen (Anfordern des Wertes eines Objektes) oder das Schreiben (Setzen des Wertes) von Daten. Je nach Art einer Anforderung resultiert diese entweder in einer einmaligen oder mehrfachen Antwort. Eine Anfrage hat folgenden Aufbau:

[User_Listening_Channel] Request_Type /Object-Path/Object-ID [?Parameter] <CRLF>

User_Listening_Channel: Dieser wird benötigt, um dem Provider mitzuteilen, an welchen Socket eine Antwort zu senden ist. Abhängig davon, wo sich der User befindet, existieren drei Möglichkeiten.

Request_Type: Ist abhängig davon, ob Daten angefordert oder geschrieben werden, entweder "GET" oder "PUT".

Object-Path/Object-ID: Geben die Adresse des gewünschten Objektes an, wobei auch die Verwendung von Jokerzeichen möglich ist.

Parameter sind abhängig von der Art des Requests. Bei GET können folgende Parameter verwendet werden:

Bei einem Request mit PUT muß als Parameter der Wert des zu schreibenden Objektes angegeben werden.

"<CRLF>": Dieses Symbol legt das Ende einer Anfrage fest. Da sowohl User als auch Provider auf unterschiedlichen Rechner- bzw. Betriebssystemplattformen implementiert sein können (die verschiedene Zeichen für Zeilenende verwenden), muß jede Kombination der Zeichen (Hex) 0D und 0A als "<CRLF>" erkannt werden.

4.4 Antwort (Reply)

Die Anfragen der User werden vom Provider beantwortet, wobei der Zeitpunkt der Antwort(en) vom Typ des Requests abhängt. PUT und ONCE-Requests werden sofort beantwortet, Anfragen mit CYCL oder EVENT werden in entsprechende Listen eingetragen und abgearbeitet. Das Ziel (IP-Adresse und Port) der Antwort wird aus dem "User_Listening_Channel" des Requests ermittelt, wie oben dargestellt.
Ein Reply besitzt folgenden Aufbau:

ReplyCode<CRLF>
<CRLF>
ReplyString<CRLF>

Beispiel:

200 OK

X/Y/Z=123

ReplyCode: Dieser Code beinhaltet Status- bzw. Fehlerinformationen sowie, im Falle einer Datenübertragung, den Anfragetyp, welcher die Übertragung ausgelöst hat. Wenn kein Fehler auftritt, liegt der Code in einem Bereich von 200 bis 299, im Fehlerfalle darüber. Tabelle 4-4 zeigt die in der derzeitigen Protokollversion definierten Codes, Klassen und Bedeutungen.
 
 

Code Klasse Text Antwort nach ...
200 OK DATA  Abfrage mit ONCE 
210 OK CYCLE STORED Abfrage mit CYCLE, erste Antwort (sofort)
211 OK CYCLE DATA Ablauf jedes CYCLE-Intervalles
212 OK CYCLE OFF CYCLE Abfrage deaktiviert
220 OK EVENT STORED Abfrage mit EVENT, erste Antwort (sofort) 
221 OK EVENT DATA Änderung der Daten um <delta>
222 OK EVENT OFF EVENT Abfrage deaktiviert
250 OK PUT DATA Daten wurden in Objekt geschrieben
...
300 User-Error ... Fehler auf Userseite (Parameter, Zugriffsverletzung etc.)
...
500 Provider-Error ... Fehler auf Providerseite (keine Objektdefinition etc.)

Tabelle 4-4: DIE Replycodes

ReplyString: Wenn der Statuscode aus der Klasse "OK" stammt, beinhaltet dieser String die vom User angeforderten Daten; bei "Error" jenes Objekt, auf welches sich der Fehler bezieht, falls anwendbar. In der vorliegenden Version von DIE darf der Replystring ausschließlich aus ASCII-Zeichen bestehen. Die für eine Übertragung von binären Daten erforderliche Codierung (z.B. lt. MIME) ist für eine spätere Protokollversion vorgesehen.
In Abbildung 4-6 ist ein Beispiel für eine Kommunikation mit dem DIE-Protokoll aufgezeigt (die <CRLF>-Sequenzen wurden in der Darstellung nicht berücksichtigt). Die ersten beiden Zeilen beinhalten eine einmalige Abfrage des Objektes "/VARS/X" mit entsprechender Antwort. In Folge wird "/VARS/Y" vom User zyklisch angefordert und vom Provider alle 5 Sekunden gesendet. Eine ereignisgesteuerte Abfrage würde analog funktionieren. Klarerweise können verschiedene Abfragen zu beliebigen Zeitpunkten gestartet und gestoppt werden, die Antworten des Providers wären dann entsprechend "verzahnt".
 

Request von User  Reply von Provider  Bemerkung 
GET/VARS/X einmalige Anforderung von /VARS/X 
200 /VARS/X=155 
GET/VARS/Y?CYCL=5000 zyklische Anforderung von /VARS/Y starten
210 /VARS/Y=812 Antwort sofort
211 /VARS/Y=812 Antwort nach 5 Sekunden 
211 /VARS/Y=748 ... nach weiteren 5 Sekunden
211 /VARS/Y=624 ... nach weiteren 5 Sekunden
...
GET /VARS/Y?CYCL=-1 zyklische Anforderung beenden
212 /VARS/Y=512 Bestätigung sofort
...

Tabelle 4-5: DIEP Beispiel

Zurück zum Inhaltsverzeichnis


5 IIPLS als DIE-Prototyp

5.1 Einleitung

Das Prototypsystem "IIPLS" (Prozeßleitsystem auf Basis der Internet/Intranet-Technologie) wurde entwickelt, um eine erste praktische Anwendung der Architektur DIE zu schaffen und das Protokoll DIEP zu testen (siehe auch [HG97]). Aufgabe des Prototyps ist es, ein verteiltes Prozeßvisualisierungssystem zu schaffen, welches als Front-End einen Webbrowser verwendet, in welchem die Prozeßdaten mit Hilfe von Java-Applets dargestellt werden können. Die serverseitig eingesetzte Hardware besteht aus einem "Open-Controller", einem Rechnersystem, welches eine SPS und einen PC vereint. Der OC realisiert u.a. die Schnittstelle zwischen den unterschiedlichen Netzwerkarchitekturen Prozeßbus und LAN (siehe Abbildung 5-7).


Abbildung 5-7: Aufbau von IIPLS

Im Zuge dieser Entwicklung sind drei Komponenten entstanden, die in den folgenden Abschnitten kurz beschrieben werden. Die in diesem Prototyp verwendete Datenübertragung auf der TCP/IP-Transportschicht basiert auf dem Protokoll UDP.

5.2 IIPLS-Variablenserver

Bei der Entwicklung des Prototyps des Variablenservers wurde im ersten Schritt auf eine Anbindung an ein externes System verzichtet, die zur Verfügung gestellten Prozeßvariablen entsprechen zwar von der Struktur her der Realität, werden aber im vorliegenden System lediglich emuliert.
Die Datenstruktur ist folgendermaßen spezifiziert:
/Stationsnummer/Variablentyp/Variablenoffset
Die Stationsnummer gibt die eindeutige Adresse einer SPS am Prozeßbus an, sie liegt im Bereich von 1 bis 254. Der Variablentyp definiert entweder Analogvariable (X,Y,V,P) oder Binärvariable (E,A,I,C), der Variablenoffset bestimmt die Adresse des Wertes und liegt im Bereich von 0 bis 9999. Gültige Objektadressen (Objectpath + Object-ID) sind also beispielsweise:

/1/E/1
/1/P/88
/3/X/123
...
Zur Emulierung von dynamischen Daten werden vom Variablenserver alle P-Werte automatisch inkrementiert.
Der Server ist als Multithreadingprogramm implementiert, wobei der Thread "Listen" für den Empfang und Abarbeitung von Requests zuständig ist. Der Thread "Timer" wird zyklisch gestartet und arbeitet die CYCLE- und EVENT-Anfragen ab. Der zusätzlich vorhandene Thread "Input" erlaubt für Testzwecke manuelle Eingaben von Daten in das Prozeßabbild. Der Server benutzt die in DIEP definierten Default-Listeningports von 2050 für den Provider und 2051 für den User.


Abbildung 5-8: IIPLS-Variablenserver als DIE-Provider

Abbildung 5-8 zeigt die Oberfläche des IIPLS-Variablenservers, auf welcher empfangene Requests und gesendete Replys zu Debugzwecken angezeigt werden.

5.3 DIE-Tester

Das Programm DIE-Tester wurde entwickelt, um ein flexibles Testwerkzeug für verschiedene Arten der Kommunikation mit dem Protokoll DIEP zur Verfügung zu stellen. Prinzipiell ist der DIE-Tester als User (Variante 4) ausgelegt. Er kann aber auch manuell als Provider (Variante 3) oder Object-Manager (Variante 6) betrieben werden.
Abbildung 5-9 zeigt die Benutzeroberfläche des Programmes, welche in zwei Hauptsegmente geteilt ist. Die Funktionen werden mit den üblichen Tastaturkürzeln oder mit der Maus aufgerufen. Im oberen Bereich wird der Talker-Teil manuell gesteuert bzw. werden die vom Listener empfangenen Telegramme angezeigt, wobei die Anzeige wahlweise entweder nur den Datenteil oder das gesamte Telegramm umfaßt. Darunter befinden sich Eingabefelder für die IP-Adresse des Providers und für die Listening-Ports von Provider und User. Die entsprechenden Adressen können zur Laufzeit mit neuen Werten initialisiert werden.
Der untere Bereich ermöglicht das automatisierte Lesen und Schreiben von Objekten des IIPLS-Variablenservers. Im linken Teil kann der Wert der analogen Prozeßvariablen "/1/X/1" in einem Bereich von 0 bis 65535 geändert werden, jegliche Änderung wird sofort per PUT-Request an den Variablenserver gesendet. Das gleiche gilt für die binäre Variable "/1/E/1", die per Checkbox umgeschaltet werden kann. Im rechten unteren Teil der Programmoberfläche werden diese beiden Prozeßvariablen sowie der Analogwert "1/P/1" grafisch dargestellt und vom Listenerteil des Programmes beim Empfangen der entsprechenden Daten aktualisiert.
Durch Absetzen der gewünschten ONCE-, CYCL- oder EVENT-Abfragen im Talker-Teil können somit alle Funktionen eines DIE-Providers getestet werden.


Abbildung 5-9: DIE-Tester

5.4 IIPLS-Variablenbrowser

Ziel des Prototyps des Variablenbrowsers war es, eine Möglichkeit zu schaffen, die vom Variablenserver zur Verfügung gestellten Daten plattformunabhängig darzustellen. Der Browser wurde daher als JAVA-Applet konzipiert, welches einem DIE-User der Variante 5 entspricht. Die Rolle eines Object-Managers kann in diesem Fall vom DIE-Tester übernommen werden. Im folgenden Listing sind die wichtigsten Teile des Sourcecodes des JAVA-Applets dargestellt (siehe auch [CW96]).
Die Hauptaufgabe des Applets wird von der Funktion "run()" erledigt, welche für das Empfangen und die Weiterverarbeitung der DIE-Telegramme sorgt. Diese Funktion wird als eigener Thread definiert und mit "start()" und "stop()" verwaltet. Die Funktion "paint()" ist für die Darstellung der Daten auf der Benutzeroberfläche (in diesem Falle innerhalb des Web-Browsers) verantwortlich und wird vom Thread nach jedem empfangenen Telegramm neu aufgerufen ("repaint()"). Die Darstellung (im vorliegenden Beispiel rein textuell) kann natürlich mit beliebigen grafischen Elementen realisiert werden.

// DIE-User als JAVA-Applet
// Import-Vereinbarungen
import java.lang.*;
import java.awt.*;
import java.applet.*;
import java.net.*;
import java.io.*;
import java.util.*;

public class udp extends Applet implements Runnable {

  String message;
  String message2;
  byte[] buf = new byte[256];
  DatagramPacket packet;
  DatagramSocket socket = null;
  Thread udp_th;
  InetAddress address;
  int port;

// Initialisierung der Variablen
  public void init() {
    ...
    packet = new DatagramPacket(buf, 256);
    System.out.println("START ...");
    try {
       socket = new DatagramSocket(2051);
       System.out.println("DIE-User listening on port: " + socket.getLocalPort());
    } catch (java.net.SocketException e) {
          System.err.println("Could not create datagram socket.");
      }
    if (socket == null)
        return;
  }

// Darstellen der Daten ...
  public void paint(Graphics g) {  ... }

// Empfangen und Parsen von DIE-Telegrammen
// ... diese Routine wird als eigener Thread gestartet
  public void run() {
     while (true) {
        try {
           socket.receive(packet);
           address = packet.getAddress();
           port = packet.getPort();
           System.out.println("Datagram received from: Address: " + address + " Port: " + port);
           String received = new String(packet.getData(), 0);
           System.out.println("Client received packet: " + received);
... Daten verarbeiten ...
           repaint();
         } catch (IOException e) {
              System.err.println("IOException:  " + e);
           }
     }
  }

// Bei Start des Applets Thread kreieren und starten
   public void start() {
     if (udp_th == null) {
        udp_th = new Thread(this);
     }
     udp_th.start();
   }

// vor Applet-Ende auch Thread beenden
  public void stop() {
     if (udp_th != null) {
       udp_th.stop();
       udp_th = null;
     }
  }

// Bei Applet-Ende Socket schließen
   public void destroy() {
        if (socket != null) {
            socket.close();
            socket = null;
            System.out.println("Closing datagram socket.");
        }
    }
}
Listing 5-1: DIE-User als Java-Applet

Das Applet wird mit folgendem HTML-Code in eine HTML-Seite eingebettet und erzeugt, z.B. unter Netscape, eine Ausgabe, wie sie in Abbildung 5-10 dargestellt ist.

<HTML>
  <BODY>
    <STRONG>D.I.E. - User Agent als JAVA-Applet</STRONG><HR>
    <applet code="udp.class" width=500 height=60></applet>
  </BODY>
</HTML>
 


Abbildung 5-10: IIPLS-Variablenbrowser als DIE-User

Zurück zum Inhaltsverzeichnis


6 Zusammenfassung

In diesem     Kapitel wurde das vom Autor der vorliegenden Arbeit entwickelte Konzept des Distributed Information Exchange vorgestellt. Dieses Konzept erweitert die vorhandenen Internet-Technologien derartig, daß auch industrielle Kommunikationssysteme sinnvoll in Intranets integriert werden können. Der Schwerpunkt von DIE liegt in der Übertragung von Informationen, die an verteilten Quellen entstehen, an verteilte Empfänger, bei Bedarf an mehrere gleichzeitig. Dazu kommt die Flexibilität und Performance, die erreicht werden kann, wenn Daten nicht wie bisher durch Polling, sondern aufgrund von definierbaren Ereignisen übermittelt werden.
DIE "demokratisiert" die einzelnen Komponenten eines industriellen Kommunikations-systems, indem es den Aufbau einer Multi-Client/Multi-Server Architektur ermöglicht, ohne aber gleichzeitig den Einsatz des klassischen Client/Server Modells zu verhindern.
Durch die Realisierung und den Test des Prototypsystems wurde erkannt, daß die Idee des Konzeptes korrekt ist und sich weitere Entwicklungen in dieser Richtung lohnen würden.
Bei einem Vergleich mit anderen Architekturen, wie z.B. CORBA, wird klar, daß DIE um vieles einfacher aufgebaut und nicht so "elegant" ist, was aber bedeutet, daß DIE-Applikationen auch einfacher und "schlanker" zu implementieren sind. DIE ist daher besonders zur Integration der Vielzahl an unterschiedlichen Komponenten im Bereich der industriellen Kommunikation in ein Intranet geeignet.

Zurück zum Inhaltsverzeichnis


7 Literatur

[CB96]: C. Baumann: "Intranets - Unternehmensinterne Informations- und Kommunikationssysteme", Proceedings of the 7th International DAAAM Symposium, Wien, Oktober 1996.

[CB97]: C. Baumann: "Distributed Information Exchange in Production Environments", Proceedings of the 8th International DAAAM Symposium, Dubrovnik, Oktober 1997.

[CW96]: M. Campione, K. Walrath: The Java Tutorial - Object Oriented Programming for the Internet., 7/96, ftp://ftp.javasoft.com/docs/tutorial.zip

[HG97]: H. Grömer: IIPLS-Ein Prozeßleitsystem auf Basis der Internet-/Intranet Technologie, 4/97, Wien


Copyright 1997, Dipl.-Ing. Christian Baumann - EMail: cbaumann@baumann.at - WWW: http://www.baumann.at/