保持エリアのファンクションブロックインスタンス

ファンクションブロックインスタンスは、保持エリアに割り付けることができます。電源を切った場合もファンクションブロックの変数の内容を保持させることができます。このとき、変数は、POUヘッダ上で、クラスVAR_RETAINまたはVAR_EXTERNAL_RETAINに宣言する必要があります。クラスVAR_EXTERNAL_RETAINの場合、インスタンスはグローバル変数リスト上で、クラスVAR_GLOBAL_RETAINに宣言する必要があります。

インスタンスにVAR_RETAINまたはVAR_EXTERNAL_RETAINが使用される場合、コンパイラは、保持エリアから非保持エリアへとアドレスを割り付けます。非保持エリアは、プログラムダウンロード後にのみ初期化されるクラスVARVAR_INPUTVAR_OUTPUTVAR_IN_OUTのエリアです。クラスVARのサブインスタンスは、クラスVAR_RETAINのサブインスタンスとして扱われます。他の変数、あるいはVAR_RETAINVAR_OUTPUT_RETAINVAR_EXTERNALVAR_EXTERNAL_RETAINのサブインスタンスは、クラスVARまたはVAR_EXTERNALのインスタンス用として割り付けられます。クラスVAR_CONSTANTVAR_EXTERNAL_CONSTANTの変数の値は、プログラムコード中に定数として変換します。

クラスVARVAR_EXTERNALがインスタンスに使用される場合は、ファンクションブロック内の変数またはサブインスタンスの宣言は、保持エリア(VAR_RETAIN)か非保持エリア(VAR)かどうかによって決定されます。

プログラムProgのPOUヘッダ

プログラムProgは、ファンクションブロックFB1に2度アクセスします:

ファンクションブロックFB1のPOUヘッダ

ファンクションブロックFB1のPOUヘッダは、以下のように記述しています。ファンクションブロックFB1は、ファンクションブロックFB2を2度呼び出します。

ファンクションブロックFB2のPOUヘッダ

ファンクションブロックFB2のPOUヘッダは、以下のように記述しています。

プログラムProgのメモリ割り付け

関連トピック

最終修正日: 2020-08-12このページに関するフィードバックお問い合わせ窓口