Sie sind auf Seite 1von 3

Serie Objektorientiertes Programmieren Teil 1

Go to OOP
Der logische Weg vom funktionalen zum
objektorientierten Programmieren - Teil 1
Die Beschreibung von Ablufen mit Hilfe von Programmen ist nichts Neues. Schon Grabinschriften der alten
gypter enthielten einen Programmcode, z.B. fr die Fortbewegung einer Statue. Zugegeben: Deren Pro-
grammiersprache ist weder standardisiert, noch leicht zu verstehen. Im Vergleich dazu ist es fr Program-
mierer von Industriesteuerungen ein Leichtes, ihr Anliegen zu kodieren - die funktionale Programmierung
in grafischen bzw. textuellen Sprachen der IEC61131-3 ist sauber standardisiert.

D
ennoch findet eine stetige wurden so erfolgreich realisiert. Pro- setzen erste Forderungen zur struk-
Weiterentwicklung der Pro- blematisch wird es, wenn Fehler in turierten Programmierung um, wie
grammierung statt - meist in einem solchen Programmcode ge- sie der niederlndische Informatiker
logischen Schritten, die den Workflow sucht werden mssen, oder wenn die Edsger Dijkstra (1930-2002) aufge-
bei der Applikationsprogrammierung Applikation angepasst werden soll. stellt hat (Go To Statement Conside-
optimieren. Im Rahmen dieser Be- Auch ist es mhsam, Teile des Pro- red Harmfulm, 1968 sowie Structu-
trachtung wird Ihnen am Beispiel grammcodes fr andere Applikatio- red Programming, 1972). Im Beispiel
einer einfachen Timer-Applikation er- nen wiederzuverwenden. Sptestens unserer Aufgabe werden dazu ver-
lutert, wie dabei der natrliche dann beginnen SPS-Programmierer schiedene Timer als Instanz einer
Weg von der funktionalen zur objekt- darber nachzudenken, wie sie Ihre Struktur deklariert. Darber hinaus
orientierten Programmierung fhrt. Applikation verbessern knnen. erfolgt die Bearbeitung mit Hilfe von
speziellen Funktionen, wie z.B. My-
Der Einstieg - oder Wie wir 1. Verbesserungsschritt: ClockGetTime, MyClockSetTime, My-
(fast) alle mal begonnen haben Strukturierung der Daten ClockStartTime, MyClockStopTime.
und deren Verwendung Damit wird die Verwendung unter-
Alle Daten in einer groen globalen schiedlicher Timer bereits deutlich
Variablen-Liste deklarieren, im Pro- Die IEC61131-3 definiert mchtige vereinfacht, weil jeder Funktionsauf-
grammcode munter darauf zugreifen, Hilfsmittel zur Strukturierung: z.B. ruf seine eigenen Daten bergeben
vielleicht sogar aus einem einzigen Funktionen (Fun), die der Program- bekommt bzw. zurckliefert. Aller-
Programmbaustein - das ist ein Pro- mierer fr abgegrenzte Aufgaben mit dings muss die Datenbergabe mit
grammierstil, der pragmatisch zum einem Rckgabe-Wert von Hauptrou- dem exakten Datentyp erfolgen.
Ziel fhrt und deswegen auch heute tinen beliebig aufrufen kann. Oder Auch ist es nicht mglich, alternati-
nicht vollstndig ausgestorben ist. Strukturen (Struct) zum Zusammen- ven Code whrend der Ausfhrung
Dafr spricht: Viele SPS-Applikationen fassen von Variablen. Diese Mittel zu verwenden.

30 SPS-Magazin Ausgabe 9/2012


Serie Objektorientiertes Programmieren Teil 1

Bild 2: Quick-and-Dirty: Unstrukturierte Programmierung mit einer globa-


len Variablenliste, auf die der Programmcode munter zugreift.

2. Verbesserungsschritt:
Zusammenfassung von Daten und Code in
Funktionsbausteinen (FB)

Im ersten Schritt waren Daten und Code noch ohne erkennbaren


