Cet opérateur n'est pas défini par la norme IEC 61131-3.
Pour obtenir des informations sur la compatibilité, consultez le tableau de correspondance des versions de compilateur EcoStruxure Machine Expert/CoDeSys, dans le document Compatibilité et migration - Guide de l'utilisateur.
L'opérateur __DELETE libère la mémoire attribuée précédemment aux objets, à l'aide de opérateur __NEW.
L'opérateur __DELETE ne renvoie aucune valeur et son opérande reste à 0 après l'opération.
Activez l'option Utiliser l'allocation dynamique de la mémoire dans l'affichage Options de création d'application (Affichage > Propriétés… > Options de création d'application). Veuillez consulter le Guide de programmation spécifique à votre contrôleur pour savoir si votre contrôleur offre ces options.
__DELETE (<pointeur>)
Si le pointeur désigne un bloc fonction, la méthode FB_Exit dédiée est appelée avant que le pointeur ne soit défini à NULL.
NOTE : utilisez le type de données du bloc fonction dérivé, et non celui du bloc fonction de base. N'utilisez pas une variable de type POINTER TO BaseFB. En effet, si le bloc fonction de base n'implémente aucune fonction FB_Exit, aucun bloc FB_Exit n'est appelé lors d'une prochaine utilisation de __DELETE(pBaseFB).
Dans l'exemple suivant, le bloc fonction FBDynamic est attribué dynamiquement via _NEW à partir du POU PLC_PRG. Ce qui appelle la méthode FB_Init, dans laquelle un type DUT est attribué. Lorsque __DELETE est appelée, le pointeur PLC_PRG du bloc fonction FB_Exit est appelé, ce qui libère le type interne attribué.
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;
END_VAR
out := in1 + in2;
METHOD FB_Exit : BOOL
VAR_INPUT
bInCopyCode : BOOL;
END_VAR
__Delete(_dut);
METHOD FB_Init : BOOL
VAR_INPUT
bInitRetains : BOOL;
bInCopyCode : BOOL;
END_VAR
_dut := __NEW(DUT);
METHOD INC : INT
VAR_INPUT
END_VAR
_inc := _inc + 1;
INC := _inc;
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