Dieser Operator wird in der Norm IEC 61131-3 nicht beschrieben.
Informationen zur Kompatibilität finden Sie in der Zuordnungstabelle der Compilerversion von EcoStruxure Machine Expert/CoDeSys im Kompatibilitäts- und Migrationshandbuch.
Der __DELETE-Operator gibt den Speicher für Objekte frei, die zuvor durch den __NEW Operator zugewiesen wurden.
__DELETE hat keinen Rückgabewert und der Operand wird nach dieser Operation auf 0 gesetzt.
Aktivieren Sie die Option Dynamische Speicherallozierung verwenden in der Ansicht Optionen Applikationserzeugung (Ansicht > Eigenschaften... > Optionen Applikationserzeugung). Weitere Informationen finden Sie im Programmierhandbuch Ihrer Steuerung. für Informationen zur Verfügbarkeit der Optionen mit Ihrer Steuerung.
__DELETE (<Zeiger>)
Wenn der Zeiger auf einen Funktionsbaustein zeigt, wird die zweckbestimmte Methode FB_Exit aufgerufen, bevor der Zeiger auf NULL gesetzt wird.
HINWEIS: Verwenden Sie den exakten Datentyp des abgeleiteten Funktionsbausteins und nicht denjenigen des Basis-Funktionsbausteins. Verwenden Sie keine Variable vom Typ POINTER TO BaseFB. Das ist notwendig, wenn der Basis-Funktionsbaustein keine FB_Exit-Funktion implementiert. Bei der weiteren Verwendung von __DELETE(pBaseFB) wird FB_Exit dann nicht aufgerufen.
Im folgenden Beispiel wird der Funktionsbaustein FBDynamic dynamisch durch _NEW von der POU PLC_PRG zugewiesen. Dadurch wird die FB_Init-Methode aufgerufen, in der ein Typ DUT zugewiesen ist. Wenn __DELETE aufgerufen wird, wird der Funktionsbausteinzeiger von PLC_PRG, FB_Exit, aufgerufen, der dann die zugewiesenen internen Typen freigibt.
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