Skip to main content

Puntatore: THIS

Il THIS pointer è una variabile speciale che viene utilizzata per la programmazione orientata agli oggetti.

THIS è il puntatore di un blocco funzione alla propria istanza di blocco funzione. UN THIS il puntatore è automaticamente disponibile per ogni blocco funzione. Puoi usare THIS solo nei metodi e nei blocchi funzione. THIS è disponibile per l'implementazione nell'Input Assistant nella categoria Parole chiave.

Dereferenziazione del puntatore: THIS^

. Uso del THIS puntatore
  • Se una variabile locale sostituisce una variabile del blocco funzione in un metodo, è possibile impostare la variabile del blocco funzione con il THIS puntatore. Vedi esempio sotto (1)

  • Se si fa riferimento al puntatore all'istanza del blocco funzione del blocco funzione per l'uso in una funzione. (Vedi esempio sotto (2))

Esempio 100. Esempi

ST

THIS^.METH_DoIt();

FBD/CFC/LD

_cds_img_pointer_this.png


Esempio 101. Esempio

Il iVarB la variabile locale ha la precedenza su iVarB variabile del blocco funzione.

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();


Esempio 102. Esempio

Una chiamata di funzione richiede il riferimento alla propria istanza.

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();


Suggerimento

THIS non è ancora implementato per l'elenco di istruzioni (IL).