Skip to main content

演算子:__ DELETE

演算子は、IEC61131-3規格の拡張です。

重要

互換性のために、コンパイラのバージョンは3.3.2.0以上である必要があります。

オペレーターは、「__ NEW」オペレーターが動的に生成したインスタンスのメモリーを解放します。 The __DELETE 演算子には戻り値がなく、この演算の後、オペランドはゼロに設定されます。

要件: 動的メモリ割り当てを使用する オプションが選択されている アプリケーションビルドオプション アプリケーションのプロパティダイアログのタブ。

__DELETE (<pointer>)

重要

2つのタスクが同時に__DELETEを呼び出さないようにする必要があります。セマフォ(SysSemEnter)または同等のメソッドを使用して、__ DELETEの同時呼び出しを防止するか、1つのタスクでのみ__DELETEを使用します(推奨)。

セマフォ(SysSemEnter)を使用して、2つのタスクが同時にメモリを割り当てるのを防ぐことができます。結果として、 __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