Bezug zueinander strukturiert. Mit Funktionsbausteinen nach
IEC61131-3 kann der Applikationsprogrammierer seine Daten-
struktur zusammen mit deren Ausfhrung erstellen. Die eigentli-
che Datenallokation erfolgt bei der Instanziierung eines FBs. Mit
jeder Instanz wird somit ein unabhngiger Datensatz angelegt, der
vom identischen Programmcode bearbeitet wird. Durch die De-
klaration von Eingangs- (VAR_Input) und Ausgangsvariablen
(VAR_Output) ist es mglich, auf die Daten innerhalb der Instanz
zuzugreifen. Instanzen knnen einzeln, aber auch als Arrays an-
gelegt und somit weiter strukturiert werden. Nachteil vom FB: Um
die Abarbeitung flexibel durchfhren zu knnen, sind mitunter
zahlreiche VAR_Inputs erforderlich, die wiederum dem exakten Typ
der VAR_Input-Variablen entsprechen mssen. Sollen innerhalb des
FBs alternative Programm-Sequenzen durchlaufen werden, so ist
zustzlicher Programmcode zur Verzweigung erforderlich, der
nicht zur eigentlichen Funktion gehrt.

3. Verbesserungsschritt: FBs mit Aktionen

Aktionen von FBs beseitigen einen Teil dieser Nachteile. Sie wurden
von den Vtern der IEC61131-3 zwar eigentlich fr Objekte vorge-
sehen, die in Ablaufsprache erstellt werden. Deren Erweiterung auf
alle FBs hat sich im IEC61131-3 Programmiersystem CoDeSys aber
seit vielen Jahren bewhrt: Zustzlich zu den oben beschriebenen
Standard-Eigenschaften von FBs kann die Applikation diese Aktionen
vom FB oder aber bergeordneten Bausteinen direkt aufrufen. Das
heit: Der Aktions-code wird auf den Daten der FB-Instanz ausge-
fhrt, allerdings unabhngig von anderen Aktionen oder dem Code
im Rumpf des FB. Mit den verfgbaren Aktionen knnen somit un-
terschiedliche Ausfhrungsvarianten eines Objekts definiert werden.
Mit dem Aufruf wird somit entschieden, welche Aktion und damit
welche Variante ausgefhrt werden soll. Verzweigungen fr unter-
schiedliche Aufgaben sind in der Aktion nicht mehr erforderlich. Al-
lerdings ermglichen Aktionen keine Eingangsdaten (VAR_Input).
Auch ist es nicht mglich, identischen Code innerhalb von Aktionen
fr unterschiedliche FBs zu verwenden.

4. Verbesserungsschritt: FBs mit Methoden

Methoden sind Bausteine, die so in der IEC61131-3 ursprnglich


nicht definiert waren. Wie auch Aktionen, sind Methoden nichts
anderes als Funktionen, die einem FB zugeordnet sind. Sie knnen
allerdings jetzt eigene Parameter haben, um deren Ausfhrung
noch flexibler und unabhngiger voneinander zu gestalten.
Serie Objektorientiertes Programmieren Teil 1

ser Einwand ist natrlich berechtigt.


