THIS-Zeiger

Überblick

Für jeden Funktionsbaustein ist automatisch ein Zeiger mit dem Namen THIS verfügbar. Er verweist auf die zugehörige Funktionsbausteininstanz.

Dadurch wird eine effektive Lösung für folgende Probleme möglich:

oFalls eine lokal deklarierte Variable in der Methode eine Funktionsbausteinvariable ausblendet.

oFalls der Zeiger auf die eigene Funktionsbausteininstanz zur Verwendung in einer Funktion referenziert werden soll.

THIS kann nur in Methoden/Eigenschaften/Aktionen/Transitionen und in der zugehörigen Funktionsbaustein-Implementierung verwendet werden.

THIS muss in Großbuchstaben geschrieben werden. Andere Schreibweisen sind nicht erlaubt.

Da THIS als Zeiger für den Funktionsbaustein fungiert, müssen Sie dessen Referenzierung aufheben, um auf ein Element des Funktionsbausteins zugreifen zu können: THIS^.METHDoIt.

THIS-Aufruf in den verschiedenen Implementierungssprachen

Implementierungssprache

Beispiel

ST

THIS^.METH_DoIt();

FBD/CFC/LD (KOP)

G-SE-0027196.1.gif-high.gif

 

 

HINWEIS: Die Funktionalität von THIS ist noch nicht für die Anweisungsliste (IL/AWL) implementiert.

Beispiel 1

Die lokale Variable iVarB verschattet die Funktionsbausteinvariable iVarB.

FUNCTION_BLOCK fbA
VAR_INPUT
    iVarA: INT;
END_VAR
iVarA := 1;

FUNCTION_BLOCK fbB EXTENDS fbA
VAR_INPUT
    iVarB: INT := 0;
END_VAR
iVarA := 11;
iVarB := 2;

    METHOD DoIt : BOOL
    VAR_INPUT
    END_VAR
    VAR
        iVarB: INT;
    END_VAR
    iVarB := 22; // Here the local iVarB is set.
    THIS^.iVarB := 222; // Here the function block variable iVarB is set, although iVarB is overloaded.

PROGRAM PLC_PRG
VAR
    MyfbB: fbB;
END_VAR

MyfbB(iVarA:=0 , iVarB:= 0);
MyfbB.DoIt();

Beispiel 2

Ein Funktionsaufruf benötigt die Referenz auf die eigene Instanz.

FUNCTION funA
VAR_INPUT
    pFB: fbA;
END_VAR
...;

FUNCTION_BLOCK fbA
VAR_INPUT
    iVarA: INT;
END_VAR
...;

FUNCTION_BLOCK fbB EXTENDS fbA
VAR_INPUT
    iVarB: INT := 0;
END_VAR
iVarA := 11;
iVarB := 2;

    METHOD DoIt : BOOL
    VAR_INPUT
    END_VAR
    VAR
        iVarB: INT;
    END_VAR
    iVarB := 22;    //Here the local iVarB is set.
    funA(pFB := THIS^);    //Here funA is called with THIS^.

PROGRAM PLC_PRG
VAR
    MyfbB: fbB;
END_VAR
MyfbB(iVarA:=0 , iVarB:= 0);
MyfbB.DoIt();