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