EcoStruxure Machine Expert Version 1.1 unterstützt nicht die Controller M258, LMC058 und LMC078.

__DELETE

Definition

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.

Syntax

__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.

Beispiel

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