EcoStruxure Machine Expert Version 1.1 unterstützt nicht die Controller M258, LMC058 und LMC078.

Erweiterung eines Funktionsbausteins

Überblick

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.

Syntax

FUNCTION_BLOCK <Funktionsbausteinname> EXTENDS <Funktionsbausteinname>

Hier folgen die Variablendeklarationen.

Beispiel

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.

Beispiel

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;