Zeiger: ‎THIS‎ Permanentlink

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 ‎THIS‎ setzen. 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

_cds_img_pointer_this.png

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.