Entwicklung einer dezentralen, webbasierten ... - Lab4Inf
Entwicklung einer dezentralen, webbasierten ... - Lab4Inf
Entwicklung einer dezentralen, webbasierten ... - Lab4Inf
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