25.04.2014 Aufrufe

Entwicklung einer dezentralen, webbasierten ... - Lab4Inf

Entwicklung einer dezentralen, webbasierten ... - Lab4Inf

Entwicklung einer dezentralen, webbasierten ... - Lab4Inf

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Fachbereich Elektrotechnik und Informatik<br />

<strong>Entwicklung</strong> <strong>einer</strong> <strong>dezentralen</strong>, <strong>webbasierten</strong><br />

Prozessvisualisierung<br />

Bachelorarbeit von<br />

Simon Topmann<br />

Betreuer:<br />

Prof. Dr. rer. nat. Nikolaus Wulff<br />

Dipl. Ing. (FH) Tobias Polonyi


1 EINFÜHRUNG...............................................................................................1<br />

1.1 AUFGABENSTELLUNG.................................................................................1<br />

1.2 AUFBAU DER ARBEIT..................................................................................1<br />

1.3 UMFELD ....................................................................................................2<br />

2 ANALYSE DER IST-SITUATION..................................................................3<br />

2.1 ARCHITEKTUR DES GEGENWÄRTIGEN LEITSYSTEMS.....................................3<br />

2.1.1 Bildserver, Bildclient und Serviceseiten ...........................................7<br />

2.1.2 Schnittstelle zwischen Maschinensteuerung und Bildserver ...........8<br />

2.1.3 Schnittstelle zwischen Leitrechner und Bedienterminal.................10<br />

2.2 BEWERTUNG DES AKTUELLEN SYSTEMS....................................................10<br />

3 KONZEPTION EINER NEUEN PROZESSVISUALISIERUNG ..................11<br />

3.1 ORGANISATION DER BEDIENBILDER ..........................................................12<br />

3.1.1 Kern der Visualisierungssoftware...................................................14<br />

3.1.2 Definition eines Bedienbildes .........................................................14<br />

3.1.3 Aufbau der Bedienelemente...........................................................16<br />

3.2 FUNKTION DER VISUALISIERUNG...............................................................18<br />

3.2.1 Initialisierung der Visualisierung.....................................................18<br />

3.2.2 Erzeugung der Bedienseite aus der XML-Definition......................18<br />

3.3 SCHNITTSTELLE VON DER STEUERUNG ZUR WEBOBERFLÄCHE ...................21<br />

3.4 KOMMUNIKATIONSSYSTEME......................................................................23<br />

3.4.1 CAN und andere Feldbussysteme .................................................23<br />

3.4.2 TCP basierte Protokolle .................................................................24<br />

3.4.3 UDP basierte Protokolle.................................................................25<br />

3.4.4 UDP Mulitcast als Kommunikationsprotokoll .................................25<br />

3.5 ÜBERTRAGUNGSPROTOKOLL....................................................................27<br />

3.5.1 Funktion..........................................................................................27<br />

3.5.2 Paketformate ..................................................................................29<br />

3.5.3 Implementierung des Protokolls im Java-Applet............................31<br />

3.5.4 Kommunikationsprotokoll in der Steuerung ...................................33<br />

3.6 DATENSPEICHERUNG ...............................................................................36<br />

4 IMPLEMENTIERUNG AM BEISPIEL EINES TESTSTANDES..................38<br />

4.1 FUNKTION DES TESTSTANDS ....................................................................40<br />

I


4.2 BEDIENOBERFLÄCHE................................................................................41<br />

4.3 STEUERUNGSSOFTWARE..........................................................................44<br />

4.3.1 Task MessTask ..............................................................................45<br />

4.3.2 Task AchsTask...............................................................................46<br />

4.3.3 Task ParamTask ............................................................................47<br />

4.3.4 Task UdpTask ................................................................................48<br />

4.3.5 Bibliothek UdpLib ...........................................................................48<br />

4.3.6 Implementierung der Kommunikation ............................................50<br />

4.3.7 Visualisierungsrechner...................................................................53<br />

5 AUSBLICK ..................................................................................................50<br />

6 ABBILDUNGSVERZEICHNIS ....................................................................55<br />

7 TABELLENVERZEICHNIS .........................................................................56<br />

8 QUELLENVERZEICHNIS ...........................................................................57<br />

II


Sperrvermerk<br />

Die vorliegende Bachelorarbeit „<strong>Entwicklung</strong> <strong>einer</strong> <strong>dezentralen</strong>, <strong>webbasierten</strong><br />

Prozessvisualisierung“ beinhaltet interne und vertrauliche Informationen der<br />

Firma.<br />

Die Weitergabe des Inhalts der Arbeit und eventuell beiliegender Zeichnungen<br />

und Daten, im Gesamten oder in Teilen, ist grundsätzlich untersagt.<br />

Es dürfen k<strong>einer</strong>lei Kopien oder Abschriften auch nicht in digitaler<br />

Form gefertigt werden.<br />

Ausnahmen bedürfen der schriftlichen Genehmigung der Firma:<br />

WINDMÖLLER & HÖLSCHER KG<br />

Münsterstr. 50, D-49525 Lengerich<br />

Lengerich, den 23.08.2010 ___________________________<br />

Simon Topmann<br />

III


Erklärung<br />

Ich versichere hiermit, dass ich die vorliegende Bachelorarbeit selbstständig<br />

verfasst und keine anderen als die angegebenen Quellen und Hilfsmittel benutzt<br />

habe.<br />

Lengerich, den 23.08.2010 ___________________________<br />

Simon Topmann<br />

IV


1 Einführung<br />

Diese Arbeit beschäftigt sich mit der Konzeption <strong>einer</strong> graphischen Benutzeroberfläche<br />

für Maschinen mit verteilten und vernetzten Steuerungssystemen auf<br />

Basis von Webtechnologien.<br />

1.1 Aufgabenstellung<br />

Da der Industrieelektronikhersteller Bernecker & Rainer, im folgenden B&R genannt,<br />

für seine Steuerungen einen Webserver zur Verfügung stellt, ist seitens<br />

der Firma Windmöller & Hölscher der Wunsch entstanden, ein Konzept für eine<br />

Visualisierung zu entwickeln, die ganz oder teilweise auf Webtechnologien basiert.<br />

1.2 Aufbau der Arbeit<br />

Zunächst wird allgemein die Architektur <strong>einer</strong> komplexen, vernetzten Maschinensteuerung<br />

dargestellt. Anschließend folgt eine Beschreibung des aktuell bei<br />

der Fa. Windmöller & Hölscher eingesetzten Visualisierungssystems und eine<br />

Zusammenfassung der Probleme des Systems. In den darauf folgenden Kapiteln<br />

wird ein Konzept für eine, auf Webtechnologien basierende, Maschinenvisualisierung<br />

ausgearbeitet. Im Anschluss wird ein Kommunikationsprotokoll zwischen<br />

der Maschinensteuerung und der Webanwendung entwickelt. Der letzte<br />

Abschnitt der Arbeit beschreibt eine beispielhafte Implementierung der zuvor<br />

entwickelten Konzepte anhand eines Teststandes. Abschließend folgt ein Ausblick<br />

auf weitere Verbesserungs- und <strong>Entwicklung</strong>smöglichkeiten.<br />

Webbrowser im Visualisierungsterminal<br />

Kommunikationsplugin<br />

Prozessdaten<br />

über UDP<br />

Kommunikationsbibliothek<br />

Bedienbilder<br />

über HTTP<br />

Webserver (B&R)<br />

Steuerungssoftware<br />

Abb. 1: Struktur der Prozessvisualisierung<br />

1


1.3 Umfeld<br />

Diese Arbeit wurde bei der Firma Windmöller & Hölscher in Lengerich, Westf.<br />

angefertigt. Das Maschinenbauunternehmen fertigt und vertreibt Druckmaschinen,<br />

Verpackungsmaschinen sowie Anlagen zur Kunststofffolienherstellung.<br />

Eine moderne Druckmaschine ist eine komplexe technische Anlage, an der<br />

es eine Vielzahl von Teilprozessen zu automatisieren gilt:<br />

• Abwicklung <strong>einer</strong> Materialbahn<br />

• Bedrucken der Bahn<br />

• Trocknung<br />

• Aufwicklung<br />

• …<br />

Um diese Aufgaben zu erfüllen, wird eine Vielzahl von Steuerungsgeräten<br />

eingesetzt. Damit der Maschinenbediener eine einheitliche Benutzerschnittstelle<br />

zur Kontrolle des Prozesses zur Verfügung hat, wird eine computerbasierte Visualisierung<br />

eingesetzt.<br />

Abb. 2: Abbildung <strong>einer</strong> Flexodruckmaschine<br />

2


2 Analyse der Ist-Situation<br />

2.1 Architektur des gegenwärtigen Leitsystems<br />

Moderne Produktionsanlagen erfordern zur Beherrschung ihrer immer komplexer<br />

werdenden Vorgänge ein entsprechend umfangreiches Steuerungssystem,<br />

das eine komplexe Mensch-Maschine-Schnittstelle (HMI – Human Machine Interface)<br />

zur Handhabung benötigt. Bei einfacheren Anlagen reichte noch eine<br />

Ansammlung aus Leuchtmeldern, Schaltern und Anzeigeinstrumenten aus. Moderne<br />

Anlagen hingegen können nicht mehr mit derartigen Mitteln beherrscht<br />

werden. Aus diesem Grund werden in der heutigen Zeit vermehrt Benutzerschnittstellen<br />

wie Touchscreens und andere computerbasierte Bedienterminals<br />

verwendet.<br />

Der Verbund aus der eigentlichen Maschinensteuerung, der Benutzerschnittstelle<br />

und der Anbindung an weitere unternehmensinterne Systeme wird<br />

auch als Leitsystem bezeichnet. Durch die steigende Komplexität werden diese<br />

Leitsysteme üblicherweise in fünf bzw. vier Prozessführungsebenen aufgeteilt<br />

[1].<br />

5 – Ebenen-Modell 4 – Ebenen-Modell<br />

Unternehmensführung<br />

Betriebsführung<br />

Anlagenführung<br />

Unternehmensführung<br />

Betriebsführung<br />

Prozessführung<br />

Maschinenführung<br />

Feldebene<br />

Feldebene<br />

Abb. 3: Ebenenmodelle der Prozessführung<br />

In der Praxis ist zwischen der Anlagenführungsebene und der Maschinenführungsebene<br />

oft keine klare Trennung möglich, wodurch das 5-Ebenen-<br />

Modell auf ein 4-Ebenen-Modell reduziert werden kann [1]. Bei diesem werden<br />

die Anlagenführungsebene und die Maschinenführungsebene zu <strong>einer</strong> neuen<br />

Ebene, der Prozessführungsebene, zusammengefasst. Ein Bedienterminal<br />

3


kann beispielsweise direkt mit Sensoren und Aktoren in der Feldebene kommunizieren.<br />

Damit dient das Terminal zum einen der Visualisierung, zum anderen<br />

erfüllt es auch steuerungstechnische Aufgaben, womit es sowohl der Anlagenführungsebene<br />

als auch der Maschinenführungsebene zugeordnet werden<br />

kann.<br />

Die Unternehmensführungsebene beinhaltet die langfristige Produktionsplanung,<br />

die Auftragsakquise und die Verwaltung des Unternehmens. In der<br />

Betriebsführungsebene wird die detailliertere Betriebsplanung durchgeführt, wie<br />

z.B. die Kapazitätsplanung der Produktionsanlagen, die Qualitätssicherung sowie<br />

die Terminüberwachung und Planung. Die bisher beschriebenen Ebenen<br />

umfassen hauptsächlich betriebswirtschaftliche und verwalterische Aufgabenstellungen.<br />

Die Ebenen, die sich darunter befinden, sind den technischen Bereichen<br />

zuzuordnen.<br />

Die Anlagenführungsebene umfasst die Betrachtung der technischen Anlage<br />

als Ganzes. Als Kernaufgaben gelten hier die Prozessüberwachung, Fehlerdiagnose,<br />

Störungsbeseitigung und Prozessoptimierung. Für die Kontrolle des<br />

technischen Prozesses ist die Maschinenführungsebene verantwortlich. Sie<br />

beinhaltet Aufgaben wie Messen, Steuern, Überwachen und Regeln. Auch in<br />

dieser Ebene finden sich Elemente der Benutzerschnittstelle wieder, die für den<br />

regulären Betrieb seltener benötigt werden und deshalb nicht in die eigentliche<br />

Bedienung integriert sind. Unterhalb der Maschinenführungsebene befindet sich<br />

die Feldebene. Sie beinhaltet die Sensoren, Aktoren etc.<br />

Die Anforderungen an die Steuerung von komplexen Prozessen erfordern<br />

dezentrale Systemarchitekturen, in denen eine Vielzahl von Steuerungskomponenten<br />

den Prozess gemeinsam kontrollieren. Diese Verteilung von „Steuerungskompetenzen“<br />

erfordert eine effiziente und zuverlässige Vernetzung der<br />

einzelnen Teilsysteme. Um den Anforderungen des zu steuernden Systems<br />

gerecht zu werden, müssen die Netzwerke strenge Anforderungen an die Sicherheit<br />

und den Determinismus der Datenübertragung erfüllen [2]. Dazu werden<br />

spezielle Bussysteme wie der CAN 1 -Bus oder Profibus 2 eingesetzt. Mit dem<br />

Ziel, die Kosten der Systeme zu reduzieren und um gut verfügbare und erprobte<br />

Komponenten verwenden zu können, kann in Zukunft vermehrt auf Bussysteme<br />

zurückgegriffen werden, die auf Standardsystemen wie Ethernet basieren.<br />

1<br />

2<br />

Controller Area Network, Feldbussystem aus der Automobilindustrie<br />

Profibus, Standardisierter Feldbus auf Basis von RS485 oder Lichtwellenleitern<br />

4


Dies gilt nicht nur für die Vernetzungskomponenten, sondern auch für die<br />

weitere Steuerungshardware. Zur Visualisierung der Prozessdaten werden sehr<br />

häufig Computer eingesetzt, die auf weit verbreiteter PC-Hardware basieren.<br />

Die Nutzung von Standardhardware setzt sich in der Vernetzung der Visualisierungskomponenten<br />

fort, da hier ebenfalls auf Techniken wie Ethernet zurückgegriffen<br />

wird. Diese <strong>Entwicklung</strong> lässt sich auch an dem Prozessleitsystem der<br />

Firma Windmöller & Hölscher erkennen.<br />

Auf unterster Ebene, der Feldebene, wird eine breite Auswahl an Komponenten<br />

von vielen verschiedenen Herstellern verwendet. Zur Vernetzung der<br />

speicherprogrammierbaren Steuerungen mit Feldgeräten wie Frequenzumrichter<br />

3 und diversen Sensoren wird neben der Stichverdrahtung für digitale und<br />

analoge Signale unter Anderem auch der Powerlink 4 -Bus verwendet. Die übergeordnete<br />

Kommunikation zwischen den Steuerungen läuft für zeitkritische Daten<br />

