Para cada bloque de funciones está disponible automáticamente un puntero con el nombre THIS. Apunta a su propia instancia de bloque de funciones.
Esto proporciona una solución eficaz para los problemas siguientes:
oSi una variable declarada a nivel local en el método oculta una variable de bloque de funciones.
oSi desea referenciar un puntero a su propia instancia de bloque de funciones para el uso en una función.
THIS solo se puede utilizar en métodos/propiedades/acciones/transiciones y en la implementación del bloque de funciones asociado.
THIS se debe escribir en mayúsculas. No se aceptan otras redacciones.
Debido a que THIS es un puntero al bloque de funciones, deberá quitarle la referencia para poder acceder a un elemento del bloque de funciones: THIS^.METHDoIt.
Llamada de THIS en distintos lenguajes de implementación
Lenguaje de implementación |
Ejemplo |
---|---|
ST |
THIS^.METH_DoIt(); |
FBD/CFC/LD |
![]()
|
NOTA: La funcionalidad de THIS todavía no está implementada para la lista de instrucciones.
La variable local iVarB deja en segundo plano la variable de bloque de funciones 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();
Llamada de función que necesita una referencia a su propia instancia.
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();