Erweiterung eines Funktionsbausteins
Objektorientierte Programmierung wird durch die Möglichkeit unterstützt, einen Funktionsbaustein von einem anderen Funktionsbaustein abzuleiten. Das heißt, ein Funktionsbaustein kann einen anderen erweitern und erhält dabei automatisch die Methoden/Eigenschaften/Aktionen/Transitionen und Variablen des Basisfunktionsbausteins zusätzlich zu seinen eigenen.
Die Erweiterung erfolgt in der Deklaration des Funktionsbausteins mithilfe des Schlüsselworts EXTENDS. Die Option EXTENDS kann bereits beim Hinzufügen eines Funktionsbausteins im Projekt über das Dialogfeld Objekt hinzufügen ausgewählt werden.
Weitere Informationen finden Sie in der Beschreibung der Vorgehensweise zum Hinzufügen einer Methode, einer Eigenschaften, einer Aktion oder einer Transition.
FUNCTION_BLOCK <Funktionsbausteinname> EXTENDS <Funktionsbausteinname>
Hier folgen die Variablendeklarationen.
Definition des Funktionsbausteins fbA
FUNCTION_BLOCK fbA
VAR_INPUT
x:int;
END_VAR
...
Definition des Funktionsbausteins fbB
FUNCTION_BLOCK fbB EXTENDS fbA
VAR_INPUT
ivar: INT := 0;
END_VAR
...
Erweiterung mithilfe von EXTENDS
Die Erweiterung mithilfe von EXTENDS bedeutet:
ofbB enthält alle Daten und Methoden, die von fbA definiert sind. Eine Instanz von fbB kann nun in jedem Kontext verwendet werden, in dem ein Funktionsbaustein vom Typ fbA erwartet wird.
ofbB kann die in fbA definierten Methoden/Eigenschaften/Aktionen/Transitionen überschreiben. Das bedeutet: fbB kann eine Methode mit demselben Namen, denselben Eingängen und demselben Ausgang deklarieren, wie sie von A deklariert sind.
ofbB darf keine Funktionsbausteinvariablen mit denselben Namen deklarieren wie in fbA verwendet. In diesem Fall erzeugt der Compiler eine Fehlermeldung.
ofbA-Variablen und -Methoden können innerhalb des Gültigkeitsbereichs von fbB durch Verwendung des Schlüsselworts SUPER-Zeiger (SUPER^.<method>) direkt angesprochen werden.
HINWEIS: Ein Funktionsbaustein kann mehrere Schnittstellen implementieren, aber nur einen einzigen Funktionsbaustein erweitern.
FUNCTION_BLOCK FB_Base
VAR_INPUT
END_VAR
VAR_OUTPUT
iCnt : INT;
END_VAR
VAR
END_VAR
THIS^.METH_DoIt();
THIS^.METH_DoAlso();
METHOD METH_DoIt : BOOL
VAR
END_VAR
iCnt := -1;
METH_DoIt := TRUE;
METHOD METH_DoAlso : BOOL
VAR
END_VAR
METH_DoAlso := TRUE;
FUNCTION_BLOCK FB_1 EXTENDS FB_Base
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
END_VAR
// Calls the method defined under FB_1
THIS^.METH_DoIt();
THIS^.METH_DoAlso();
// Calls the method defined under FB_Base
SUPER^.METH_DoIt();
SUPER^.METH_DoAlso();
METHOD METH_DoIt : BOOL
VAR
END_VAR
iCnt := 1111;
METH_DoIt := TRUE;
PROGRAM PLC_PRG
VAR
Myfb_1: FB_1;
iFB: INT;
iBase: INT;
END_VAR
Myfb_1();
iBase := Myfb_1.iCnt_Base;
iFB := Myfb_1.iCnt_THIS;