über einen CAN-Bus. Zur Übertragung von großen Datenmengen oder unkritischen<br />

Informationen wird ein gewöhnliches TCP/IP-Netzwerk verwendet.<br />

Durch diese Aufteilung ist die Vernetzung der Steuerungen doppelt ausgeführt.<br />

Neben den Steuerungen ist auch der Leitrechner in beide Netzwerke eingebunden.<br />

Die Bedienterminals, die an verschiedenen Stellen in der Anlage verbaut<br />

sind, werden ebenfalls über dasselbe TCP/IP-Netzwerk angebunden.<br />

Terminal 1 Terminal 2<br />

Leitrechner<br />

SPS 1 SPS 2 SPS 3<br />

TCP/IP<br />

CAN, TCP/IP<br />

CAN, Powerlink<br />

Frequenzumrichter<br />

…<br />

Abb. 4: Netzwerkarchitektur des aktuellen Leitsystems<br />

3<br />

4<br />

Steuergerät zum Lage- und Drehzahlgeregelten Betrieb von elektrische Antriebsmaschinen<br />

Ethernetbasierter, echtzeitfähiger Feldbus<br />

5


Die <strong>Entwicklung</strong> der Prozessvisualisierung bewegt sich nach Langmann [3] immer<br />

mehr in die Richtung von <strong>webbasierten</strong> Technologien. Das bietet große<br />

Vorteile, da vorhandene und erprobte Programme und Techniken eingesetzt<br />

werden können. Die Darstellung der Prozessvisualisierung als Webseite bietet<br />

die Möglichkeit als Anzeigegerät einen einfachen, handelsüblichen PC mit einem<br />

Internet-Browser zu verwenden. Ein weiterer Vorteil der Webtechnologien<br />

ist die Nutzbarkeit der Visualisierung in großer Entfernung zur Anlage, z.B. über<br />

das Internet, wodurch unter anderem die Fernwartbarkeit wesentlich verbessert<br />

wird [3].<br />

Nachteilig an der Verwendung von Webtechnologien ist, dass es auf dem<br />

Gebiet der Prozessvisualisierung noch keine Standardlösungen gibt. So stellt<br />

jede Visualisierung auf dieser Basis eine, auf die jeweilige Anwendung optimierte,<br />

Sonderlösung dar. Des Weiteren bereitet auch die durchgängig gleiche Darstellung<br />

der Bedienbilder in verschiedenen Webbrowsern Probleme. Webbrowser<br />

sind auf die Anzeige von Webseiten zugeschnitten, die sich grundlegend<br />

vom Aufbau <strong>einer</strong> Prozessvisualisierung unterscheiden.<br />

6


2.1.1 Bildserver, Bildclient und Serviceseiten<br />

Die eigentliche Visualisierungssoftware der Firma Windmöller und Hölscher ist<br />

in einen Bildserver und einen Bildclient gegliedert. Der Bildserver läuft auf dem<br />

Maschinenleitrechner und stellt für die einzelnen Visualisierungsterminals über<br />

TCP/IP Daten zur Verfügung. Zusätzlich zum Bildserver befinden sich auf dem<br />

Leitrechner eine Reihe weiterer Programme, die ergänzende Aufgaben der Maschinensteuerung,<br />

wie die Erzeugung von Alarmmeldungen und die Verwaltung<br />

des Druckzylinderlagers übernehmen.<br />

Der Bildclient läuft auf den einzelnen Visualisierungsterminals und stellt die<br />

Daten, die er vom Bildserver erhält, graphisch am Bildschirm dar. Zudem leitet<br />

er Benutzereingaben über das Netzwerk zurück an den Bildserver, der dann für<br />

die weitere Verarbeitung im System sorgt.<br />

Da in den einzelnen Steuerungen eine Vielzahl von Einstellungen und Parametern<br />

vorhanden sind, wird neben der eigentlichen Prozessvisualisierung<br />

noch eine Reihe von Visual Basic Programmen genutzt. Die sogenannten Serviceapplikationen<br />

5 stellen zusätzliche Bedienbilder zur Parametrierung bereit.<br />

Diese Programme sind mit den Steuerungen ausschließlich über PVI verbunden.<br />

Sie werden, im Gegensatz zur Visualisierung, zusammen mit der Steuerungssoftware<br />

gepflegt, da eine starke Abhängigkeit zwischen den Serviceapplikationen<br />

und der Steuerungssoftware besteht.<br />

PVI steht für „Process Variable Inspection“ und ist ein, vom Steuerungshersteller<br />

B&R bereitgestelltes Protokoll, welches anderen Programmen über das<br />

UDP-Protokoll den Zugriff auf steuerungsinterne Variablen und Speicherbereiche<br />

erlaubt. Durch diesen Mechanismus greifen die Serviceapplikationen auf<br />

einen Speicherbereich in den jeweiligen Steuerungen zu, in dem die einzelnen<br />

Parameter abgelegt sind. Da PVI nur den Speicherzugriff ermöglicht, werden für<br />

die weitere Ablaufsteuerung, z.B. schreiben der Parameter in den Flash-<br />

Speicher der Steuerung, zusätzliche übergelagerte Protokolle benötigt. Diese<br />

bestehen meist aus dem Setzen <strong>einer</strong> Variable in der Steuerung durch die Serviceapplikation<br />

und dem zurücksetzen aus der Steuerungssoftware heraus. Bei<br />

der Verwendung der PVI-Funktionalität entsteht auf der Steuerung keine zu-<br />

5<br />

Bezeichnung bei Windmöller & Hölscher<br />

7


sätzliche Komplexität in der Software, da dieser Dienst vom Betriebssystem der<br />

Steuerung zur Verfügung gestellt wird.<br />

Die Serviceapplikationen sind nicht in die eigentliche Prozessvisualisierung<br />

eingegliedert, da sie sich deutlich häufiger ändern als die Visualisierung selbst<br />

und so der Pflegeaufwand für die Visualisierung unverhältnismäßig steigen<br />

würde. Durch diese Trennung kann die Serviceapplikation relativ leicht mit der<br />

Steuerungssoftware ausgeliefert werden und es wird kein Update der gesamten<br />

Visualisierung am Maschinenstandort notwendig.<br />

2.1.2 Schnittstelle zwischen Maschinensteuerung und Bildserver<br />

Die Steuerungen kommunizieren mit dem Bildserver über den CAN-Bus und<br />

über PVI. Wie zuvor erwähnt wird der CAN-Bus für zeitkritische Daten genutzt.<br />

Bei der Kommunikation über den CAN-Bus wird ein CAN Application Layer Protocol<br />

genutzt, welches auf dem CAN-Protokoll nach ISO99-1, ISO99-2 und<br />

ISO99-3 basiert. In diesem Protokoll werden Kommunikationsobjekte 6 definiert,<br />

die zwischen den Steuerungen ausgetauscht werden. Das Senden und die<br />

Verarbeitung der Daten erfolgt dabei ereignisgesteuert. Jedes Objekt wird von<br />

genau <strong>einer</strong> Steuerung gesendet und von beliebig vielen empfangen. Innerhalb<br />

der Steuerungssoftware wird dieses Arbeitsprinzip über Ereignisvariablen 7 abgebildet.<br />

Diese Variablen werden abhängig vom Objekttyp von der Applikationssoftware<br />

auf einen Wert gesetzt, der z.B. das Senden auf dem CAN-Bus auslöst.<br />

Wurde eine CAN-Nachricht empfangen, wird diese Eventvariable vom<br />

CAN-Treiber der Steuerung auf einen festgelegten Wert gesetzt, um die Applikationssoftware<br />

über eine Aktualisierung dieser Prozessvariable in Kenntnis zu<br />

setzen.<br />

6<br />

7<br />

In der Spezifikation als Communication Object, auch COB, bezeichnet.<br />

Variable, die beim Eintreten eines Ereignisses auf einen bestimmten Wert gesetzt wird um<br />

die Applikationssoftware über das Eintreten des Ereignisses zu informieren.<br />

8


Steuerung 1 Steuerung 2<br />

Applikation<br />

CAN<br />

CAN<br />

Applikation<br />

zyklisch<br />

Eventflag setzen<br />

zyklisch<br />

Eventflag<br />

rücksetzen<br />

Daten senden<br />

Eventflag setzen<br />

zyklisch<br />

Daten lesen<br />

Eventflag<br />

rücksetzen<br />

Abb. 5: Kommunikationsmodell im CAN-Bus<br />

In der darüber liegenden Abstraktionsschicht werden die einzelnen, über<br />

den Bus synchronisierten, rechnerlokalen Variablen als globale Prozessvariablen<br />

betrachtet, die auf allen Steuerungen/Rechnern zu jedem Zeitpunkt, unter<br />

Berücksichtigung der Totzeiten durch die Übertragung, denselben Inhalt haben.<br />

Über diese gemeinsamen Prozessvariablen werden Sollwerte, Zustände etc.<br />

zwischen den Steuerungen und zur Visualisierung kommuniziert. Es entsteht<br />

eine Art gemeinsamer „Speicher“ aller angeschlossenen Komponenten.<br />

Beispiel:<br />

Gibt der Maschinenführer an einem Visualisierungsterminal eine neue Sollgeschwindigkeit<br />

für die Anlage ein, so wird diese Eingabe vom Bildclient an den<br />

Bildserver gesendet. Dieser verteilt sie dann weiter über das CAN-Bussystem.<br />

Die entsprechenden Steuerungen erhalten den neuen Sollwert über ihre CAN-<br />

Schnittstelle und die Applikationssoftware wird über ein gesetztes Eventflag<br />

über die Änderung informiert. Durch die Änderung des Eventflags wird dann in<br />

der Applikation der Sollwert überprüft und die Anlage entsprechend dem Sollwert<br />

beschleunigt oder verzögert.<br />

9


2.1.3 Schnittstelle zwischen Leitrechner und Bedienterminal<br />

Auf dem eigentlichen Anzeigegerät, dem Bedienterminal, läuft eine spezielle<br />

Software zur Anzeige der Bedienbilder. Diese stellt die Bedienseiten am Bildschirm<br />

dar und erlaubt dem Bediener die Interaktion mit der Maschine.<br />

Die eigentliche Definition der Bedienbilder befindet sich im Quellcode des<br />

Bildservers. Dieser enthält eine Klassenhierarchie, die die einzelnen Bedienbilder<br />

abbildet. Im Konstruktor der Klassen wird von Hand eine Liste mit Bedienelementen<br />

für das jeweilige Bedienbild erstellt. Bei der Anzeige eines Bildes an<br />

einem Bedienterminal wird diese Liste mittels <strong>einer</strong> TCP-Verbindung an das<br />

Terminal gesendet und angezeigt. Die Software des Bedienterminals sendet<br />

Benutzereingaben an den Bildserver zurück. Eingaben an den Bedienterminals<br />

werden zentral auf dem Leitrechner verarbeitet. Durch diese zentrale Datenverarbeitung<br />

ist der Zustand der Bedienbilder an allen Bedienterminals konsistent<br />

und die parallele Nutzung mehrerer Bedienstellen bereitet keine Probleme, da<br />

im Bildserver nur eine Instanz jeder Bedienbildklasse existiert.<br />

2.2 Bewertung des aktuellen Systems<br />

Die Visualisierung stellt ein nach außen geschlossenes System dar. Bei häufig<br />

vorkommenden Erweiterungen der Funktionalität ist daher jeweils eine neue<br />

Version notwendig. Dies führt zu <strong>einer</strong> unübersichtlichen Menge von Softwareversionen<br />

und Updates.<br />

Da das Visualisierungssystem auf der Basis der Microsoft Foundation<br />

Classes (MFC) entwickelt wurde, ist es auf Plattformen der Firma Microsoft<br />

ausgerichtet. Die Software ist mit der Zeit gewachsen und beinhaltet eine Vielzahl<br />

von kundenspezifischen Sonderlösungen, wodurch der Wartungsaufwand<br />

überproportional zunimmt.<br />

Weitere Nachteile sind der Einsatz von spezieller W&H Software, welche<br />

auf dem Visualisierungsterminal installiert werden muss, sowie die strukturelle<br />

und optische Trennung der Serviceseiten von der Visualisierung auf der Anzeigeebene.<br />

10


3 Konzeption <strong>einer</strong> neuen Prozessvisualisierung<br />

Nach den Ergebnissen der Betrachtung des aktuellen Visualisierungskonzeptes<br />

soll die neu zu konzipierende Visualisierung folgende Anforderungen<br />

erfüllen:<br />

• Bedienbilder und Serviceseiten in <strong>einer</strong> Oberfläche integriert<br />

• Definition der Serviceseiten auf der Steuerung abgelegt<br />

• Allgemeine Bedienbilder zentral auf dem Leitrechner abgelegt<br />

• Einsatz von Standardtechnologien<br />

• Verwendung bestehender Infrastruktur<br />

• Skalierbare Anzahl von Steuerungen und Visualisierungsterminals<br />

• Anzeige der Visualisierung ohne Zusatzsoftware auf verschiedenen<br />

Plattformen<br />

Die Bedienbilder der Visualisierung werden zur Laufzeit aus <strong>einer</strong> Beschreibung<br />

im XML-Format generiert. Da es sich bei der Visualisierung um eine interaktive<br />

Webanwendung handelt, ist eine Umsetzung durch statisches HTML nicht möglich.<br />

Einen Ausweg bieten hier browserseitig ausgeführte Skriptsprachen wie<br />

JavaScript. Die Nutzung derartiger Scriptsprachen erlaubt das Reagieren auf<br />

Benutzeraktionen und das dynamische Ändern der Seiteninhalte und damit eine<br />

effiziente Interaktion mit dem Benutzer.<br />

Da eine Visualisierung nicht nur auf Benutzereingaben, sondern auch auf Ereignisse<br />

der zu steuernden Anlage reagieren muss ist die alleinige Verwendung<br />

von JavaScript nicht ausreichend. Die Webanwendung muss in der Lage sein<br />

auf eingehende Informationen zu reagieren, damit der Benutzer in Echtzeit über<br />

den Maschinenzustand informiert werden kann. Dazu muss die Anwendung<br />

unangefordert eingehende Netzwerkpakete verarbeiten können. Diese Anforderung<br />

kann mit JavaScript nicht erfüllt werden, da es über keine Schnittstelle zur<br />

Netzwerkprogrammierung verfügt. Aus diesem Grund wird ein Java-Applet verwendet,<br />

das der Kommunikation zu den restlichen Komponenten des Steuerungssystems<br />

dient. Dieses Applet bildet somit die Schnittstelle zwischen der<br />

Webanwendung und dem Maschinenumfeld.<br />

11


Visualisierungsclient<br />

Steuerung<br />

Java-<br />

Script<br />

Kern<br />

Applet<br />

Webserver<br />

UDP-Bibliothek<br />

DOM-Baum<br />

Darstellung im Browser<br />

Applikation<br />

Abb. 6: Architektur der Visualisierung<br />

