EcoStruxure Machine Expert versión 1.1 no soporta los controladores M258, LMC058 y LMC078.

Puntero THIS

Descripción general

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 implemen­tació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

G-SE-0027196.1.gif-high.gif

 

 

NOTA: La funcionalidad de THIS todavía no está implementada para la lista de instrucciones.

Ejemplo 1

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

Ejemplo 2

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