运算符:__DELETE
运算符是 IEC 61131-3 标准的扩展。
重要
为了兼容性,编译器版本必须 >= 3.3.2.0。
运算符释放“__NEW”运算符动态生成的实例的内存。这 __DELETE
运算符没有返回值,并且在此操作后操作数设置为零。
要求: 使用动态内存分配 选项被选中 应用程序构建选项 应用程序属性对话框中的选项卡。
__DELETE (<pointer>)
重要
两个任务不应同时调用 __DELETE。您可以使用信号量 (SysSemEnter) 或类似方法来防止 __DELETE 的任何并发调用,或者仅在一个任务中使用 __DELETE(推荐)。
您可以使用信号量 (SysSemEnter) 来防止两个任务同时分配内存。因此,广泛使用 __DELETE
导致更高的抖动。
如果 Pointer
引用一个功能块,然后 CODESYS 调用相关的 FB_EXIT
指针设置为零之前的方法。
例 149. 例子
功能块
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;
方法 (FB_Exit
)
METHOD FB_Exit : BOOL VAR_INPUT bInCopyCode : BOOL; END_VAR __Delete(_dut);
方法 (FB_Init
)
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