Die Gesamtarchitektur des neuen Visualisierungssystems ist in Abb. 6<br />

dargestellt. Die Komponenten, die im Rahmen dieser Arbeit erstellt wurden,<br />

sind in der Grafik gestrichelt eingezeichnet.<br />

3.1 Organisation der Bedienbilder<br />

Die Bedienoberfläche <strong>einer</strong> Maschinenvisualisierung setzt sich im Allgemeinen<br />

aus <strong>einer</strong> Reihe von Bedienbildern zusammen. Jedes dieser Bedienbilder erfüllt<br />

eine bestimmte Aufgabe und enthält die relevanten Bedienelemente wie Eingabefelder<br />

oder Anzeigeelemente. Im Groben lassen sich die Bedienbilder in zwei<br />

Gruppen kategorisieren. Zum einen die Bedienbilder, die die Bedienung der<br />

Anlage als Ganzes umfassen, zum anderen Bedienbilder, die nur <strong>einer</strong> Steuerung<br />

zugeordnet sind und deren Parametrierung und die Nutzung von Diagnosefunktionen<br />

erlauben.<br />

12


Abb. 7: Grundstruktur eines Bedienbildes<br />

Das Bedienbild selbst lässt sich in zwei Abschnitte gliedern (siehe Abb. 7)<br />

.Am oberen Bildschirmrand wird eine Kopfleiste mit Buttons für Bildwechsel angezeigt.<br />

Oft werden in der Leiste auch zusätzliche grundlegende Betriebsdaten<br />

der Anlage oder andere Meldungen angezeigt. Dieser Bereich des Bildschirms<br />

ist bei allen Bedienbildern identisch. Im Abschnitt darunter befindet sich der eigentliche<br />

Inhalt des Bedienbildes mit den Bedienelementen. Diese entsprechen<br />

im Wesentlichen den Widgets 8 , die von der Programmierung auf PC-Systemen<br />

bekannt sind. Dieser Bildbereich wird in Abhängigkeit zum angewählten Bedienbild<br />

aus <strong>einer</strong> Bildbeschreibung generiert.<br />

Da die Bedienung in der Regel über einen Touchscreen erfolgt, sind die<br />

Bedienelemente speziell dafür ausgelegt. Es ist z.B. bei Eingabefeldern nicht<br />

möglich und auch nicht notwendig, direkte Eingaben mit <strong>einer</strong> Tastatur durchzuführen.<br />

Wählt der Benutzer ein Eingabefeld durch Tippen an, dann öffnet sich<br />

eine Bildschirmtastatur für die Eingabe über den Touchscreen.<br />

Die einzelnen Bedienelemente eines Bildes werden zur Laufzeit an einem<br />

Raster mit variabler Größe ausgerichtet. Dadurch lässt sich die Visualisierung<br />

mit dem Webbrowser zusammen skalieren, ohne für die Berechnung der Anordnung<br />

der Bedienelemente weiteren Aufwand betreiben zu müssen. Jedes<br />

8<br />

Element <strong>einer</strong> grafischen Benutzeroberfläche eines Computerprogramms.<br />

13


Bedienelement kann horizontal und vertikal eine oder mehrere Zellen dieses<br />

Rasters einnehmen.<br />

3.1.1 Kern der Visualisierungssoftware<br />

Der Kern der Visualisierung umfasst die clientseitige Software, die im Webbrowser<br />

läuft. Da die Bedienbilder als Webseite implementiert sind, wird ein<br />

HTML-Grundgerüst verwendet. Dieses enthält die statische Implementierung<br />

des Bildkopfes, der auf allen Bedienseiten identisch ist. Für die eigentliche Bedienseite<br />

ist ein leeres HTML-Element vorgesehen, welches dynamisch zur<br />

Laufzeit mit den Inhalten des angewählten Bedienbildes gefüllt wird. Neben<br />

dem Bildkopf und dem Platzhalter für das Bedienbild enthält das HTML-<br />

Grundgerüst die JavaScript-Klassen der Bedienelemente, den JavaScript-Code<br />

zur Erzeugung der Bedienseite sowie das Applet zur Kommunikation mit den<br />

Steuerungen. Lediglich der bildspezifische JavaScript-Code wird aus der Bilddefinition<br />

nachgeladen.<br />

Der anzeigende Client lädt den Kern von einem Webserver auf dem Leitrechner,<br />

da er für alle Bedienbilder gleich ist. Während der Anzeige der Bedienbilder<br />

bleibt der Kern im Browser geladen. Durch die zentrale Speicherung des<br />

Kerns der Visualisierung ist sichergestellt, dass alle Clients dieselbe Version<br />

der Software verwenden. Beim Update der Software muss daher nur der Leitrechner<br />

aktualisiert werden 9 .<br />

Der Kern verwaltet zudem die globale Liste aller Bedienbilder. Auf dem<br />

Leitrechner liegt dafür eine Liste aller Steuerungen, die Bedienbilder zur Verfügung<br />

stellen. Jede Steuerung hält wiederum eine Liste mit den Bildern bereit.<br />

Diese Listen werden durch den Visualisierungskern im Webbrowser zu <strong>einer</strong><br />

globalen Bildliste zusammengeführt. Durch diesen Mechanismus ist gewährleistet,<br />

dass auch bei einem Update der Bedienbilder <strong>einer</strong> Steuerung die globalen<br />

Bildlisten immer auf dem aktuellen Stand gehalten werden, ohne etwas im Kern<br />

der Visualisierung ändern zu müssen.<br />

3.1.2 Definition eines Bedienbildes<br />

Die Bedienbilder werden durch eine Definitionsdatei im XML-Format beschrieben.<br />

Der Hauptinhalt der Bilddefinition ist die Auflistung aller Bedienele-<br />

9<br />

Zu Testzwecken kann auf dem Webserver der Steuerung ebenfalls ein Visualisierungskern<br />

hinterlegt werden.<br />

14


mente. Für jeden zur Verfügung stehenden Bedienelementtyp ist ein Tag im<br />

XML-Schema definiert. Jeder Bedienelementtag hat eine Reihe von Attributen.<br />

Allen Tags gemein sind die Attribute für die Position und die Größe des Bedienelements<br />

im Raster des Bedienbildes. Zusätzlich zu diesen Standardattributen<br />

enthält jeder Tag weitere, bedienelementspezifische Attribute, wie z.B. einen<br />

Beschriftungstext oder eine angeschlossene Prozessvariable.<br />

Bei einigen Bedienelementen können im Tag JavaScript-Abschnitte eingebettet<br />

werden. Dies erlaubt weitergehende Funktionen im Bedienbild wie z.B.<br />

visualisierungsseitige Verriegelungen von Eingabefeldern oder Ähnlichem. Neben<br />

den Skriptabschnitten in den Bedienelementtags können noch Variablen im<br />

Kontext des Bedienbildes sowie ein Initialisierungsskript und ein zyklisch aufgerufenes<br />

Skript eingefügt werden. Durch die Deklaration von Variablen sind<br />

komplexere Abläufe im Bedienbild implementierbar. Diese Variablen sind allerdings<br />

nur lokal auf dem Visualisierungsrechner vorhanden. Sie werden nicht<br />

zwischen den Bildinstanzen auf verschiedenen Visualisierungsterminals synchronisiert<br />

und erlauben daher keine Querkommunikation zwischen den Bedienbildern.<br />

Tagname<br />

panel<br />

label<br />

enumdisplay<br />

enuminput<br />

numdisplay<br />

Beschreibung<br />

Zeigt ein statisches, farbig abgesetztes Panel mit<br />

einem optionalen Text an<br />

Zeigt einen statischen Text mit transparentem Hintergrund<br />

an<br />

Zeit in einem Anzeigefeld einen Text aus einem<br />

Array von Texten an. Der ausgewählte Text bestimmt<br />

sich durch den Wert der angeschlossenen<br />

Prozessvariablen<br />

Zeigt ein enumdisplay als Eingabefeld an. Bei Aktivieren<br />

des Eingabefeldes wird ein Auswahldialog<br />

mit den entsprechenden Texten angezeigt.<br />

Zeigt einen numerischen Wert <strong>einer</strong> Prozessvariablen<br />

in einem Anzeigefeld an. Der Wert wird mit<br />

<strong>einer</strong> konfigurierbaren Anzahl an Nachkommastellen<br />

dargestellt.<br />

15


Tagname<br />

numinput<br />

toggle<br />

button<br />

funcdisplay<br />

init<br />

cyclic<br />

variable<br />

Beschreibung<br />

Zeigt ein numdisplay als Eingabefeld an. Bei Aktivieren<br />

des Eingabefeldes wird eine numerische<br />

Tastatur eingeblendet, die die Eingabe eines neuen<br />

Wertes für die entsprechende Prozessvariable<br />

erlaubt.<br />

Zeigt einen Button an, dessen Zustand durch eine<br />

Prozessvariable gesetzt wird. Ein Betätigen des<br />

Buttons setzt die Prozessvariable abhängig von<br />

ihrem aktuellen Wert auf einen von zwei Werten<br />

(on, off)<br />

Zeigt einen Button an. Bei Betätigung des Buttons<br />

wird das Skript im Tag aufgerufen,<br />

Zeigt ein Anzeigefeld an. Der Wert des Anzeigefeldes<br />

wird durch den Rückgabewert des Skriptes<br />

im Tag definiert.<br />

Deklariert das Initialisierungsskript. Es wird nach<br />

dem Laden des Bildes aufgerufen.<br />

Deklariert das zyklische Skript. Es wird bei jeder<br />

Aktualisierung des Bedienbildes aufgerufen.<br />

Der Tag deklariert eine Variable im Kontext des<br />

Bedienbildes und initialisiert sie auf den angegebenen<br />

Wert. In den anderen Skripten kann auf sie<br />

mit this.variablenname zugegriffen werden.<br />

Tabelle 1: Tags in der Bilddefinitionsdatei<br />

3.1.3 Aufbau der Bedienelemente<br />

Die Bedienelemente werden im JavaScript durch eine Klassenstruktur modelliert.<br />

Eigenschaften, die bei allen Bedienelementen gleich sind, werden so durch<br />

die Klassenhierarchie vererbt, die Komplexität der Implementierung wird dadurch<br />

reduziert. Wichtige Funktionen der Bedienelemente sind nur einmal für<br />

alle Bedienelemente in den höheren Hierarchieebenen implementiert.<br />

16


Jedes Bedienelementobjekt erzeugt einen Document Object Model 10 –<br />

Baum, der durch den Webbrowser dargestellt werden kann. Dieser DOM-Baum<br />

umfasst neben den Informationen zum Aussehen des Bedienelementes und<br />

dem angezeigten Inhalt (Prozessdaten, Texte, …) auch die Ereignisbehandlungsroutinen<br />

zur Erzeugung der Interaktivität. Diese sind ebenfalls im<br />

Bedienelementobjekt implementiert und somit zur jeweiligen Klasse von Bedienelementen<br />

zugehörig. Sie verändern das Aussehen des Bedienelementes<br />

beim Mausklick oder öffnen einen Eingabedialog.<br />

Derartige Eingabedialoge sind nicht als Popup über den Webbrowser implementiert,<br />

sondern als Dialog im Java-Applet, da im Applet eine bessere Kontrolle<br />

des Aussehens des Dialoges möglich ist. Popups des Browsers können<br />

aus Sicherheitsgründen nicht ohne Fensterrahmen und Adresszeile geöffnet<br />

werden. Die rahmenlose Anzeige der Eingabedialoge ist aber wünschenswert.<br />

Bei einem Dialog, der durch das Java-Applet erzeugt wird, ist eine Anzeige ohne<br />

Fensterrahmen aber problemlos möglich.<br />

Abb. 8: Klassenbaum der Bedienelemente<br />

10 Modell <strong>einer</strong> Webseite als Baumstruktur. Der DOM-Baum ermöglicht den Zugriff und die<br />

Veränderung der angezeigten Seite zur Laufzeit.<br />

17


3.2 Funktion der Visualisierung<br />

3.2.1 Initialisierung der Visualisierung<br />

Nachdem das Visualisierungsterminal und der Webbrowser gestartet sind, lädt<br />

der Kern der Visualisierung zunächst eine Liste aller angeschlossenen Steuerungen<br />

vom Maschinenserver. Anschließend werden von allen Steuerungen die<br />

Variablendefinitionen geladen und in das lokale Java-Applet der Visualisierung<br />

eingelesen. Mit diesem Schritt ist der Zugriff auf die Prozessvariablen möglich.<br />

Dann lädt der JavaScript-Code im Kern die Bilddefinition des ersten Bedienbildes<br />

von der entsprechenden Steuerung und zeigt sie als Startseite an.<br />

3.2.2 Erzeugung der Bedienseite aus der XML-Definition<br />

Eine Anordnung von Bedienelementen wird durch die Klasse Bild modelliert.<br />

Diese Klasse bietet Schnittstellen zum Einfügen von Bedienelementen und zum<br />

Erzeugen des DOM-Baumes aus der Anordnung von Bedienelementen. Zum<br />

eigentlichen Zugriff auf das DOM-Modell wird auf die standardisierten Schnittstellen<br />

der Webbrowser zurückgegriffen [6]. Innerhalb der Klasse Bild wird die<br />

Anordnung der Bedienelemente durch eine Liste von Bedienelementobjekten<br />

abgebildet. Die Liste wird einmal erzeugt und kann anschließend jederzeit zur<br />

Erstellung des DOM-Baumes wieder verwendet werden. Jedes Bedienelementobjekt<br />

erzeugt einen DOM-Teilbaum, der das Bedienelement beschreibt. Die<br />

Teilbäume werden durch die Klasse Bild zu einem DOM-Baum zusammengesetzt,<br />

der den kompletten bildspezifischen Inhalt der Bedienseite beschreibt.<br />

Der Webbrowser verwendet diesen Baum als Grundlage für die Darstellung der<br />

Bedienseite am Bildschirm.<br />

Die Klasse Bild wird ausschließlich zur Erzeugung der Kopfleiste des<br />

Bedienbildes verwendet, da alle Bedienelemente direkt im JavaScript-<br />

Quellcode eingefügt werden müssen. Um die Bedienseiten aus <strong>einer</strong> Definitionsdatei<br />

erzeugen zu können, wird eine Klasse XmlBild aus der Klasse Bild<br />

abgeleitet.<br />

18


Abb. 9: Klassenstruktur eines Bedienbildes<br />

Im Gegensatz zur Klasse Bild kann die Klasse XmlBild die Bedienelementliste<br />

aus <strong>einer</strong> Definitionsdatei im XML-Format erzeugen. Zur Konstruktionszeit<br />

des Objektes wird nur die URL der Datei übergeben. Geladen und Ausgewertet<br />

wird die Definition erst, wenn der DOM-Baum zur Anzeige benötigt<br />

wird. Durch die Anwendung des Lazy-Loading, des verzögerten Nachladens<br />

von Informationen, werden die Ladezeit der Visualisierung im Browser und die<br />

