\’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
-
Elektro- und Digitalindustrie: höchstes Auftragsplus seit zwei Jahren
Die Nachfrage in der deutschen Elektro- und Digitalindustrie hat sich zuletzt spürbar weiter belebt: Im Mai verzeichnete die Branche ein Fünftel mehr neue Bestellungen als ein Jahr zuvor…
-
Ziehl-Abegg investiert zusätzlich 90Mio.€
Ziehl-Abegg setzt seinen Wachstumskurs mit einer der größten Investitionsoffensiven der Unternehmensgeschichte fort.
-
Ein Überblick über Kriterien, Entwicklungen und Herausforderungen der Standardisierung
Welches industrielle Netzwerk ist das beste?
Die Frage nach dem ‚besten‘ industriellen Kommunikationsnetzwerk beschäftigt seit Jahrzehnten Ingenieure, Automatisierungsexperten sowie Gerätehersteller gleichermaßen. Die Wahl des passenden Netzwerks beeinflusst maßgeblich die Integration, Skalierung, Wartung sowie die…
-
Neuer Geschäftsführer bei Inosoft
Thomas Helmbold (r.) übernimmt die Geschäftsführung der Inosoft AG in der Schweiz und folgt damit auf den Gründer Hanspeter Knutti (l.), der das Unternehmen seit 1987 (bis 2010…
-
Siemens PLM Connection 2026 in Seeheim
KI prägt die PLM-Community – Zahlen und Keynotes im Rückblick
Rund 430 angemeldete Mitgliedsfirmen, 29 Aussteller und mehr als 90 Vorträge, Roundtables und Workshops – mit diesen Zahlen bestätigte die Siemens PLM Connection 2026 der PLM Benutzergruppe e.V.
-
Ein mit SensoJoints entwickelter Greifer sammelt für das EU-Projekt SeaClear2.0 Müll auf dem Meeresboden
SensoJoints als Gamechanger in der Unterwasserrobotik
Für das von der EU finanzierte Projekt SeaClear2.0 zur Sauberhaltung der Weltmeere mittels…
-
Was Industrieunternehmen bei Bedarfsplanung, Komponentenanalyse und Beschaffung jetzt beachten sollten
Mit vier Tipps die Speicherknappheit meistern
Die Speicherknappheit stellt Unternehmen vor Herausforderungen. System-D, Spezialdistributor für Industrial Storage, rät zu…
-
Elektrische Verbindungstechnik
PTFE-Einzeladern für anspruchsvolle Industrie- und Automotive-Anwendungen
Habia erweitert sein Portfolio an Hochleistungskabeln um PTFE-isolierte Einzeladern für anspruchsvolle elektrische Anwendungen.…
-
Marktanalyse von HMS Networks
Industrial Ethernet steigt auf 79%
Jährliche Marktanalyse von HMS Networks für industrielle Netzwerke 2026 sieht Industrial Ethernet in…
-
Mit Innenverriegelung
M12 Push-Pull umspritzte Steckverbinder
Escha erweitert sein Push-Pull-Portfolio im Bereich industrieller Verbindungstechnik um M12 Push-Pull Steckverbinder in…
-
Messtechnik
Touch-Oszilloskope für mobile Messaufgaben
Voltcraft hat sein Messtechnikprogramm um die neue Oszilloskop-Serie DOV erweitert.
-
HMI
Panel-PC-Plattform bündelt HMI und Steuerung
Wachendorff Prozesstechnik erweitert seine Match-Produktfamilie um Match Control, eine Plattform für Panel-PCs, die…
-
Sensorik
Smart-Measurement-Sensoren wachsen um Miniatur- und Hochleistungsvarianten
Contrinex erweitert sein Portfolio an Smart-Measurement-Sensoren um Miniaturausführungen sowie Varianten mit ActivStone-Beschichtung für…
-
CPO Dr. Wilma Kauke im Interview: Wie Lapp Führung und Unternehmenskultur neu denkt
Zwischen KI, Krisen und Fachkräftemangel
Wirtschaftliche Unsicherheit, Fachkräftemangel, globale Spannungen und künstliche Intelligenz verändern die Arbeitswelt tiefgreifend. Für…
-
Hilscher kombiniert Industrial Ethernet, IIoT und CRA-Readiness auf NetX-90-Basis
Neue CifX-PC-Karten für sichere Industriekommunikation
Hilscher hat zwei neue PC-Karten für die sichere industrielle Kommunikation vorgestellt. Die Karten…
-
Vorzeigeprojekt bei SGAC mit Rittal, Rittal Automation Systems und Eplan
Digitale Exzellenz in China
Mit der ‚Smart Manufacturing and Digitized Assembly Factory‘ setzt das chinesische Unternehmen SGAC…
-
Für sichere Schaltbefehle
Befehls- und Meldegeräte mit externen Kontaktgebern
Norelem erweitert sein Portfolio um Befehls- und Meldegeräte mit externen Kontaktgebern.
-
Für sicherheitsgerichtete Prozesse
Digitale Safety-HMI-Lösung mit SIL3
IconTrust HMI unterstützt die digitale Umsetzung funktional sicherer Bedien- und Anzeigekonzepte mit hohen…
-
Für die Lebensmittelindustrie
Hygienische Kabelführung
Icotek verfügt über ein umfangreiches Sortiment an teilbaren Kabeldurchführungen, Kabelverschraubungen und Kabelführungsplatten für…
-
Smartes Engineering für funktionale Sicherheit
In der modernen Softwareentwicklung gehören Versionskontrolle mit Git, mehrsprachige Codebasen, KI-gestützte Assistenten, Extensions…
-
Auftragseingang im Maschinenbau: Keine Belebung in den Mai-Orderbüchern
Der Maschinenbau wartet weiter auf eine Belebung ihrer Orderbücher.
-
Siemens erweitert seine Werke
Siemens investiert 300Mio.€, um die Fertigung von Schlüsseltechnologien für die globale Energiewende und…
-
OWL testet die nächste Stufe industrieller KI
Mit dem Projekt Engage-KI starten It’s OWL und Fraunhofer IEM eine Leistungsoffensive für…
-
Weidmüller: Grundstein für neuen asiatischen Hauptsitz
Weidmüller hat den offiziellen Spatenstich für eine neue asiatische Unternehmenszentrale in Suzhou gefeiert.
-
Yaskawa eröffnet neues Robotermontage- und Distributionszentrum
Yaskawa baut seine Produktions- und Distributionskapazitäten für Roboter in Europa weiter aus: Am…
das könnte sie auch interessieren
-
-
Technische Beschaffung
B2B-Katalog als Brücke zur digitalen Beschaffung
-
Leitungstechnik
Torsionsfeste Devicenet-Leitung für Roboter
















