オブジェクト:機能ブロック
機能ブロックは、実行時に1つ以上の値を生成するPOUです。
クリックすると、オブジェクトがアプリケーションまたはプロジェクトに追加されます POU ビュー、機能ブロックPOUには、 (FB) サフィックス。
。デバイスツリーまたは機能ブロックのコピーであるインスタンスを使用して、常に機能ブロックを呼び出します。
機能ブロックのエディタは、宣言部分と実装部分で構成されています。
出力変数と内部変数の値は、実行後、次の実行まで変更されません。これは、関数ブロックが同じ入力変数を使用した複数の呼び出しに対して必ずしも同じ出力値を返すとは限らないことを意味します。
IEC 61131-3で説明されている機能に加えて、で機能ブロックを使用することもできます。 CODESYS オブジェクト指向プログラミングの次の機能について:
宣言部分の一番上の行には、次の宣言が含まれています。
FUNCTION_BLOCK <access specifier> <function block> \| EXTENDS <function block> \| IMPLEMENTS <comma-separated list of interfaces>
機能ブロックの呼び出し
呼び出しは、常に機能ブロックのインスタンスを使用して行われます。機能ブロックが呼び出されると、それぞれのインスタンスの値のみが変更されます。
インスタンスの宣言:
<instance> : <function block>;
以下のように、実装部分の機能ブロックの変数にアクセスします。
<instance> . <variable>
重要
次の点に注意してください。
内部変数ではなく、機能ブロックインスタンスの外部から機能ブロックの入力変数と出力変数にのみアクセスできます。
インスタンスをグローバルに宣言していない限り、機能ブロックインスタンスへのアクセスは、インスタンスが宣言されているPOUに制限されます。
インスタンスを呼び出すときに、必要な値を汎用ブロック変数に割り当てることができます。
機能ブロック変数へのアクセス:
機能ブロック FB1
入力変数があります iVar1
タイプの INT
および出力変数 out1
。以下では、変数 iVar1
プログラムから呼び出されます Prog
。
PROGRAM Prog VAR inst1 : FB1; END_VAR inst1.iVar1 := 33; (* FB1 is called and the value 33 is assigned to the variable iVar1 *) inst1(); (* FB1 is called, that's necessary for the following access to the output variable *) ires := inst1.out1 (* the output variable out1 of the FB1 is read *)
FBDの場合:

呼び出し時に変数値を割り当てる:
テキスト言語ILおよびSTでは、機能ブロックを呼び出すときに、入力変数および/または出力変数に値を直接割り当てることができます。
値は、次のように入力変数に割り当てられます。 :=
。
値は、次のように出力変数に割り当てられます。 =>
。
インスタンス CMD_TMR
タイマー機能ブロックのは、入力変数の割り当てで呼び出されます IN
と PT
。次に、出力変数 Q
タイマーのが変数に割り当てられます A
。
PROGRAM PLC_PRG VAR CMD_TMR : TOF; END_VAR CMD_TMR(IN := %IX5.1, PT := T#100MS); A := CMD_TMR.Q;
ヒント
を使用して機能ブロックインスタンスを挿入する場合 入力アシスタント を選択します 引数付きで挿入 のオプション 入力アシスタント ダイアログ、 CODESYS すべての入力変数と出力変数を使用して呼び出しを挿入します。次に、必要な値の割り当てを挿入するだけです。上記の例では、 CODESYS 次のように呼び出しを挿入します。 CMD_TMR (IN:= ,PT:= , Q=> )
。
ヒント
あなたは使用することができます '接続されています'
ローカル変数の属性。関数ブロックインスタンスの呼び出し時に、特定の入力が外部割り当てを受け取るかどうかを決定します。