Last auf den Webservern der Steuerungen auf ein Minimum reduziert. Dies ist<br />

insbesondere bei Parameterbildern sinnvoll, da sie meist nicht benutzt werden<br />

und daher auch nicht vom Server übertragen werden müssen. Das Java-Applet<br />

führt die eigentliche Übertragung der Definitionsdatei vom Webserver der entsprechenden<br />

Steuerung durch. Die Übertragung von XML-Daten wäre auch mit<br />

Ajax möglich, da die Datei aber nicht vom Quellserver des Skriptes geladen<br />

wird, verhindert dies die Same Origin Policy des Webbrowsers [7]. Da das<br />

Applet dieser Einschränkung nicht unterliegt, wird es zur Übertragung genutzt.<br />

Zur Auswertung der Defintionsdatei wird aus der XML-Definition mittels<br />

der DOM-Funktionen des Webbrowsers ebenfalls ein DOM-Baum erzeugt. In<br />

19


diesem Baum entsprechen die einzelnen DOM-Knoten den Tags aus der XML-<br />

Datei. Das Objekt der Klasse XmlBild arbeitet diesen Baum knotenweise ab und<br />

fügt die entsprechenden Bedienelemente in das Bedienbild ein.<br />

Anschließend wird die Instanz der Klasse XmlBild um automatisch generierte<br />

Memberfunktionen erweitert. Der Funktionskörper wird dabei mittels der<br />

JavaScript-Funktion eval() aus den benutzerspezifischen Skripten der Definitionsdatei<br />

erzeugt. Diese Funktionen werden dann über die Bedienelementobjekte<br />

mit Hilfe von JavaScript-Closures [8] an die Ereignisbehandlungsroutinen des<br />

DOM-Modells der Bedienseite angeschlossen. Auf die gleiche Art und Weise<br />

können durch die Bilddefinition auch Membervariablen hinzugefügt und initialisiert<br />

werden.<br />

Nachdem das Bedienbild erzeugt wurde, liefert die Klasse XmlBild den<br />

DOM-Baum des Bedienbildes an den Kern der Visualisierung zurück. Dieser<br />

ersetzt den aktuellen, bildspezifischen Teil der Bedienseite durch das neue Bedienbild.<br />

Danach wird das Initialisierungsskript am Bildobjekt aufgerufen und<br />

der Timer für das zyklische Aktualisieren der Seite gestartet. Der Timer ruft die<br />

update()-Funktion des Bildobjektes auf, die wiederum jedes Bedienelement im<br />

Bild aktualisiert. Nach der Aktualisierung der Bedienelemente ruft sie, sofern<br />

vorhanden, das zyklische Skript des Bedienbildes auf.<br />

20


Bild XmlUiManager Label<br />

Button<br />

Bild-DIV<br />

Applet<br />

create()<br />

loadFile()<br />

XML-Definition<br />

Label()<br />

Button()<br />

create()<br />

DOM-Baum<br />

create()<br />

DOM-Baum<br />

DOM-Baum<br />

replaceChild(DOM-Baum)<br />

Abb. 10: Sequenzdiagramm zur Bilderzeugung<br />

3.3 Schnittstelle von der Steuerung zur Weboberfläche<br />

Die Weboberfläche muss zur Kommunikation mit der restlichen Steuerungshardware<br />

eine Implementierung des verwendeten Kommunikationsprotokolls<br />

enthalten. Dies ist mit den gängigen Scriptsprachen wie JavaScript nicht möglich,<br />

da sie aus Sicherheitsgründen keinen Zugriff auf die Kommunikationsschnittstellen<br />

des Rechners erlauben. Daher muss ein Programm in die Webseite<br />

eingebettet werden, mit dem der Zugriff auf die Schnittstellen des Rechners<br />

möglich ist. Diese Möglichkeit bieten z.B. ActiveX-Steuerelemente (C/C++)<br />

und Java-Applets.<br />

21


Der bedeutendste Nachteil von ActiveX-Steuerelementen besteht darin,<br />

dass es sich um eine proprietäre Technologie der Firma Microsoft handelt, die<br />

nur in Windows-Umgebungen unterstützt wird. Dadurch ist es nicht möglich, die<br />

Visualisierung mit anderen Webbrowsern oder unter anderen Betriebssystemen<br />

zu verwenden. Wegen dieser Probleme wird ActiveX als Brücke zwischen der<br />

Webapplikation und der Buskommunikation nicht verwendet.<br />

Im Gegensatz dazu bietet die Java-Plattform mit einem Java-Applet eine<br />

weit verbreitete Basis zur Einbindung eines Programms in eine Webseite. Die<br />

Möglichkeiten reichen hier von graphischen Benutzerschnittstellen über Multithreading<br />

11 bis zur vollständigen Implementierung von Netzwerkprotokollen.<br />

Java-Applets sind in allen gängigen Webbrowsern und Betriebssystemen lauffähig<br />

und stellen somit keine Einschränkung für die Nutzbarkeit der Visualisierung<br />

dar.<br />

Visualisierungsterminal 1<br />

Anzeigefeld A<br />

SPS 1<br />

Eingabefeld B<br />

SPS 2<br />

Anzeigefeld A<br />

Eingabefeld B<br />

SPS 3<br />

Visualisierungsterminal 2<br />

Abb. 11: Kommunikation via Java-Applet<br />

Innerhalb eines Webbrowsers werden Java-Applets in <strong>einer</strong> Sandbox 12 mit<br />

stark eingeschränkten Rechten ausgeführt, um zu verhindern, dass bösartiger<br />

Code Schaden anrichten kann [9]. In der Sandbox können nur Verbindungen<br />

zum Quellserver des Applets aufgebaut werden. Das Applet muss mit erweiterten<br />

Rechten ausgeführt werden, damit es Zugriff auf die Prozessdaten der<br />

11 Nebenläufiges oder paralleles Ausführen von Programmcode<br />

12 Isolierte Ausführungsumgebung, die keinen Zugriff auf den ausführenden Computer erlaubt<br />

22


Steuerungen erhalten kann. Dazu gibt es zum einen die Möglichkeit die benötigten<br />

Rechte in <strong>einer</strong> Policy-Datei auf dem Clientrechner zu hinterlegen, zum<br />

anderen kann man das Java-Applet als Jar-Datei packen und anschließend<br />

signieren. Ein signiertes Applet erhält nach einmaliger Bestätigung des Benutzers<br />

volle Zugriffsrechte auf den Computer. Damit ist auch ein Zugriff auf die<br />

Kommunikationsschnittstellen des Client-Rechners möglich. Die zweite Variante<br />

ist hier zu bevorzugen, da der Benutzer so keine Änderungen an Systemdateien<br />

von Hand durchführen muss.<br />

3.4 Kommunikationssysteme<br />

3.4.1 CAN und andere Feldbussysteme<br />

Es ist möglich, den CAN-Bus weiterhin als Kommunikationsschnittstelle zur Visualisierung<br />

zu nutzen, da die Steuerungssoftware für Prozessdaten bereits auf<br />

dieses System ausgerichtet ist. Für Parameter etc. wird jedoch zurzeit PVI genutzt.<br />

Diese Funktionalität müsste dann für die CAN-Schnittstelle reimplementiert<br />

werden, was einen hohen Aufwand nach sich ziehen würde.<br />

Da für den CAN-Bus spezielle Schnittstellenkarten benötigt werden, stellt<br />

sich das Problem, wie aus dem Java-Applet auf den Treiber zugegriffen werden<br />

kann. Für die meisten Schnittstellenkarten wird vom Hersteller eine C/C++ API<br />

zur Verfügung gestellt, auf die mit Hilfe des Java Native Interfaces zugegriffen<br />

werden kann. Dafür muss eine spezielle Bibliothek als Brücke zwischen Java<br />

und C/C++ erstellt werden, die mit dem Java-Applet ausgeliefert und auf dem<br />

Clientrechner installiert werden muss. Gleiches gilt auch für andere Feldbussysteme<br />

wie den Powerlink-Bus.<br />

Vor-/Nachteile:<br />

+ Bewährte Technik<br />

+ N:M Kommunikation<br />

+ Eine gemeinsame Steuerungsschnittstelle<br />

- Spezielle Schnittstellenkarten benötigt<br />

- Implementierungsaufwand für Parameterübertragung<br />

- Keine Standard-API zur Ansteuerung der Karte<br />

- Probleme bei Zugriff über Java-Applet<br />

23


3.4.2 TCP basierte Protokolle<br />

Da sowohl die Steuerungen, als auch die Visualisierungsterminals an ein gemeinsames<br />

TCP/IP-Netzwerk angeschlossen sind, ist es nahe liegend, dieses<br />

zur Übertragung der Prozessdaten und der Bilddefinitionen zu nutzen. So ist es<br />

möglich, die vorhandenen Programmierschnittstellen der Java-<br />

Klassenbibliotheken zu verwenden, wodurch der <strong>Entwicklung</strong>saufwand für das<br />

Applet deutlich reduziert wird. Der Steuerungshersteller B&R stellt Bibliotheken<br />

zur Verfügung, die die <strong>Entwicklung</strong> von TCP- und UDP-basierten Anwendungen<br />

auf der SPS erlauben.<br />

Bei TCP handelt es sich um ein gesichertes Transportprotokoll, welches<br />

verbindungsorientiert arbeitet und deshalb ohne Erweiterungen nur die Peer-<br />

To-Peer 13 Kommunikation unterstützt. Die Visualisierung hat allerdings die Anforderung,<br />

dass beliebig viele Visualisierungsclients auf die Daten <strong>einer</strong> Steuerung<br />

zugreifen können. Damit dies mittels TCP erreicht werden kann, müssen<br />

auf der Steuerung die Verbindungen zu allen Clients verwaltet und einzeln bedient<br />

werden. Auf Grund der notwendigen Struktur 14 des Steuerungsprogramms<br />

ergibt sich deshalb ein größerer Aufwand für die Erstellung der Steuerungssoftware.<br />

Zusätzlich muss in der Visualisierung die Information hinterlegt sein,<br />

welche Prozessvariable von welcher Steuerung zur Verfügung gestellt wird.<br />

Das führt bei der Visualisierung zu zusätzlichen Fehlerquellen sowie zu einem<br />

erhöhten Pflegeaufwand, da diese Information zusätzlich gepflegt werden<br />

muss.<br />

Vor-/Nachteile:<br />

+ Standardprotokoll<br />

+ Gesicherter Transport<br />

- Punkt-zu-Punkt-Verbindungen<br />

- Aufwändige Implementierung auf der Steuerungsseite<br />

- Pflege von zusätzlichen Konfigurationsdaten<br />

13 Zwei Teilnehmer kommunizieren direkt (Punkt-zu-Punkt) miteinander. Die Übertragung ist für<br />

Dritte nicht sichtbar.<br />

14 Programm wird zyklisch abgearbeitet. Nebenläufiges Ausführen von Code innerhalb eines<br />

Programms ist nicht möglich.<br />

24


3.4.3 UDP basierte Protokolle<br />

Das UDP-Protokoll setzt im Gegensatz zu TCP keine Server-Client–Beziehung<br />

der Kommunikationsknoten voraus, sondern erlaubt eine gleichberechtigte<br />

Kommunikation der Teilnehmer. Da UDP verbindungslos arbeitet, müssen weder<br />

steuerungsseitig noch in der Visualisierung Verbindungen verwaltet werden.<br />

Obwohl UDP ein verbindungsloses Protokoll ist, müssen die einzelnen Kommunikationsteilnehmer<br />

die IP-Adressen der anderen Knoten kennen, um Zugriff auf<br />

deren Prozessvariablen zu erhalten.<br />

Die Tatsache, dass UDP ohne weitere Maßnahmen nur ungesicherten Datentransport<br />

erlaubt, stellt für die Übertragung der Daten von der Steuerung zur<br />

Visualisierung kein grundlegendes Problem dar, da die Daten zyklisch gesendet<br />

werden. Die Pakete von der Visualisierung zur Steuerung dürfen unter keinen<br />

Umständen verloren gehen. Ein Paketverlust kann zum Beispiel dazu führen,<br />

dass die Betätigung eines Buttons in der Visualisierung nicht von der Steuerung<br />

empfangen wird und die Eingabe so wirkungslos bleibt. So ist es für diese Übertragungsrichtung<br />

notwendig, den Transport gegen Paketverluste zu sichern.<br />

Dies erfolgt in der Regel mit einem anwendungsspezifischen Protokoll, das auf<br />

UDP aufbaut, und der Nutzung von Bestätigungsnachrichten.<br />

Vor-/Nachteile:<br />

+ Standardprotokoll<br />

+ Verbindungslos<br />

+ Geringer Implementierungsaufwand<br />

+ Wenig Protokolloverhead<br />

- Peer-To-Peer-Kommunikation<br />

- Sicherer Transport nur durch zusätzliches Protokoll<br />

3.4.4 UDP Mulitcast als Kommunikationsprotokoll<br />

Da das UDP-Protokoll bereits die meisten Anforderungen an ein Protokoll für<br />

die Visualisierung erfüllt, aber ebenfalls nur eine 1:1-Kommunikation bietet, wird<br />

zusätzlich UDP-Multicast eingesetzt. Das System zeigt somit ein Verhalten, wie<br />

es bereits vom CAN-Bus bekannt ist: ein Teilnehmer sendet ein Paket und alle<br />

anderen Teilnehmer empfangen es.<br />

25


Die Adressierung bei UDP-Multicast wird über IP-Gruppen realisiert, denen<br />

jeweils eine Multicast-IP-Adresse zugeordnet wird. Diese wird wiederum in eine<br />

Multicast-MAC 15 -Adresse umgerechnet. Alle Netzwerkkarten akzeptieren Pakete<br />

mit diesen speziellen MAC-Adressen und leiten sie an den Protokollstack im<br />

Betriebssystem weiter. Dieser verteilt wiederum die Pakete dann an die entsprechenden<br />

Anwendungen weiter.<br />

IPv4<br />

235 0 0 7<br />

1 1 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1<br />

MAC<br />

0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1<br />

01 00 5E 00 00 07<br />

Abb. 12: Adressumsetzung von IPv4 nach Ethernet-Multicast<br />

Die Umsetzung von IP-Multicastadressen in Ethernet-Multicastadressen<br />

geschieht durch Umkopieren der unteren 23 Bit der IPv4- in die MAC-Adresse<br />

[10]. Diese Umsetzung ist surjektiv 16 , da mehrere IPv4-Adressen auf dieselbe<br />

MAC-Adresse führen können. Das erlaubt bereits in der Netzwerkkarte eine<br />

Vorfilterung der Pakete nach den niedrigen 23 Bit der Adresse. Die weitere Filterung<br />

wird dann vom Betriebssystem des Computers durchgeführt.<br />

Visu 2<br />

Visu 1<br />

UDP<br />

Multicast Gruppe<br />

235.0.0.0<br />

SPS 1<br />

SPS 2<br />

