Der Zeiger THIS ist eine spezielle Variable, die für die objektorientierte Programmierung verwendet
wird.
THIS ist der Zeiger eines Funktionsblocks auf seine eigene Funktionsblockinstanz. Für
jeden Funktionsblock ist automatisch ein Zeiger THIS verfügbar. Sie können THIS nur in Methoden und in Funktionsblöcken verwenden. THIS steht für die Implementierung im Input Assistant in der Kategorie „zur Verfügung Schlüsselwörter“.
Dereferenzierung des Zeigers: THIS^
Verwendung des Zeigers THIS
-
Wenn eine lokale Variable eine Funktionsblockvariable in einer Methode übersteuert, können Sie die Funktionsblockvariable mit dem Zeiger
THISsetzen. Siehe nachstehendes Beispiel (1) -
Wenn der Zeiger auf die Funktionsblockinstanz des Funktionsblocks zur Verwendung in einer Funktion referenziert wird. (Siehe Beispiel unten (2))
Beispiele
ST
THIS^.METH_DoIt();
FBD/CFC/LD

Beispiel
Die lokale Variable iVarB hat Vorrang vor der Funktionsblockvariablen 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; // The local variable iVarB is set.
THIS^.iVarB := 222; // The function block variable iVarB is set even though iVarB is obscured.
PROGRAM PLC_PRG
VAR
MyfbB: fbB;
END_VAR
MyfbB(iVarA:=0, iVarB:= 0);
MyfbB.DoIt();
Beispiel
Ein Funktionsaufruf benötigt den Verweis auf seine 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; //The local variable iVarB is set.
funA(pFB := THIS^); //funA is called via THIS^.
PROGRAM PLC_PRG
VAR
MyfbB: fbB;
END_VAR
MyfbB(iVarA:=0 , iVarB:= 0);
MyfbB.DoIt();
THIS ist noch nicht für die Anweisungsliste (IL) implementiert.