Opérateur : __DELETE
L'opérateur est une extension de la norme CEI 61131-3.
Important
Pour des raisons de compatibilité, la version du compilateur doit être >= 3.3.2.0.
L'opérateur libère la mémoire des instances que l'opérateur "__NEW" a générées dynamiquement. le __DELETE L'opérateur n'a pas de valeur de retour et l'opérande est mis à zéro après cette opération.
Exigence : Le Utiliser l'allocation de mémoire dynamique l'option est sélectionnée sur le Options de création d'applications dans la boîte de dialogue des propriétés de l'application.
__DELETE (<pointer>)
Important
Deux tâches ne doivent pas appeler __DELETE simultanément. Soit vous utilisez un sémaphore (SysSemEnter) ou une méthode comparable pour empêcher tout appel simultané de __DELETE , soit vous utilisez __DELETE dans une seule tâche (recommandé).
Vous pouvez utiliser un sémaphore (SysSemEnter) pour empêcher deux tâches d'allouer de la mémoire en même temps. En conséquence, l'utilisation massive de __DELETE provoque une gigue plus élevée.
Si Pointer fait référence à un bloc fonction, puis CODESYS appelle l'associé FB_EXIT méthode avant que le pointeur ne soit défini sur zéro.
Bloc fonctionnel
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éthode (FB_Exit)
METHOD FB_Exit : BOOL VAR_INPUT bInCopyCode : BOOL; END_VAR __Delete(_dut);
Méthode (FB_Init)
METHOD FB_Init : BOOL
VAR_INPUT
bInitRetains : BOOL;
bInCopyCode : BOOL;
END_VAR
_dut := __NEW(DUT);
Méthode
METHOD INC : INT VAR_INPUT END_VAR _inc := _inc + 1; INC := _inc;
Programme
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