15 Media Access Control Adresse – Hardware Adresse eines Netzwerkadapters, die weltweit<br />

eindeutig vom Hersteller vergeben wird.<br />

16 Mehrere Elemente des Definitionsbereiches werden auf ein Element des Wertebereiches<br />

abgebildet.<br />

26


Abb. 13: UDP-Multicast Kommunikationsmodell<br />

Das N:M-Kommunikationsmodell ermöglicht das Austauschen von Prozessdaten<br />

zwischen den einzelnen Teilnehmern, ohne dass bekannt sein muss,<br />

von welcher Steuerung das Datum stammt oder welches Bedienterminal das<br />

Datum auswertet. Es ergibt sich dadurch ein „loses“ Netzwerk, zu dem zur<br />

Laufzeit neue Teilnehmer hinzugefügt oder entfernt werden können.<br />

In einem solchen System können Ausfälle von Teilnehmern nicht erkannt<br />

werden. Daher sendet jede Steuerung zyklisch ein Heartbeat 17 -Paket über den<br />

Multicast an die anderen Kommunikationsteilnehmer. Falls diese Pakete ausbleiben,<br />

können die anderen Kommunikationseilnehmer die Daten der entsprechenden<br />

Steuerung als ungültig kennzeichnen und so die Anzeige und Verarbeitung<br />

von veralteten Daten verhindern.<br />

3.5 Übertragungsprotokoll<br />

Zur Behebung der zuvor dargestellten Nachteile des UDP-Protokolls wird ein<br />

weiteres Protokoll oberhalb von UDP eingesetzt. Es dient der variablenorientierten<br />

Kommunikation der einzelnen Teilnehmer und der Sicherung des Transportes<br />

von ereignisbasierten Nachrichten. Das Protokoll ist bewusst einfach gehalten,<br />

um den Implementierungsaufwand und die Rechenlast auf den Steuerungen<br />

gering zu halten. Sicherheitsanforderungen gegen Angriffe von Dritten sind<br />

in der kontrollierten Maschinenumgebung nachrangig, da das Maschinennetz<br />

im Normalfall keine oder eine gut geschützte Verbindung zum Unternehmensnetz<br />

und damit zum Internet hat.<br />

3.5.1 Funktion<br />

Die Kommunikationsteilnehmer werden in Server- und in Clientknoten aufgeteilt.<br />

Die Serverknoten stellen dabei die Steuerungen dar, die dem System Prozessvariablen<br />

zur Verfügung stellen. Die Clientknoten sind Bedienterminals und<br />

Steuerungen, die die Daten von den Servern entgegennehmen und anzeigen<br />

oder weiterverarbeiten.<br />

Die Übertragung der Daten vom Server zum Client wird entweder zyklisch<br />

durch die Steuerungsapplikation oder auf Anfrage durch die Visualisierung an-<br />

17 Paket ohne Inhalt um die Anwesenheit eines Kommunikationsteilnehmers zu zeigen<br />

27


gestoßen. Den Clients ist auch ein schreibender Zugriff auf beliebige, serverseitig<br />

konfigurierte, Prozessvariablen erlaubt. Die Datenübertragung vom Server<br />

zum Client ist als ungesicherte Multicast-Übertragung möglich. Über diesen<br />

Weg sollen vor allem zyklische Statusinformationen gesendet werden, bei denen<br />

Paketverluste in Grenzen tolerierbar sind.<br />

Der Server sendet nicht alle Prozessvariablen zyklisch, da sich ihre Werte<br />

nicht laufend ändern und sie folglich nicht zyklisch aktualisiert werden müssen.<br />

Aus diesem Grund ist ein clientgesteuerter Zugriff auf die Prozessvariablen<br />

möglich. Da hier einzelne Pakete ereignisgesteuert gesendet werden, sind Paketverluste<br />

nicht tolerierbar. Verlorene Pakete führen zum Beispiel dazu, dass<br />

in der Visualisierung ein falscher oder kein Wert für einen Parameter angezeigt<br />

wird. Deswegen muss diese Datenübertragung gegen Paketverluste gesichert<br />

werden.<br />

Die Sicherung von Multicast-Transporten setzt meist eine Unterstützung<br />

des Netzes, z.B. durch intelligente Switche, voraus oder die Kenntnis der Kommunikationsteilnehmer<br />

über die Netzwerktopologie [4]. Das Konzept der Sicherung<br />

des Datentransportes mit ACK 18 -Paketen lässt sich nicht problemlos auf<br />

die Multicast-Kommunikation übertragen, da in einem Multicast-Netz ein Paket<br />

per Definition von mehreren Teilnehmern empfangen werden kann. Da ein Paket<br />

auch von keinem Empfänger angenommen werden kann, ist es auch ein<br />

zulässiger Fall, dass der Sender keine Bestätigung erhält. Damit in dieser Situation<br />

der korrekte Versand der Nachrichten sichergestellt werden kann, muss der<br />

Sender die Anzahl der Empfänger kennen, was aber in diesem Fall steuerungsseitig<br />

einen hohen Aufwand bedeuten würde und auch im Widerspruch zu den<br />

Verwendungsgründen eines Multicast-Netzes steht. Die meisten Methoden zur<br />

Sicherung von Multicast-Transport zielen zudem auf die sichere Übertragung<br />

von großen Datenmengen in großen Netzen ab. Die Verteilung von Prozessdaten<br />

ähnelt eher dem Verteilen eines Streams von Audio oder Videodaten, da<br />

Daten aus der Vergangenheit in der Regel uninteressant für die weitere Verarbeitung<br />

sind.<br />

Aus diesen Gründen ist der gesicherte Kanal als Unicast-Kommunikation<br />

ausgelegt. Um dennoch die Eigenschaften des Multicast-Netzes beizubehalten,<br />

werden Anfragen vom Client an einen Server über das Multicast-Netz gesendet.<br />

18 Bestätigungspaket, das der Empfänger für ein empfangenes Paket an den Sender zurückschickt.<br />

28


Der zuständige Server erkennt Anfragen, dass auf eine s<strong>einer</strong> Prozessvariablen<br />

zugegriffen werden soll, an der Prozessvariablen-ID im Paket und sendet das<br />

Antwortpaket als UDP-Unicast an den Client zurück. Erhält der Client keine<br />

Antwort, dann sendet er die Anfrage nach <strong>einer</strong> festgelegten Zeitspanne neu.<br />

Nach <strong>einer</strong> maximalen Anzahl von fehlgeschlagenen Sendeversuchen wird die<br />

Übertragung durch das Applet abgebrochen.<br />

Pakettyp<br />

Übertragung Beschreibung<br />

CYCLIC Multicast Zyklisch vom Server versendetes Datenpaket.<br />

WRITE Multicast Ereignisorientiertes Datenpaket vom Client<br />

zum Server.<br />

WRITE_ACK Unicast Bestätigung des Datenpaketes vom Client<br />

READ Multicast Fordert vom Server ein Prozessdatenpaket an<br />

READ_ACK Unicast Bestätigung des Prozessdatenpaketes mit den<br />

angeforderten Daten<br />

Tabelle 2: UDP-Pakettypen<br />

3.5.2 Paketformate<br />

Jedes Paket enthält zur Erkennung von Paketverlusten eine Sequenznummer<br />

(SEQ), die bei Paketen vom Client zum Server vom Sender festgelegt wird. Die<br />

Antwortpakete vom Server enthalten die Sequenznummer des Paketes vom<br />

Client.<br />

Um die Prozessvariablen eindeutig zu identifizieren, werden eine Servernummer<br />

(SRC) und eine Variablen-ID (PVID) eingeführt. Die Variablen-ID ist für<br />

jeden Server eindeutig zu vergeben. Aus der Kombination der Servernummer<br />

und der Variablen-ID ergibt sich eine systemweit eindeutige Identifizierung für<br />

die Prozessvariablen.<br />

Die Clients benötigen zur Auswertung der Pakete neben den eigentlichen<br />

Daten eine Beschreibung, wie diese zu interpretieren sind. Dazu muss im System<br />

die Definition der Prozessvariablen verteilt werden. Dies erfolgt über eine<br />

Konfigurationsdatei auf der Steuerung. Sie enthält den Namen der Prozessvariablen,<br />

den Datentyp und die Variablen-ID. Damit die Visualisierungsclients e-<br />

29


enfalls diese Informationen nutzen können, muss die Datei über den Webserver<br />

der Steuerung erreichbar sein.<br />

32<br />

0<br />

SRC<br />

SEQ 0<br />

PVID<br />

DATA (1 .. n Bytes)<br />

TYPE = 1<br />

Abb. 14: CYCLIC Paket (Server => Multicast => Client)<br />

32<br />

0<br />

SRC<br />

SEQ 0<br />

PVID<br />

DATA (1 .. n Bytes)<br />

TYPE = 2<br />

Abb. 15: WRITE Paket (Client => Multicast => Server)<br />

32<br />

0<br />

SEQ = WRITE.SEQ 0<br />

SRC<br />

PVID<br />

TYPE = 3<br />

Abb. 16: WRITE_ACK Paket (Server => Client)<br />

32<br />

SRC<br />

SEQ 0<br />

PVID<br />

TYPE = 4<br />

0<br />

Abb. 17: READ Paket (Client => Multicast => Server)<br />

32<br />

0<br />

SEQ = READ.SEQ 0<br />

SRC<br />

PVID<br />

DATA (1 .. n Bytes)<br />

TYPE = 5<br />

Abb. 18: READ_ACK Paket (Server => Client)<br />

30


Datentyp Länge in Bytes Beschreibung<br />

S8 1 -128 .. 127<br />

U8 1 0 .. 255<br />

S16 2 -32768 .. 32767<br />

U16 2 0 .. 65535<br />

S32 4 -2147483648 .. 2147483648<br />

U32 4 0 .. 4294967295<br />

FLOAT 4 -3.4e38 .. 3.4e38<br />

STRING Variabel ASCII-Zeichenkette fixer Länge<br />

BINARY Variabel Binärdaten ohne spezifiziertes Format<br />

Tabelle 3: Datentypen für die Kommunikation zur Visualisierung<br />

3.5.3 Implementierung des Protokolls im Java-Applet<br />

Das Kommunikationsprotokoll ist vollständig im Java-Applet implementiert. Innerhalb<br />

des Applets werden die Prozessvariablen durch Objekte gekapselt. Das<br />

Applet abstrahiert das objektorientierte Datenmodell in eine einfache, prozedurale,<br />

stringbasierte Schnittstelle, die für Javascriptanwendungen einfach zu benutzen<br />

ist. Das Protokoll wird innerhalb des Applets durch die Klasse Udp-<br />

Comm und einen protokollspezifisch erweiterten Socket umgesetzt. Die Klasse<br />

UdpComm wertet die Konfigurationsdaten für die Prozessvariablen von der<br />

Steuerung aus und legt für jede Variable ein typisiertes Variablenobjekt an. Eine<br />

Hash-Tabelle 19 verwaltet die Variablenobjekte um einen effizienten Zugriff über<br />

den Variablennamen zu erhalten. Da sich die Auswertung der Binärdaten der<br />

Prozessvariablen jeweils im Datentyp unterscheidet, ist jedes Variablenobjekt<br />

eine Instanz <strong>einer</strong> typisierten Variablenklasse, die von <strong>einer</strong> allgemeinen Klasse<br />

Variable abgeleitet ist. Diese Basisklasse enthält bereits sämtliche Funktionen,<br />

19 Datenstruktur, die die effiziente Zuordnung von einem Datensatz zu einem String erlaubt.<br />

Die Suche nach einem Datensatz bei gegebenem String ist in konstanter Zeit möglich.<br />

31


die alle Variablenobjekte gemeinsam haben. Die Unterklassen enthalten dann<br />

die datentypspezifische Auswertung und Erzeugung der Daten für die UDP-<br />

Pakete.<br />

Abb. 19: Klassendiagramm des Java-Applets<br />

Die einzelnen Variablenobjekte sind über ein Observer-Pattern mit dem<br />

Socket verbunden. Dieser gibt empfangene Daten zur Auswertung an die einzelnen<br />

Variablenobjekte weiter. Wird der Wert <strong>einer</strong> Prozessvariable über das<br />

entsprechende Variablenobjekt aktualisiert, stößt es selbstständig über den Socket<br />

das Senden des neuen Wertes an. Die Sicherung des Transportes durch<br />

Timeouts und Retransmissions wird transparent im Socket realisiert. Dieser generiert<br />

für jedes Paket eine Sequenznummer und speichert es nach dem Senden<br />

mit dieser Nummer und einem Zeitstempel in <strong>einer</strong> Liste zwischen. Trifft<br />

eine Bestätigungsnachricht für eine Sequenznummer von der bearbeitenden<br />

Steuerung ein, dann entfernt eine Routine im Socket das entsprechende Paket<br />

aus der Liste. Ein Thread durchsucht die Liste zyklisch nach Paketen, die vor<br />

mehr als 500 Millisekunden gesendet wurden. Findet er ein entsprechendes<br />

Paket, sendet er es mit derselben Sequenznummer erneut. Insgesamt wird die-<br />

32


ser Vorgang höchstens dreimal wiederholt. Nach dem alle drei Sendeversuche<br />

fehlgeschlagen sind, entfernt der Thread das Paket aus der Sendeliste.<br />

Applikation VariableFloat Proto.Socket SPS<br />

readVariable()<br />

sendRead()<br />

READ<br />

Timer<br />

READ<br />

READ_ACK<br />

parsePacket()<br />

getValue()<br />

Abb. 20: Sequenzdiagramm der Datenübertragung<br />

Durch die Verlagerung der Auswertung der Datenpakete in einzelne typisierte<br />

Klassen ist eine gute Erweiterbarkeit für neue Datentypen gegeben, da<br />

nur eine neue Typklasse erstellt werden muss. Ansonsten sind keine weiteren<br />

Änderungen erforderlich.<br />

3.5.4 Kommunikationsprotokoll in der Steuerung<br />

Die Schnittstelle des Kommunikationsprotokolls in der Steuerung funktioniert<br />

ähnlich zur Schnittstelle des CAN-Treibers von B&R. Jeder an das Kommunikationssystem<br />

angeschlossenen Prozessvariablen ist eine Ereignisvariable<br />

zugeordnet. Die Applikationssoftware interagiert mit dem Kommunikationsprotokoll.<br />

Durch das Setzen der Ereignisvariablen <strong>einer</strong> Prozessvariablen auf den<br />

Wert mcastSEND kann die Applikation das Senden der entsprechenden Daten<br />

anstoßen. Da die Daten in diesem Fall ungesichert über das Multicast-Netz an<br />

33


die anderen Kommunikationsteilnehmer übertragen werden, sollte dieser Mechanismus<br />

vor allem für die zyklische Übertragung genutzt werden.<br />

Den schreibenden Zugriff eines Kommunikationsteilnehmers wird der<br />

Applikationssoftware durch das Setzen der Ereignisvariablen auf mcastUPDA-<br />

