该运算符是IEC 61131-3标准的扩展。
为了兼容性,编译器版本必须为> = 3.3.2.0。 |
该运算符通过“ _NEW”运算符释放动态生成的实例内存。__DELETE运算符没有返回值,并且在此操作之后,操作数被设置为零。
要求:在应用程序的属性对话框中,在应用程序生成信息选项中选择使用动态分配内存复选框。
_DELETE (<指针>)
两个任务不能同时调用__DELETE。你可以使用信号量(进入系统事件)或类似方法来防止并发调用__DELETE,或者仅在一项任务中使用__DELETE(推荐)。 |
你可以使用信号量(进入系统事件)防止两个任务同时分配内存。结果,__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