该操作符是 IEC 61131-3 标准的延伸。




注意

为兼容起见,编译器版本必须大于等于 3.3.2.0。
该操作符释放了"__NEW "操作符动态生成的实例的内存。__DELETE
操作符没有返回值,操作后操作数置 0。
要求:在应用程序的属性对话框中,“Application Build Options” 选项卡中选择了“Use dynamic memory allocation” 复选框。
__DELETE (<pointer>)




注意

两个任务不应同时调用 __DELETE。要么使用一个 semaphore(SysSemEnter)或类似方法来防止同时调用 __DELETE,要么只在一个任务中使用 __DELETE(推荐)。
您可以使用一个寄存器(SysSemEnter)来防止两个任务同时分配内存。因此,大量使用__DELETE
会导致更高的抖动。
如果Pointer
引用了一个功能块,那么CODESYS 会在指针归零前调用相关的FB_EXIT
方法。
示例
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; 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