TED mitgeteilt. Nachdem der Protokolltreiber die Ereignisvariable gesetzt hat,<br />

kann die Applikation mit der Auswertung der Daten beginnen. Nachdem die Applikation<br />

fertig ist, sollte sie die Ereignisvariable auf mcastIDLE zurücksetzen,<br />

damit der nächste Schreibzugriff erkannt werden kann.<br />

Zur steuerungsseitigen Konfiguration des Protokolls müssen die Prozessvariablen<br />

in der Steuerungssoftware angelegt und in <strong>einer</strong> Konfigurationsdatei<br />

eingetragen werden. Die Konfigurationsdatei enthält pro Prozessvariable<br />

eine Zeile mit der ID der Prozessvariablen, dem Datentyp, den Zugriffsrechten<br />

für die anderen Kommunikationsteilnehmer und dem Namen.<br />

Für die Kommunikation mit der Visualisierung sollten in der Steuerung<br />

eigene Prozessvariablen vorgesehen werden, die ungeprüft nicht weiter verwendet<br />

werden dürfen. Die Steuerungssoftware muss bei Schreibzugriffen<br />

durch die Visualisierung, angezeigt durch eine gesetzte Ereignisvariable, den<br />

eingegebenen Sollwert überprüfen und in ihre eigenen gespiegelten Sollwertvariablen<br />

übernehmen. Diese Sollwerte sendet die Steuerung zur Anzeige an die<br />

Visualisierung zurück und verwendet sie intern weiter. Durch diese Konvention<br />

ist sichergestellt, dass durch ungültige Eingaben an der Visualisierung keine<br />

Probleme verursacht werden können.<br />

Für das Auslösen von einmaligen Aktionen (Triggern) wird ein ähnliches<br />

Muster verwendet. Hier überprüft die Steuerungssoftware ebenfalls nur die Ereignisvariable<br />

der entsprechenden Prozessvariablen. Durch einen Schreibzugriff<br />

löst die Applikation nach Überprüfung etwaiger Randbedingungen die<br />

Aktion aus und setzt die Ereignisvariable zurück.<br />

34


Applikation<br />

UDP<br />

Applikation sendet<br />

zyklisch<br />

Ereignisvariable setzen<br />

mcastSEND<br />

Ereignisvariable rücksetzen<br />

mcastIDLE<br />

Ereignisvariable setzen<br />

mcastUPDATED<br />

UDP-Paket<br />

senden<br />

UDP-Paket<br />

empfangen<br />

Applikation prüft Ereignisvariable<br />

Empfangener Wert<br />

wird verarbeitet<br />

Abb. 21: Kommunikation über Ereignisvariablen<br />

Ereignisvariable rücksetzen<br />

mcastIDLE<br />

Start<br />

Start<br />

Ereignisv.<br />

aktualisiert<br />

Nein<br />

Ereignisv.<br />

aktualisiert<br />

Nein<br />

Ja<br />

Ja<br />

Sollwert<br />

gültig<br />

Nein<br />

Randbed.<br />

erfüllt<br />

Nein<br />

Ja<br />

Sollwert ü-<br />

bernehmen<br />

Sollwert<br />

begrenzen<br />

Ja<br />

Aktion ausführen<br />

Gespiegelten<br />

Sollwert<br />

senden<br />

Ende<br />

Ende<br />

Abb. 22: Verarbeitung von Sollwerten und Aktionen<br />

35


3.6 Datenspeicherung<br />

Die bereits angedeutete verteilte Speicherung der Definitionsdaten der Bedienbilder<br />

bietet im Gegensatz zu <strong>einer</strong> zentralen Speicherung den Vorteil, dass die<br />

Bedienbilder etc. mit den Steuerungen zu logischen Einheiten zusammengefasst<br />

werden können. So existiert zusätzlich zum Webserver auf dem Leitstand<br />

ein weiterer Webserver auf jeder Steuerung. Diese dienen in erster Linie als<br />

Fileserver und stellen die Bildlisten, die Bilddefinitionen sowie die Konfigurationsdateien<br />

für das Kommunikationsprotokoll zur Verfügung. Durch die Zusammenfassung<br />

der Daten können die Bedienbilder und Variablendefinitionen bei<br />

einem Update der Steuerungssoftware ohne weiteren Aufwand aktualisiert werden.<br />

Browser<br />

Bild<br />

Bild<br />

Bild<br />

Leitrechner<br />

SPS<br />

Bild<br />

Bild<br />

Bild<br />

Bild<br />

HTML<br />

JavaScript<br />

Applet<br />

Variablen<br />

Abb. 23: Datenspeicherung für Bedienseiten<br />

Zur Speicherung des Grundgerüstes der Visualisierung dient ein normaler<br />

Webserver. Von diesem Server laden die Visualisierungsclients den Kern sowie<br />

allgemeine Bedienbilder, die die gesamte Anlage betreffen und daher k<strong>einer</strong><br />

Steuerung zugeordnet werden können. Die Dateien sind in <strong>einer</strong> Ordnerstruktur<br />

abgelegt, die für jede Kategorie von Dateien einen Unterordner enthält. Im Wurzelverzeichnis<br />

des Servers befindet sich die eigentlichen HTML-Datei mit dem<br />

Kern der Visualisierung.<br />

Die Webserver auf den Steuerungen enthalten ausschließlich die Bilddefinitionen<br />

ihrer Bedienbilder sowie die Konfigurationsdatei für die Prozessvariablen.<br />

36


Sie enthalten im Gegensatz zum Leitstandsserver aber nur den Unterordner für<br />

die Daten.<br />

Pfad<br />

/index.htm<br />

/css<br />

/data<br />

/data/main.xml<br />

/data/parameter_allg.xml<br />

/data/variablen.ini<br />

/images<br />

/script<br />

/script/udpcomm.jar<br />

/script/bild.js<br />

/script/util.js<br />

/script/widgets.js<br />

Beschreibung<br />

Startseite der Visualisierung<br />

Ordner für Cascading Stylesheets<br />

Ordner für Bilddefinitionsdateien und<br />

die Konfigurationsdatei der Prozessvariablen<br />

Bilddefinition des Hauptbedienbildes<br />

Bilddefinition für das allgemeine Parameterbild<br />

Konfigurationsdatei für Prozessvariablen<br />

Grafiken für die Visualisierung<br />

Ordner mit den Skripten für die Visualisierung<br />

Java-Applet zur Kommunikation<br />

Implementierung der Klassen Bild und<br />

XmlBild<br />

Hilfsskripte z.B. für Klassenhierarchien<br />

Implementierung der einzelnen Bedienelemente<br />

Tabelle 4: Verzeichnisstruktur der Visualisierung<br />

37


4 Implementierung am Beispiel eines Teststandes<br />

In diesem Abschnitt werden die zuvor entwickelten Konzepte am Beispiel eines<br />

Teststandes implementiert. Bei dem Teststand handelt es sich um ein Druckwerk<br />

<strong>einer</strong> Flexodruckmaschine, das um einen Gegendruckzylinder ergänzt<br />

wurde. Der Aufbau dient zum Vermessen und Ausregeln von Schwingungen,<br />

die im Druckprozess auftreten.<br />

Abb. 24: CAD-Rendering des Teststandes<br />

Der Teststand verfügt über drei rotierende Zylinder die unabhängig von<br />

einander angetrieben sind. Auf dem mittleren Zylinder, dem Formatzylinder (in<br />

Fig. 14 grün dargestellt), ist eine Gummimatte - das Klischee - aufgeklebt. Die<br />

Zylinder werden bei synchroner Umfangsgeschwindigkeit in Kontakt gebracht<br />

und simulieren so den Druckprozess. Die zu untersuchenden Schwingungen<br />

entstehen durch die Anlaufkanten des Klischees. Der Fomatzylinder und die<br />

Rasterwalze (der Zylinder im Vordergrund) sind austauschbar. Dazu besitzen<br />

sie an beiden Enden Lager, die zur Entnahme der Zylinder pneumatisch geöffnet<br />

werden können.<br />

Die Synchronisierung und Drehzahlregelung der Antriebe erfolgt über drei<br />

Frequenzumrichter unter Kontrolle <strong>einer</strong> speicherprogrammierbaren Steuerung.<br />

Die Frequenzumrichter sind über einen Powerlink-Bus mit der Steuerung ver-<br />

38


unden. Zur Bedienung verfügt der Teststand über einen PC mit einem Touchpanel.<br />

Dieser ist über ein gewöhnliches Ethernet-Netzwerk mit der SPS verbunden.<br />

Abb. 25: Steuerungsarchitektur des Teststandes<br />

Die Benutzeroberfläche des Teststandes soll folgende Anforderungen erfüllen:<br />

• Vorgabe von Geschwindigkeitsprofilen<br />

• Anzeige der aktuellen/maximalen Ströme der Motoren<br />

• Anzeige der aktuellen Geschwindigkeit<br />

• Parametrierung der Steuerung über eine Parameterseite<br />

• Parametrierung der Antriebsregler über eine Parameterseite<br />

39


4.1 Funktion des Teststands<br />

Die Bedienung des Teststandes setzt sich aus dem Touchpanel mit der Visualisierung<br />

und einigen Tastern am Schaltschrank zusammen.<br />

Taster<br />

Start<br />

Handbetrieb<br />

Stopp<br />

Beschleunigen/Vor<br />

Verzögern/Zurück<br />

Funktion<br />

Ein Tastendruck startet die Bewegung<br />

des Teststands in Vorrückgeschwindigkeit<br />

mit Drehmomentbegrenzung.<br />

Der zweite Tastendruck stellt die Begrenzung<br />

ab und gibt die Geschwindigkeitsrampen<br />

frei. Jeder weitere<br />

Tastendruck startet eine Geschwindigkeitsrampe<br />

mit den Vorgabewerten<br />

der Visualisierung.<br />

Startet den Teststand im Handbetrieb.<br />

Der Teststand kann dann über Taster<br />

in beide Drehrichtungen bewegt werden.<br />

Hält den Teststand unabhängig von<br />

der Betriebsart an und schaltet die<br />

Antriebe ab.<br />

Im Automatikbetrieb wird die Geschwindigkeit<br />

des Teststandes erhöht.<br />

Im Handbetrieb dreht der Teststand<br />

vorwärts.<br />

Im Automatikbetrieb wird die Geschwindigkeit<br />

des Teststandes verringert.<br />

Im Handbetrieb dreht der<br />

Teststand rückwärts.<br />

Tabelle 5: Taster zur Bedienung des Teststands<br />

40


Da sowohl Formatzylinder als auch Rasterwalze austauschbar sind, gibt es<br />

die Möglichkeit, über einen Parameter deren Durchmesser und damit die Umfangsgeschwindigkeit<br />

anzupassen. Da die eingegebenen Werte jedoch nicht<br />

durch die Steuerung überprüft werden können, besteht die Gefahr, dass der<br />

Formatzylinder mit den Messeinrichtungen durch eine falsche Eingabe beschädigt<br />

werden kann. Um diese Gefahr zu verringern, ist der zweistufige Einschaltvorgang<br />

mit Drehmomentbegrenzung vorgesehen. Im Falle <strong>einer</strong> fehlerhaften<br />

Eingabe wird der Formatzylinder vom Gegendruckzylinder, der ohne Drehmomentbegrenzung<br />

betrieben wird, mitgezogen. Auf diese Weise sollen Beschädigungen<br />

der Messeinrichtungen verhindert werden.<br />

4.2 Bedienoberfläche<br />

Die Bedienoberfläche des Teststandes ist in zwei Bereiche gegliedert. Das<br />

Hauptbedienbild erlaubt das Einstellen von Prozessdaten wie z.B. der Zielgeschwindigkeit<br />

für Geschwindigkeitsrampen. Die Parameterseiten ermöglichen<br />

die Eingabe von grundlegenden Betriebsparametern des Teststands wie z.B.<br />

die maximale Geschwindigkeit, Nothaltrampen oder Reglerparametern. Für jeden<br />

Antrieb gibt es ein eigenes Parameterbild mit den entsprechenden Antriebsparametern.<br />

Abb. 26: Hauptbedienbild des Teststands<br />

41


Das Hauptbild zeigt zusätzlich zur aktuellen Geschwindigkeit des Teststandes<br />

auch Messwerte der drei Antriebe an. Neben den Anzeigen sind auch noch<br />

Eingabefelder für den Zielwert <strong>einer</strong> Geschwindigkeitsrampe, die Beschleunigung<br />

der Rampe und ein Eingabefeld zur Kontrolle der Klapplager vorhanden.<br />

Am unteren Bildrand befindet sich ein Anzeigefeld für Fehlermeldungen der<br />

Steuerung. Das allgemeine Parameterbild enthält zu jedem der drei Zylinder<br />

einige grundlegende Parameter wie den Durchmesser, den maximalen Motorstrom<br />

oder die Drehrichtung. Zusätzlich können allgemeine Einstellungen für<br />

den Teststand, wie die maximale Geschwindigkeit, Standardwerte für Beschleunigungen<br />

und die Geschwindigkeit für den Handbetrieb eingegeben werden.<br />

Zwei Buttons erlauben sowohl das Lesen als auch das Schreiben der Parameter<br />

aus dem Hintergrundspeicher der Steuerung. Über einen weiteren Button<br />

kann die Steuerung neu gestartet werden.<br />

Abb. 27: Parameterbild für allgemeine Parameter<br />

Die Parameterbilder für die drei Antriebe sind jeweils identisch. Deshalb<br />

werden sie hier am Beispiel des Bildes für den Gegendruckzylinder erläutert.<br />

Zur Regelung der Antriebe verwendet der Frequenzumrichter der Firma B&R<br />

eine Kaskadenregelung. Diese besteht aus drei ineinander verschachtelten Re-<br />

42


gelkreisen. Der Sollwert des inneren Regelkreises ist dabei jeweils die Stellgröße<br />

des äußeren.<br />

Der äußerste Regelkreis ist der Lageregler. Er erhält seinen Sollwert von<br />

der SPS-Software. Es handelt sich um einen PI-Regler mit den Parametern kv -<br />

Proportionalverstärkung und tn - Integrierzeitkonstante. Mittels der Parameter<br />

p_max und i_max kann eine Begrenzung der Stellgröße des Reglers eingestellt<br />

werden. Die Parameter t_total und t_predict erlauben unter anderem eine Geschwindigkeitsaufschaltung<br />

auf den Stellwert des Reglers und eine Buslaufzeitkompensierung<br />

der Sollwerte, falls, wie hier der Fall, verschiedene Frequenzumrichter<br />

über ein Bussystem gekoppelt werden. Der Lageregler erzeugt aus<br />

der Soll- und Istposition ein Sollwert für den unterlagerten Drehzahlregler. Dieser<br />

Regler ist ebenfalls ein PI-Regler mit den Parametern kv und tn. Für den<br />

Drehzahlistwert kann mittels des Parameters t_filter noch ein Tiefpassfilter konfiguriert<br />