Aber anders als beim normalen FB
kann der Zugriff nun z.B. in Arrays
auch ber die implementierte Schnitt-
stelle erfolgen. Das heit: Beim ei-
gentlichen Aufruf der Methode spielt
es keine Rolle mehr, von welcher In-
stanz und mit welcher konkreten Im-
plementierung er vorgenommen wird.
Bild 3: Aktionen als Kinder eines FB knnen vom Rumpf des FB sowie von auen aufge- Diese Zuordnung erfolgt mit dem
rufen und arbeiten auf den Daten des FB. Auffllen des Arrays als Feld vom Da-
tentyp Interface. Und das ist natrlich
eine extreme Vereinfachung, wenn
5. Verbesserungsschritt: FB rufen werden. Beispiele dafr gibt es eine grere Menge von Methoden
implementiert Interface(s) in der Automatisierung zur Genge: hnlichen Typs, aber unterschiedlicher
konkreter Umsetzung aufgerufen
Schon Methoden sind neue Objekte Alle Antriebe (unabhngig von Hersteller, werden soll.
Busanbindung, Leistungsklasse) unterstt-
in der IEC61131-3, deren Nutzen sich
zen Funktionen wie Homing, Reset oder
recht einfach erschliet. Mit dem Fahren auf Zielposition. Weitere Schritte
nchsten neuen Objekt Interface be- Jeder Feldbus hat Funktionen zum
geben wir uns nun endgltig in die Datenversand und -empfang. Mit Interfaces und Methoden hat
objektorientierte Programmierung. Im Die meisten mechatronischen Einheiten man die OOP aber bei Weitem nicht
mssen per Software eingeschaltet (enab-
Gegensatz zu den Programmen, led) werden und liefern ein Diagnosesignal
ausgereizt. Warum sollte man Metho-
Funktionsbausteinen, Funktionen, Ak- zurck. den nicht in anderen FBs wiederver-
tionen und Methoden enthalten In- wenden? Was ist mit Eigenschaften
terfaces keinen Code. Wofr bentigt (Properties) von FBs? Welche weiteren
man sie dann? Wie der Name schon Mit der zentralen Definition eines In- Mglichkeiten lassen sich aus dieser
sagt, handelt es sich dabei um die Be- terfaces kann der Programmierer si- Denkweise ableiten? Fortsetzung
schreibung einer Schnittstelle fr den cherstellen, dass keine Funktion fr folgt...
Aufruf von Methoden. Diese Be- den FB vergessen wird. Sollte das In-
schreibung ist an einer Stelle einheit- terface verndert oder erweitert wer- Fazit
lich festlegt. Das bedeutet: Ein Inter- den mssen, so geschieht das an
face definiert einen Satz von Metho- einer zentralen Stelle. Auch ber- Der logische Weg, der bei der Opti-
den und deren Aufrufparameter. wacht der Compiler, dass die Imple- mierung des Programmierstils einge-
Dabei sind die Methoden im Interface mentierung z.B. einer hinzugefgten schlagen wurde, fhrt zur OOP - und
selbst leer - es soll ja kein Code, son- Methode wirklich vorgenommen er lsst sich noch weitergehen, ohne
dern nur die Schnittstelle definiert wurde. Ein noch grerer Vorteil: die vertraute Oberflche der
werden. Implementiert nun ein FB ein Durch die Implementierung von Inter- IEC61131-3 verlassen zu mssen!
oder mehrere Interfaces, so mssen faces in unterschiedlichen Einheiten Schlielich werden alle beschriebenen
alle im Interface definierten Metho- knnen natrlich die Implementierun- Eigenschaften in der dritten Revision
den fr diesen FB ausprogrammiert gen der Methoden ganz individuell der Norm bereits enthalten sein.
werden. Das hat mehrere Vorteile: Ei- erfolgen. Dennoch bleibt der Aufruf
nerseits kann man durch Definition der Methoden identisch. Moment
des Interfaces die Aufrufschnittstelle mal!, mag der fachkundige Leser
fr einen FB an einer Stelle einheitlich dieser Zeilen jetzt einwenden, Ich
Bild 4: Das Interface IClock definieren. Das ist insbesondere dann muss ja die Methode als Teil einer FB- www.3s-software.com
wird vom FB implemen-
interessant, wenn es mehrere unter- Instanz aufrufen! Dadurch ndert sich
tiert, die Methoden des In-
terfaces werden im FB aus- schiedliche Einheiten in einer Appli- zwar der Methodenaufruf nicht, er
programmiert. kation gibt, die aber identisch aufge- enthlt aber den Instanznamen! Die-

Autor: Dipl. Ing. (FH) Ro-


land Wagner ist Marketing
Manager bei 3S-Smart
Software Solutions GmbH

Autor: Igor Petrov ist


Technischer Leiter bei Pro-
log in Smolesnk

32 SPS-Magazin Ausgabe 9/2012