Operador: __DELETE
El operador es una extensión del estándar IEC 61131-3.
Importante
Por motivos de compatibilidad, la versión del compilador debe ser >= 3.3.2.0.
El operador libera la memoria de las instancias creadas dinámicamente por el operador __NEW. El operador __DELETE no tiene valor de retorno y el operando se establece en 0 después de esta operación.
Requisito: En el diálogo de propiedades de la aplicación está en la pestaña Opciones de creación de aplicaciones la opción Usar asignación de memoria dinámica activado.
__DELETE (<Pointer>)
Importante
Dos tareas no deben llamar a __DELETE al mismo tiempo. O usa un semáforo (SysSemEnter) o una técnica similar para evitar una llamada simultánea a __DELETE, o solo usa __DELETE en una tarea (práctica recomendada).
Puede usar un semáforo (SysSemEnter) para evitar que dos tareas intenten asignar memoria al mismo tiempo. Como resultado, el uso extensivo de __DELETE provoca una mayor fluctuación.
Cuándo Pointer apunta a un módulo de función, llama CODESYS el método asociado FB_EXIT antes de que el puntero se establezca en 0.
Bloque de funciones
FUNCTION_BLOCK FBDynamic VAR_INPUT in1, in2 : INT; END_VAR VAR_OUTPUT out : INT; END_VAR VAR test1 : INT := 1234; _inc : INT := 0; _dut : POINTER TO DUT; neu : BOOL; END_VAR out := in1 + in2;
Método (FB_Exit)
METHOD FB_Exit : BOOL VAR_INPUT bInCopyCode : BOOL; END_VAR __Delete(_dut);
Método (FB_Init)
METHOD FB_Init : BOOL
VAR_INPUT
bInitRetains : BOOL;
bInCopyCode : BOOL;
END_VAR
_dut := __NEW(DUT);
Método
METHOD INC : INT VAR_INPUT END_VAR _inc := _inc + 1; INC := _inc;
Programa
PLC_PRG(PRG)
VAR
pFB : POINTER TO FBDynamic;
bInit: BOOL := TRUE;
bDelete: BOOL;
loc : INT;
END_VAR
IF (bInit) THEN
pFB := __NEW(FBDynamic);
bInit := FALSE;
END_IF
IF (pFB <> 0) THEN
pFB^(in1 := 1, in2 := loc, out => loc);
pFB^.INC();
END_IF
IF (bDelete) THEN
__DELETE(pFB);
END_IF