werden. Der Drehzahlregler stellt den drehmomentbildenden Statorstrom.<br />

Er wird nach <strong>einer</strong> Reihe von Filtern als Führungsgröße für den<br />

Stromregler übernommen. Dieser Regler wird durch ein Datenmodul auf der<br />

Steuerung automatisch konfiguriert und daher besteht keine Notwendigkeit,<br />

diese Parameter über die Visualisierung zugänglich zu machen.<br />

Abb. 28: Parameterbild für die Antriebsregelung<br />

43


4.3 Steuerungssoftware<br />

Bei der Steuerung handelt es sich um eine SPS des Typs CP360 von B&R. Die<br />

Steuerung ist ein modular aufgebautes system. Sie besteht aus <strong>einer</strong> Grundplatte,<br />

die die Stromversorgung sowie die eigentliche Steuerung als Steckmodul<br />

enthält. Die Steuerung kann durch Baugruppen wie digitale oder analoge<br />

Ein/Ausgänge erweitert werden. Zusätzlich bietet die CPU einen Steckplatz für<br />

ein Schnittstellenmodul zur Kommunikation mit weiteren Geräten. In der verwendeten<br />

Konfiguration wird ein Modul mit <strong>einer</strong> Powerlink- sowie <strong>einer</strong> CAN-<br />

Schnittstelle verwendet. Der Prozessor der Steuerung wird mit <strong>einer</strong> Taktfrequenz<br />

von 266MHz betrieben und die Applikationssoftware kann auf 32MByte<br />

DRAM und 496KByte SRAM zurückgreifen.<br />

Die Steuerungssoftware wird durch das Betriebssystem der SPS, der Automation<br />

Runtime, in Tasks unterteilt, die <strong>einer</strong> Taskklasse zugeordnet sind.<br />

Jeder Task innerhalb <strong>einer</strong> Taskklasse wird zyklisch mit <strong>einer</strong> durch die<br />

Taskklasse festgelegten Zykluszeit und Priorität ausgeführt. Taskklassen mit<br />

<strong>einer</strong> hohen Priorität können Klassen mit niedrigerer Priorität unterbrechen.<br />

Task Zyklus [ms] Priorität Beschreibung<br />

MessTask 0,8 1 Messwerterfassung der Antriebe,<br />

Verarbeitung und CAN-Übertragung<br />

an ein externes Messsystem<br />

AchsTask 10 2 Ablaufsteuerung des Teststandes,<br />

Ansteuerung der Frequenzumrichter<br />

ParamTask 500 6 Verwaltung von Parameterdaten,<br />

Lesen/Schreiben des Flashspeichers<br />

UdpTask 5 8 Verarbeitung der UDP-Pakete der<br />

Visualisierung, zyklisches Senden<br />

der Istwerte an die Visualisierung.<br />

Tabelle 6: Steuerungstasks<br />

In den Tasks wird viel Code mehrfach genutzt, der in gemeinsamen Bibliotheken<br />

abgelegt ist.<br />

44


Bibliothek<br />

McLib<br />

UdpLib<br />

AlarmLib<br />

Beschreibung<br />

Bibliothek mit Funktionsblöcken zur Achssteuerung und<br />

Bewegungsprofilerzeugung<br />

Funktionsblöcke zur Kommunikation mit der Visualisierung<br />

über UDP<br />

Funktionen zur Verwaltung der Alarmmeldungen in <strong>einer</strong><br />

Warteschlange.<br />

Tabelle 7: Bibliotheken<br />

Jeder Task besteht aus <strong>einer</strong> Initialisierungsfunktion, <strong>einer</strong> zyklischen Funktion<br />

sowie <strong>einer</strong> Funktion, die beim Beenden des Tasks aufgerufen wird.<br />

4.3.1 Task MessTask<br />

Der Task MessTask dient zur Erfassung der Antriebsmesswerte. Die Messwerte<br />

werden auf zwei Wegen aus den Antrieben gelesen. Einige Daten werden<br />

zyklisch über den Powerlink-Bus (Zykluszeit 800us) übertragen. Diese Methode<br />

wird für funktionsrelevante Daten wie Motorströme und die Lage des Formatzylinders<br />

genutzt, die mit kurzen Zykluszeiten verarbeitet werden müssen.<br />

Weniger relevante Daten, vor allem zur Anzeige in der Visualisierung, werden<br />

über einen Servicekanal gelesen. Für diese Daten ist im zyklischen Powerlinktelegramm<br />

ein fester Bereich vorgesehen. Es kann pro Powerlinkzyklus nur<br />

eine Variable übertragen werden. Dadurch ist die Übertragungsgeschwindigkeit<br />

dieses Kanals abhängig von der Anzahl der zu übertragenden Variablen begrenzt.<br />

Aufgrund dieser Beschränkung ist dieser Kanal für Daten mit sehr kurzen<br />

Zykluszeiten, wie z.B. der Formatzylinderposition, ungeeignet. Wegen des<br />

sequentiellen Charakters dieser Übertragung wird sie durch eine State-Machine<br />

kontrolliert, die den Ablauf der Übertragung mehrerer Variablen kontrolliert.<br />

Neben dem eigentlichen Erfassen der Messwerte erfolgt in diesem Task<br />

auch die Umrechnung der Werte zur Anzeige in der Visualisierung. Zusätzlich<br />

bestimmt der Task auch die Spitzenwerte der Motorströme und die elektrische<br />

Gesamtleistung des Teststands. Die Formatzylinderposition sowie der drehmomentbildende<br />

Strom des Formatzylinders werden nach der Verarbeitung in<br />

45


jedem Taskzyklus über die CAN-Schnittstelle der Steuerung an ein externes<br />

Messwerterfassungssystem gesendet.<br />

4.3.2 Task AchsTask<br />

Dieser Task dient zur generellen Ansteuerung der Achsen. Er beinhaltet die<br />

State-Machine der Ablaufsteuerung des Teststandes. Sie bildet die verschiedenen<br />

Betriebsarten und Betriebsmodi des Systems ab. Die Zustandsübergänge<br />

werden zum Beispiel durch Tastendrücke oder auch steuerungsinterne Ereignisse<br />

ausgelöst. Zusätzlich enthält die State-Machine auch die Fehlerbehandlung<br />

für Antriebsfehler, Nothaltbedingungen etc.<br />

Abb. 29: Zustandsdiagramm „AchsTask“<br />

Aus dem Zustand der State-Machine werden in Abhängigkeit von weiteren<br />

Eingangssignalen die Signale für die Funktionsblöcke zur Steuerung der Umrichter<br />

erzeugt. Diese Funktionsblöcke beinhalten wiederum Schrittketten, die<br />

46


genau den Schritten entsprechen, die zur Kontrolle der Antriebe notwendig<br />

sind. Sie senden Kommandos an die Umrichter, die dann schließlich zu den<br />

gewünschten Bewegungen der Antriebe führen.<br />

Daneben beinhaltet der Task auch die Erzeugung der digitalen Ausgangssignale<br />

zur Ansteuerung der Motorlüfter, der Klapplager und der Leuchten in<br />

den Bedientastern. Zusätzlich werden die Kommandos der Visualisierung zur<br />

Parametrierung der Frequenzumrichter verarbeitet. Um ein derartiges Kommando<br />

an einen Antrieb zu senden, greift die Visualisierung schreibend auf die<br />

entsprechende Prozessvariable in der Steuerung zu. Diese erkennt den Zugriff<br />

anhand der gesetzten Ereignisvariablen. Das Programm setzt daraufhin die Ereignisvariable<br />

auf ihren Anfangswert zurück und stößt, wenn der Betriebszustand<br />

der Steuerung dies zulässt, das entsprechende Kommando am Funktionsblock<br />

der Achse an. Das Ende des Kommandos zeigt er an einem s<strong>einer</strong><br />

Ausgänge an, worauf das Steuerungsprogramm den Kommandoeingang des<br />

Funktionsblocks zurücksetzt. Der Wert, auf den die Visualisierung die Prozessvariable<br />

setzt ist irrelevant, da es sich um eine reine, ereignisbasierte Triggerfunktion<br />

handelt.<br />

4.3.3 Task ParamTask<br />

Der Task ParamTask dient zur Verwaltung der Steuerungsparameter. Beim<br />

Systemstart liest er die Parameter aus einem Datenmodul 20 und kopiert sie in<br />

den Arbeitsspeicher. Falls das Datenmodul nicht existiert oder nicht lesbar ist,<br />

wird es mit Standardwerten neu erzeugt. Die Visualisierung kann während des<br />

Betriebes auf die Parameter lesend und schreibend zugreifen. Sie sind durch<br />

die Variablenkonfiguration an die UDP-Kommunikation angeschlossen. Da sie<br />

nur bei der Anzeige <strong>einer</strong> Parameterseite benötigt werden, werden die Parameter<br />

nur durch eine Leseanfrage der Visualisierung übertragen. Die Visualisierung<br />

hat auf diese Variablen vollen Schreibzugriff. Diese Art der Anbindung erzeugt<br />

steuerungsseitig keinen zusätzlichen Programmieraufwand, da die Protokollimplementierung<br />

den Zugriff selbstständig abwickelt.<br />

Das Laden und Speichern der Parameter aus dem Datenmodul durch die<br />

Visualisierung funktioniert analog zur Bearbeitung der Kommandos zur Reglerparametrierung.<br />

20 Entspricht <strong>einer</strong> Konfigurationsdatei, die auf der Steuerung abgelegt ist.<br />

47


4.3.4 Task UdpTask<br />

Im UdpTask wird die Netzwerkschnittstelle der Steuerung verwaltet sowie die<br />

Kommunikation zur Visualisierung durchgeführt. Die primäre Aufgabe dieses<br />

Tasks ist das zyklische Aufrufen der UDP-Biblothek zur Verarbeitung von eingehenden<br />

UDP-Paketen und zum Senden von Prozessvariablen. Zur Konfiguration<br />

der Netzwerkschnittstelle enthält der Task eine State-Machine. Dieser<br />

Automat liest nach dem Start der Steuerung die aktuelle IP-Adresse aus und<br />

vergleicht sie mit der IP-Adresse aus den Parametern. Falls sie nicht identisch<br />

sind, werden die Adresse und die Subnetzmaske auf den parametrierten Wert<br />

gesetzt.<br />

Neben der Verwaltung der Netzwerkschnittstelle und dem Aufruf der Kommunikationsbibliothek<br />

wertet der Task Sollwerteingaben von der Visualisierung<br />

aus. Dazu wird, ähnlich zu den Triggern, die Ereignisvariable beobachtet. Zeigt<br />

sie eine Aktualisierung des Sollwertes der Visualisierung an, so überprüft das<br />

Programm den Sollwert und kopiert ihn in eine gespiegelte Sollwertvariable der<br />

Steuerung. Anschließend stößt es das Senden des gespiegelten Sollwertes<br />

durch Setzen der entsprechenden Ereignisvariable an. Innerhalb der Steuerung<br />

werden nur die gespiegelten und überprüften Sollwerte verwendet. So ist sichergestellt,<br />

dass der Benutzer durch ungültige Eingaben keinen Schaden anrichten<br />

kann. Auf die gespiegelten Sollwerte hat die Visualisierung keine schreibenden<br />

Zugriffsrechte.<br />

Um die Istwerte zyklisch an die Visualisierung und an andere Kommunikationsteilnehmer<br />

zu versenden, wird ein Timer genutzt. Mit dessen Hilfe wird die<br />

Übertragung der zyklischen Prozessvariablen an die Visualisierung angestoßen.<br />

Die Heartbeat-Nachrichten werden durch einen ähnlichen Mechanismus<br />

gesendet.<br />

4.3.5 Bibliothek UdpLib<br />

Die vollständige UDP-Kommunikation wird in der Bibliothek UdpLib implementiert.<br />

Als Schnittstelle zur restlichen Software hat sie drei Funktionsblöcke und<br />

zwei Funktionen. Die Funktionsblöcke werden für zyklische Funktionen, zur Initialisierung<br />

und zum Beenden der Bibliothek verwendet. Die Funktionen erlauben<br />

den Zugriff auf die jeweiligen Ereignisvariablen der Prozessvariablen.<br />

48


Jeder Funktionsblock besitzt Ein- und Ausgänge. Die Eingänge werden durch<br />

die Applikationssoftware gesetzt. Anschließend ruft sie den Funktionsblock auf.<br />

Über die Ausgänge wird die Applikationssoftware über den Status des Funktionsblocks<br />

informiert. Das Konzept des Funktionsblocks entspricht in etwa dem<br />

<strong>einer</strong> Klasse in der objektorientierten Programmierung. Die Anwendung erstellt<br />

zur Laufzeit eine Instanz des Funktionsblocks, was der Instanziierung <strong>einer</strong><br />

Klasse entspricht.<br />

Name Richtung Beschreibung<br />

ConfigFile IN Pfad zur Konfigurationsdatei für Variablenanschlüsse<br />

LocalIp IN IP-Adresse der Netzwerkschnittstelle zur Visualisierung<br />

GroupIp IN Adresse der Multicastgruppe<br />

GroupPort IN Port, an den die Multicastpakete gesendet werden<br />

PvCount IN Maximale Anzahl an Prozessvariablen, die angeschlossen<br />

werden können.<br />

Handle OUT Ein Handle, der den weiteren FUBs 21 der Bibliothek<br />

übergeben werden muss.<br />

Tabelle 8: Funktionsblock UdpInit<br />

Der FUB UdpInit initialisiert die Bibliothek. Er muss einmal während der<br />

INIT-Phase des Tasks aufgerufen werden. Die Bibliothek führt während der Initialisierung<br />

Speicheroperation aus, die im zyklischen Teil des Tasks zu Zykluszeitverletzungen<br />

führen könnten. Er bekommt als Eingangsdaten den vollständigen<br />

Pfad zur Konfigurationsdatei, die IP der mit der Visualisierung verbundenen<br />

der Netzwerkschnittstelle, die Multicast-IP und den Multicast-Port für die<br />

Kommunikation zur Visualisierung. Diese Einstellungen müssen sowohl in der<br />

Visualisierung als auch in allen angeschlossenen Steuerungen identisch gesetzt<br />

sein. Während der Initialisierung liest die Bibliothek die Konfigurationsdatei<br />

und schließt die Prozessvariablen in der Steuerung an. Falls eine Variable aus<br />

der Konfigurationsdatei innerhalb der Steuerungssoftware nicht gefunden wer-<br />

21 Funktionsblock<br />

49


den kann, wird im Systemlog eine Warnmeldung ausgegeben und die Bibliothek<br />

überspringt die Variable. Ebenso verhält sie sich, wenn eine Zeile der Konfigurationsdatei<br />

ein ungültiges Format aufweist. Nach erfolgreichem Anschließen<br />

der Prozessvariablen und dem Öffnen des UDP-Sockets liefert der Funktionsblock<br />

auf dem Ausgang handle einen Wert ungleich 0 zurück.<br />

Name Richtung Beschreibung<br />

