\’Polymorphie\‘ – was sich für Menschen ohne Kenntnisse der Hochsprachenprogrammierung erst einmal anhört wie eine seltene Erkrankung, ist eine nützliche Eigenschaft der objektorientierten Programmierung. Sie ermöglicht das dynamische Binden von Programmcode. Im ersten Teil der Artikelserie wurde diese Eigenschaft bereits kurz angerissen, deren Nutzen nachfolgend erläutert wird. Liefervarianten einer Maschinenreihe per Interface Ein Applikationsprogrammierer entwickelt ein SPS-Programm, das ohne große Änderungen auf verschiedenen Liefervarianten einer Maschinenserie verwendet werden soll. In allen Varianten werden Antriebe von der SPS angesteuert. Allerdings entscheidet der Endkunde z.B. aufgrund von Leistungsdaten oder Kenntnisstand seines Wartungspersonals, welche Antriebsmodelle letztlich eingesetzt werden. Trotz der Unterschiede verfügen alle Antriebe über Funktionen wie \’HomePosition\‘, \’HasError\‘ oder \’MoveAbsolute\‘. Schreibt der Applikationsprogrammierer sein Programm wie bisher funktional, so muss er für jede Variante der Maschine sämtliche Funktionsaufrufe anpassen, die auf die Antriebe zugreifen. Mit den Möglichkeiten der OOP kann er jedoch Arbeit und Fehlerquellen reduzieren. Dazu definiert er alle einheitlichen Aufruf-Funktionen für die verwendeten Antriebe als Methoden in einem Interface. Das Interface enthält für jede Methode nur dessen Aufrufschnittstelle, also Inputs und Outputs, aber keine lokalen Variablen und keinen Code. Mit spezifischem Programmcode füllen wird der Programmierer die Methoden, wenn er sie in einem Funktionsbaustein mit dem neuen Schlüsselwort Implements einbindet. Der Funktionsbaustein wird damit zur \’Klasse\‘ im Sinne der OOP. Die erforderliche Instanziierung der Funktionsbausteine nimmt der Programmierer typischerweise in einem übergeordneten Baustein vor, der diese Instanzen zentral verwaltet. Dynamisches Binden über ein Array Wie in Bild 1 können mehrere solche Instanzen (\’Objekte\‘) in einem Array zusammengefasst werden. Überraschend dabei: Der Datentyp des Arrays muss nicht mehr BOOL, INT bzw. ein Funktionsbaustein, sondern kann jetzt ein Interface sein – im Beispiel das Interface iDrive. Somit kann das Array faktisch mit ganz unterschiedlichen Inhalten gefüllt werden – je nach instanziiertem Funktionsbaustein. In Bild 1 werden die einzelnen Felder des Arrays gleich bei der Deklaration gefüllt – mit Instanzen unterschiedlicher Funktionsbausteine für die verschiedenen Antriebe. Über das Array kann der Programmierer indiziert per Schleife auf die Methoden in den FB-Instanzen zugreifen. Dabei ist es erst einmal egal, welche Methoden letztlich wirklich aufgerufen werden – die Zuordnung erfolgte über die Füllung des Array. Damit wird der eigentliche Methoden-Aufruf dynamisch gebunden. Verwendet die nächste Maschinenvariante andere Antriebe als die in Bild 1 definierten, so muss der Applikationsprogrammierer im Deklarationsteil des Hauptbausteins nur die verwendeten FB-Instanzen für die neu einzusetzenden Funktionsbausteine deklarieren. Eine Änderung der Methoden-Aufrufe ist nicht mehr erforderlich! Dynamisches Binden über einen Funktionsbaustein Statt die Methoden über ein Array dynamisch aufzurufen, kann der Programmierer auch einen weiteren Funktionsbaustein erstellen. Dieser bekommt als Eingangsparameter ein Interface übergeben. So weiß der FB CheckDriveError in Bild 3, dass er die Methode HasError aufrufen wird. Den gewünschten FB bzw. die Klasse, in der die Methode aufgerufen wird, übergibt der Programmierer als Instanz des Antriebs, z.B. wiederum bei Aufruf aus dem Hauptbaustein. Auch bei dieser Vorgehensweise kann der Programmierer die verwendeten Antriebe zentral an einer Stelle ändern, ohne dass er sämtliche Aufrufe im Projekt mühsam durchforsten muss. Wiederverwenden von Methoden – Vererbung Betrachten wir noch einmal die Funktionsbausteine für die spezifischen Funktionen der Antriebe. Je nach den Antriebseigenschaften muss der Applikationsentwickler alle erforderlichen Methoden einzeln ausprogrammieren. Oftmals haben ähnliche Antriebe vom gleichen Hersteller jedoch identische Basis-Funktionen, z.B. zur Fehlerabfrage oder Homing. Ist das der Fall, so möchte man diese identischen Funktionen auch weiterverwenden. In der OOP wird genau dieser Wunsch durch die Vererbung erfüllt. Dazu legt der Programmierer einen neuen Funktionsbaustein an, der einen bestehenden Baustein (eine \’Basisklasse\‘) mit dem neuen Schlüsselwort Extends erweitert. Dieses neue Objekt verfügt damit sofort über alle Methoden der Basisklasse, ohne dass sie noch einmal im Objektbaum als Kind angezeigt werden. Das Objekt kann seinerseits weitere Interfaces implementieren bzw. eigene Methoden zugewiesen bekommen. Typischerweise werden aber nicht alle Methoden von CANopen_DriveC identisch mit CANopen_DriveA sein. So muss z.B. die Methode \’MoveAbsolute\‘ anders ausgeführt werden. Dazu kann der Applikationsentwickler für CANopen_DriveC die Methode \’MoveAbsolute\‘ anlegen, die ursprünglich bereits durch die Vererbung definiert war, und sie entsprechend ausprogrammieren. Die ursprünglich geerbte Methode wird damit überschrieben und ist für diesen Funktionsbaustein nicht mehr gültig. Geerbten und spezifischen Programmcode kann der Programmierer elegant miteinander verknüpfen: Wie in Bild 4 legt er dazu eine neue Methode an und überschreibt damit die geerbte. Im Programmcode der neuen Methode ruft er aber mit dem Befehl Super^.MoveAbsolute(); zunächst einmal den Code der überschriebenen Methode auf. Anschließend erweitert er die Abarbeitung um den spezifischen Programmcode. Fazit Diese einfachen Beispiele machen deutlich: Die OOP ist nützlich, um Applikationssoftware modular und wiederverwendbar zu gestalten. Das gilt für die Programmierung in Hochsprachen genauso wie für die Programmierung von Steuerungen in der Automatisierungstechnik. Automatisierer können mit CoDeSys ihre SPS-Applikationen heute schon objektorientiert in IEC61131-3 programmieren – wenn sie das wollen. Es bleiben jedoch Fragen: Wie kann man Daten und Funktionen so kapseln, dass sie nicht versehentlich verändert werden? Wie kann man den Code im Rumpf eines Funktionsbausteins innerhalb einer Methode verwenden? Fortsetzung folgt.
Von der OOP in der IEC61131-3 profitieren
-
Auftragsbestand im Verarbeitenden Gewerbe im Februar: +1,0% zum Vormonat
Der reale (preisbereinigte) Auftragsbestand im Verarbeitenden Gewerbe ist nach vorläufigen Ergebnissen des Statistischen Bundesamtes im Februar gegenüber Januar saison- und kalenderbereinigt um 1,0% gestiegen.
-
Vorsprung im Packaging
Automatisierungstechnik von Beckhoff ermöglicht die effiziente Entwicklung ressourcenschonender Verpackungsmaschinen, verkürzt Konstruktionszeiten und senkt Kosten – für innovative Lösungen und nachhaltige Produktionsprozesse.
-
Seit 18 Monaten: Stillstand beim Frauenanteil in den Vorständen
Am 1. März waren die Vorstände der 160 deutschen Börsenunternehmen in DAX, MDAX und SDAX mit 554 Männern und 136 Frauen besetzt.
-
UL Solutions zertifiziert Cyberresilienz von Ethercat
Das Gutachten und die Zertifikate von UL Solutions bestätigen nach Prüfung gemäß IEC62443 die Aussagen der ETG: Die Ethercat-Technologie erfüllt bereits ohne Änderungen die Anforderungen an Systeme, die…
-
Volker Frey neuer CTO bei IFM
Zum 1. Mai gibt es in der Führungsspitze der IFM-Unternehmensgruppe personelle Veränderungen.
-
B&R und ABB trauern um CEO
B&R und ABB trauern um Florian Schneeberger, Division President von Machine Automation (B&R),…
-
Anzeige
Vorsprung im Packaging
Automatisierungstechnik von Beckhoff ermöglicht die effiziente Entwicklung ressourcenschonender Verpackungsmaschinen, verkürzt Konstruktionszeiten und senkt…
-
Sick steigert Umsatz um 6,5%
Der Umsatz von Sick im Geschäftsjahr 2025 stieg trotz des herausforderndem Marktumfelds an…
-
Neuwahlen der PNO
Am ersten Tag der Hannovermesse fand die jährliche Mitgliederversammlung der Profibus Nutzerorganisation statt.…
-
Physical AI live erleben: Beckhoff auf der HMI 2026
Die Verschmelzung von künstlicher Intelligenz und klassischer Maschinensteuerung als Basis für Physical AI…
-
Ermöglicht zwei Synchronbewegungen
Antriebssystem für Logistik
Das Antriebssystem DualGear von Faulhaber wurde gezielt für Anwendungen in Förderbändern sowie in…
-
Zukunftssichere Maschinenvisualisierung
Webbasiertes HMI
Weidmüller kombiniert die Touchpanelserie U-View Advanced V2 sowie das Web-HMI Procon-Web ES zu…
-
75-jähriges Jubiläum 2026
Wago startet mit Plus und Investitionen ins Jubiläumsjahr
Wago feiert im Jahr 2026 sein 75-jähriges Jubiläum. Auch der Blick auf die…
-
Hochsicherer Entwicklungsprozess für Industrieprodukte:
Genua erhält IEC-62443-4-1-Zertifikat
IT-Sicherheitshersteller Genua wurde nach IEC62443-4-1 zertifiziert.
-
Color Camera für hochpräzise RGB-Druckmarkenerkennung
Closed-Loop-Vision für ausschussfreie Druckproduktion
B&R erweitert sein Vision-Portfolio um eine neue Color Camera zur hochpräzisen RGB-Druckmarkenerkennung.
-
Neues Modell von Voltcraft jetzt auf der Conrad Sourcing Platform erhältlich
Wärmebildkamera für präzise Thermografie
Mit der WB-430 erweitert Voltcraft sein Messtechnik-Portfolio um eine Wärmebildkamera für professionelle Prüf-…
-
Middleware zur Anbindung von Maschinen, Anlagen und IT-Systemen
Audit-Trail für regulierte Produktionsumgebungen
Mit Release 4.3 erweitert Kontron AIS seine Middleware FabEagle Connect um neue Funktionen…
-
Neue Steckverbindergröße
Spart bis zu 40% Bauraum
Mit der neuen Baugröße 4 erweitert Harting seine Steckverbinder-Baureihen Han-Eco, Han B und…
-
Akustische Bildgebungskamera Flir Si2-Pro
Akustische Bildgebung zur Leck- und Fehlererkennung
Mit der Si2-Pro erweitert Flir sein Portfolio akustischer Bildgebungskameras für industrielle Diagnoseaufgaben.
-
Robuste Connectivity als Rückgrat der hypervernetzten Produktion
Netzwerke für Digitalisierung in rauer Umgebung
R&M entwickelt durchgängige Infrastrukturlösungen für industrielle Datennetze – von der Feldebene bis zur…
-
Hannover Messe mit Besucherrückgang zu 2025
110.000 Besucherinnen und Besucher aus aller Welt nahmen an der weltweit führenden Messe…
-
NewGen Multitouch-HMIs
Volle Visualisierungspower
Mit der NewGen-Serie bietet Sigmatek leistungsfähige Web-Panels für anspruchsvolle Visualisierungsaufgaben.
-
Embedded-Modul
Multiprotokoll-Modul für cybersichere industrielle Kommunikation
Hilscher stellt mit dem comX 90 ein neues Embedded-Modul für industrielle Kommunikationsschnittstellen vor.
-
CleverReader
Kompakter Codeleser für schnelle Anwendungen
Mit dem CleverReader von Pepperl+Fuchs steht ein stationärer 1D-/2D-Codeleser für zuverlässige Identifikationsaufgaben in…
-
TÜV Nord: Zertifizierung für sichere Entwicklungsprozesse
Bachmann Electronic erlangt IEC62443-4-1 – ML 3
Bachmann Electronic hat die Zertifizierung nach IEC62443-4-1 auf Maturity Level 3 erreicht.
