Handle IN Handle von UdpInit<br />

Tabelle 9: Funktionsblock UdpCyclic<br />

Im zyklischen Teil des Tasks muss der Funktionsblock UdpCyclic aufgerufen<br />

werden. Er nimmt nur den Handle des FUB UdpInit als Eingang entgegen,<br />

liefert jedoch keine Statusinformationen zurück<br />

Name Richtung Beschreibung<br />

Handle IN Handle von UdpInit<br />

Tabelle 10: Funktionsblock UdpExit<br />

Damit die Bibliothek z.B. beim Neuladen des Tasks in der Steuerung neu<br />

initialisiert werden kann, muss sie korrekt beendet werden. Dazu muss der Task<br />

in s<strong>einer</strong> Exit-Funktion den Funktionsblock UdpExit aufrufen. Er nimmt ebenfalls<br />

als Eingang nur den Handle des FUB UdpInit entgegen.<br />

4.3.6 Implementierung der Kommunikation<br />

Die Kommunikationsbibliothek beinhaltet eine Liste mit allen angeschlossenen<br />

Prozessvariablen aus der Konfigurationsdatei. Die Liste enthält für jede Variable<br />

die Kombination aus ID und SRC-Kennung, einen Zeiger auf die Prozessvariable<br />

im Speicher der Steuerung, die Länge der Prozessvariablen in der Steuerung<br />

sowie die Ereignisvariable. Um die Adressen der Prozessvariablen im Speicher<br />

der Steuerung zu finden wird eine Funktion des Betriebssystems der Steuerung<br />

genutzt. Sie erlaubt das Auflösen von Variablennamen in Speicheradressen.<br />

Während der Initialisierung der Bibliothek öffnet sie einen UDP-Socket.<br />

Dieser wird für das Senden und Empfangen von Multicast-Nachrichten konfigu-<br />

50


iert. Anschließend erzeugt die Bibliothek die Variablenliste aus der Konfigurationsdatei.<br />

Dabei wird im Speicher eine Struktur angelegt, die den vollständigen<br />

Zustand der Bibliothek enthält. Durch diesen Aufbau ist es möglich, mit mehreren<br />

Instanzen der Bibliothek eine Steuerung in mehreren Multicastnetzen zu<br />

verwenden.<br />

Die bekannte Socketschnittstelle bildet die Netzwerkbibliothek des Steuerungsbetriebssystems<br />

auf Funktionsblöcke ab. Es existieren Funktionsblöcke<br />

zum Versenden und Empfangen von UDP-Nachichten. Die Eingänge der FUBs<br />

entsprechen im Allgemeinen den Parametern der send() und receive()-<br />

Funktionen der POSIX-API [5]. Zur Vermeidung von Zykluszeitverletzungen<br />

arbeiten die Funktionsblöcke asynchron zum aufrufenden Task. Aus diesem<br />

Grund muss der Funktionsblock für mindestens zwei Taskzyklen aufgerufen<br />

werden, bevor er einen Status (Erfolg oder Fehler) zurückliefert. Die Bibliothek<br />

kann deswegen nur in jedem zweiten Taskzyklus ein Paket versenden. Es ist<br />

möglich, mehrere dieser Funktionsblöcke parallel auf einem Socket zu verwenden,<br />

was aber bei konsequenter Umsetzung zu einem höheren Implementierungsaufwand<br />

führen würde. Aus diesem Grund verwendet die Bibliothek zu<br />

Zeit einen Funktionsblock zum Versenden der Unicastnachrichten zu den Visualisierungsclients<br />

und einen weiteren zum Versenden von zyklischen Multicastnachrichten.<br />

Das Senden von zyklischen Daten beeinflusst auf diese Weise<br />

nicht die direkte Kommunikation zu den Clients.<br />

Die Bibliothek durchsucht in jedem Taskzyklus das Prozessvariablenverzeichnis<br />

nach Variablen, bei denen die Ereignisvariable auf den Wert<br />

mcastSEND gesetzt wurde. Findet sie eine Variable mit gesetztem Flag, erzeugt<br />

sie ein UDP-Paket mit den Daten und übergibt es an den Funktionsblock<br />

zum Versenden von zyklischen Prozessdaten. Anschließend setzt sie die Ereignisvariable<br />

zurück. Dieser Sendevorgang dauert mindestens zwei<br />

Taskzyklen, kann abhängig von der Netzwerkauslastung und der Auslastung<br />

der Steuerung auch länger dauern.<br />

Für die Kommunikation mit den Clients wird ein Funktionsblock zum Empfangen<br />

von UDP-Paketen verwendet. Dieser schreibt empfangene Pakete in<br />

einen von der Anwendung bereitgestellten Puffer und signalisiert den Empfang<br />

eines Paketes über seine Statusausgänge. Die Bibliothek wertet die empfangenen<br />

Daten dann anhand des Typenfeldes des Paketes aus und reagiert mit ei-<br />

51


ner entsprechenden Aktion. Nachdem die Anfrage bearbeitet wurde, wird eine<br />

Unicast-Antwort an den Client zurückgesendet. Die IP-Adresse des Clients wird<br />

im IP-Header des Anfragepaketes mit übertragen und steht der Protokollimplementierung<br />

so als Zieladresse für die Antwort zur Verfügung. Da dieser Teil der<br />

Bibliothek bereits eine neue Clientanfrage entgegen nehmen kann während die<br />

vorherige noch gesendet wird, kann unter optimalen Bedingungen in jedem<br />

Taskzyklus eine Anfrage bearbeitet werden.<br />

Abb. 30: Zyklischer Datendurchsatz vs. Zykluszeit<br />

Durch die Einschränkung der Sendegeschwindigkeit muss der Task, der den<br />

zyklischen Teil der Bibliothek aufruft, mit <strong>einer</strong> relativ kurzen Zykluszeit ausgeführt<br />

werden. Dies stellt für den Moment kein Problem dar, da ein einzelner Aufruf<br />

der Bibliothek im Durchschnitt 29µs dauert.<br />

Abb. 31: CPU-Auslastung vs. Zykluszeit<br />

52


Die Anwendung für den Teststand sendet relativ wenig zyklische Daten (~22<br />

Prozessvariablen/Sekunde). Aus diesem Grund wurde hier die einfachere Lösung<br />

gewählt. Für weitere Anwendungen sollte die Bibliothek aber auf bessere<br />

Senderaten und auf Effizienz optimiert werden.<br />

4.3.7 Visualisierungsrechner<br />

Bei dem Rechner, der zur Darstellung der Visualisierung verwendet wird, handelt<br />

es sich um einen Provit 5000 Industrie-PC der Firma B&R. Es sind ein Pentium<br />

3 mit 600 MHz sowie 256 MB Arbeitsspeicher verbaut. Als Betriebssystem<br />

wird Microsoft Windows XP Professional verwendet, zur Anzeige der Visualisierung<br />

dient der Microsoft Internet Explorer 8.<br />

Im Autostart des Betriebssystems befindet sich ein Skript, das einen Startbildschirm<br />

anzeigt, den Internet Explorer im Kiosk-Modus startet und die Visualisierung<br />

anzeigt. Durch den Kioskmodus zeigt der Browser die Visualisierung ohne<br />

Fensterrahmen und ohne Startleiste im Vollbildmodus, wodurch bei dem Benutzer<br />

der Eindruck <strong>einer</strong> integrierten Bedienoberfläche vermittelt wird.<br />

53


5 Ausblick<br />

Der Inhalt dieser Arbeit stellt lediglich die Grundlage für ein mögliches Visualisierungssystem<br />

dar. Wenn das System auf den Betrieb mit mehreren Steuerungen<br />

ausgeweitet werden soll, können einige Funktionen wie z.B. die Verwaltung<br />

der Alarmmeldungen nicht mehr auf <strong>einer</strong> Steuerung implementiert werden.<br />

Derartige steuerungsübergreifende Funktionen sollten daher auf einem<br />

eigenen Kommunikationsknoten betrieben werden, der mit den anderen Steuerungen<br />

über das UDP-Protokoll kommuniziert. Ein solcher Kommunikationsknoten<br />

könnte beispielsweise eine dedizierte Steuerung sein. Für diesen Zweck<br />

kann auch eine Anwendung auf dem Leitrechner verwendet werden, da sie weniger<br />

harte Echtzeitanforderungen als die Steuerungssoftware erfüllen muss.<br />

Die Software würde gegenüber dem restlichen System teilweise wie ein Client<br />

und teilweise wie ein Server auftreten. Einerseits stellt die Anwendung den Visualisierungen<br />

Informationen zur Verfügung, andererseits liest sie Daten von<br />

den einzelnen Steuerungen und verarbeitet sie. Neben der Verarbeitung von<br />

Daten könnte diese Anwendung auch weitere Funktionen wie das Aufzeichnen<br />

von Betriebsdaten über längere Zeiträume übernehmen.<br />

Für ein derartiges Programm würde sich eine Architektur aus einem Grundprogramm,<br />

das die Kommunikation zum Rest des Systems herstellt und <strong>einer</strong> Reihe<br />

von Plugins, die die eigentliche Funktionalität bereitstellen, bestehen. Über<br />

die Konfiguration der einzelnen Plugins kann die Anwendung auf Kundenwünsche<br />

abgestimmt werden, ohne Funktionen auszuliefern, die nicht vom Kunden<br />

erworben wurden. Ein weiterer Vorteil dieser modularen Architektur ist die klare<br />

Trennung der Funktionalitäten durch die Plugins.<br />

Da gerade in der Druckindustrie oft Bilddaten in der Prozessvisualisierung angezeigt<br />

werden müssen, ist hier ebenfalls noch Verbesserungspotential zu sehen.<br />

Es besteht die Möglichkeit mit einem weiteren Java-Applet Videodaten aus<br />

einem Echtzeit-Multicaststream anzuzeigen. Dieses Applet kann als Bedienelement<br />

in die Visualisierung eingebettet werden. Hier zeigt sich der große Vorteil<br />

den mehrere, unabhängige Multicastnetzwerke bieten. Eines kann für die<br />

Prozessdaten genutzt werden und ein weiteres z.B. für Bildinformationen. Die<br />

verschiedenen Multicastnetzwerke können parallel existieren ohne sich gegenseitig<br />

zu beeinflussen.<br />

54


6 Abbildungsverzeichnis<br />

Abb. 1: Struktur der Prozessvisualisierung ..........................................................1<br />

Abb. 2: Abbildung <strong>einer</strong> Flexodruckmaschine......................................................2<br />

Abb. 3: Ebenenmodelle der Prozessführung .......................................................3<br />

Abb. 4: Netzwerkarchitektur des aktuellen Leitsystems ......................................5<br />

Abb. 5: Kommunikationsmodell im CAN-Bus.......................................................9<br />

Abb. 6: Architektur der Visualisierung................................................................12<br />

Abb. 7: Grundstruktur eines Bedienbildes .........................................................13<br />

Abb. 8: Klassenbaum der Bedienelemente........................................................17<br />

Abb. 9: Klassenstruktur eines Bedienbildes.......................................................19<br />

Abb. 10: Sequenzdiagramm zur Bilderzeugung ................................................21<br />

Abb. 11: Kommunikation via Java-Applet ..........................................................22<br />

Abb. 12: Adressumsetzung von IPv4 nach Ethernet-Multicast..........................26<br />

Abb. 13: UDP-Multicast Kommunikationsmodell ...............................................27<br />

Abb. 14: CYCLIC Paket (Server => Multicast => Client) ...................................30<br />

Abb. 15: WRITE Paket (Client => Multicast => Server).....................................30<br />

Abb. 16: WRITE_ACK Paket (Server => Client)................................................30<br />

Abb. 17: READ Paket (Client => Multicast => Server) ......................................30<br />

Abb. 18: READ_ACK Paket (Server => Client)..................................................30<br />

Abb. 19: Klassendiagramm des Java-Applets ...................................................32<br />

Abb. 20: Sequenzdiagramm der Datenübertragung ..........................................33<br />

Abb. 21: Kommunikation über Ereignisvariablen...............................................35<br />

Abb. 22: Verarbeitung von Sollwerten und Aktionen .........................................35<br />

Abb. 23: Datenspeicherung für Bedienseiten ....................................................36<br />

Abb. 24: CAD-Rendering des Teststandes........................................................38<br />

Abb. 25: Steuerungsarchitektur des Teststandes..............................................39<br />

Abb. 26: Hauptbedienbild des Teststands .........................................................41<br />

Abb. 27: Parameterbild für allgemeine Parameter.............................................42<br />

Abb. 28: Parameterbild für die Antriebsregelung...............................................43<br />

Abb. 29: Zustandsdiagramm „AchsTask“...........................................................46<br />

Abb. 30: Zyklischer Datendurchsatz vs. Zykluszeit ...........................................52<br />

Abb. 31: CPU-Auslastung vs. Zykluszeit ...........................................................52<br />

55


7 Tabellenverzeichnis<br />

Tabelle 1: Tags in der Bilddefinitionsdatei .........................................................16<br />

Tabelle 2: UDP-Pakettypen................................................................................29<br />

Tabelle 3: Datentypen für die Kommunikation zur Visualisierung .....................31<br />

Tabelle 4: Verzeichnisstruktur der Visualisierung..............................................37<br />

Tabelle 5: Taster zur Bedienung des Teststands ..............................................40<br />

Tabelle 6: Steuerungstasks................................................................................44<br />

Tabelle 7: Bibliotheken.......................................................................................45<br />

Tabelle 8: Funktionsblock UdpInit......................................................................49<br />

Tabelle 9: Funktionsblock UdpCyclic .................................................................50<br />

Tabelle 10: Funktionsblock UdpExit...................................................................50<br />

56


8 Quellenverzeichnis<br />

1. Heidepriem (2000): Prozessinformatik I: Grundzüge der Informatik, München,<br />

1. Auflage, Seite 72ff.<br />

2. Schnell, Wiedemann (2006): Bussysteme in der Automatisierungs- und<br />

Prozesstechnik, 6. Auflage, Seite 120-121<br />

3. Langmann (2004): Taschenbuch der Automatisierung, Leipzig, Seite 431ff.<br />

4. Panda, Stunkel (1997): Communication and architectural support for network-based<br />

parallel computing, San Antonio, Texas, USA, Seite<br />

73ff<br />

5. The Open Group, The IEEE (2008): The Open Group Base Specifications<br />

Issue 7<br />

6. http://de.selfhtml.org/javascript/objekte/node.htm<br />

(Stand: 16. August 2010)<br />

7. http://molily.de/js/sicherheit.html#same-origin-policy<br />

(Stand: 22. August 2010)<br />

8. Flanagan (2007): Javascript: Das umfassende Referenzwerk<br />

Köln, 3. Auflage, Seite 155ff.<br />

9. Oaks (2001): Java security<br />

Sebastopol, California, USA, 2. Auflage, Seite 10ff.<br />

10. Deering (1989): RFC1112: Host Extensions for IP Multicasting<br />

57

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!