永続変数の定義
単一変数、構造体インスタンス、関数ブロック インスタンスは、属性を使用して「永続的」としてマークできます。インスタンスがマークされると、インスタンスのすべてのメンバーが VAR
、 VAR_INPUT
、 そして VAR_OUTPUT
永続的に保存されます。変数が VAR PERSISTENT
セクションが「永続的」としてマークされている場合、警告が作成されます。
さらに、デフォルトのストレージ グループを定義したり、構造または関数ブロック インスタンスの永続ストレージから特定の変数を除外したりするための属性もあります。
永続変数の定義が変更されている場合 (追加、削除、名前変更、データ型の変更)、新しいコンポーザー コード生成 (Generate コマンド) を実行する必要はありません。これらの変更は、コンパイル中に Persistent Manager インスタンスで自動的に更新されます。
データ型定義が変更された場合に発生する可能性のある暗黙的な変換については、以下を参照してください。 パラメータ
サポートされているデータ型
次のデータ型のインスタンスは永続的に保存できません。
少し
ポインタ
インターフェース
定数
非永続データ型の配列
他のすべてのデータ型がサポートされています。これには、列挙型、部分範囲データ型、配列の配列、および多次元配列が含まれます。
ARRAY[0..9] OF ARRAY[5..6, 7..8, 9..10] OF INT
データ・タイプ: 連合
ユニオンのインスタンスを永続的に保存するには、最初にそのフィールドの 1 つをいわゆる「代表」として明確にマークする必要があります。これには 3 つのオプションがあります。
共用体の宣言内の 1 つのフィールドだけが属性でマークされます。
ac_persist_union_representant
(属性値なし)。このフィールドは結合を「表します」。その値は、完全な結合を代表して保存およびロードされます。共用体の宣言内の 1 つのフィールドだけが属性でマークされます。
ac_persist
– これは同時に代表者を定義します。ユニオンのインスタンスは属性でマークされます。
ac_persist_union_set_representant
属性値も含めて。属性値は、代表として使用される共用体フィールドの名前を記述します。この属性は既存の属性を上書きします。ac_persist_union_representant
共用体の宣言内の属性。共用体の配列にもマークを付けて、配列の要素を参照することができます。
「ac_persist_union_representant」
TYPE UnionWithRep : UNION di : DINT ; {attribute 'ac_persist_union_representant'} dw : DWORD ; END_UNION END_TYPE
'ac_persist'
TYPE UnionWithPersist : UNION di : DINT ; {attribute 'ac_persist' := 'TestUnion'} dw : DWORD ; END_UNION END_TYPE
「ac_persist_union_set_representant」
FUNCTION_BLOCK FBTestUnion VAR {attribute 'ac_persist_union_set_representant' := 'dw'} u2 : UnionWithoutRep ; END_VAR
和集合の配列
VAR {attribute 'ac_persist_union_set_representant' := 'dw'} aElems ARRAY[0..7] OF SomeUnion ; {attribute 'ac_persist_union_set_representant' := 'dw'} aaElems ARRAY[0..7] OF ARRAY[0..1] OF SomeUnion ; END_VAR
代表者は組合全体と同じ規模でなければなりません。そうしないと、完全なデータが保存されません。また、代表にはパディング領域 (ストレージ内のデータを整列させるためにコンパイラによって作成される空のデータ領域) があってはなりません。
プリミティブ データ型への代表の分解には、型のインスタンスが含まれない場合があります。
REAL
またはLREAL
または型のインスタンスSTRING
またはWSTRING
持っている。さらに、代表はサポートされているタイプで構成されている必要があります (上記を参照)。たとえば、代表者は次のようなタイプになります。
Structure
– ただし、構造体自体にポインタを含めることはできません。
属性: 'ac_persist'
属性「ac_persist
' に使用できます
変数
構造体のインスタンス
ファンクションブロックのインスタンス
構造体のメンバー
ファンクションブロックのメンバー
{attribute 'ac_persist' [ := '<PERSISTENCE_GROUP>']}
PERSISTENCE_GROUP
の名前です 永続化グループ 宣言を割り当てるべき場所。有効な IEC 識別子である必要があります。ここで永続グループの名前が指定されていない場合、割り当ては属性に従って行われます。 'ac_persist_set_default_group'
、この場合は定義する必要があります。
構造体インスタンスまたは関数ブロック インスタンスが「永続的」としてマークされており、宣言内の少なくとも 1 つのメンバーも「永続的」としてマークされている場合、エラー メッセージが作成されます。
変数 t
永続化グループに割り当てられます PROCESS
。すべてのメンバーは永続的に保存されます。
PROGRAM PLC_PRG VAR {attribute 'ac_persist' := 'PROCESS'} t : TON; END_VAR
メンバー iNumIOs
永続化グループに割り当てられます CONFIG
。このメンバーは、関数ブロックのすべてのインスタンスに対して永続的に保存されます (属性によって明示的に抑制されていない場合) 'ac_persist_exclude'
)。
FUNCTION_BLOCK FB VAR {attribute 'ac_persist' := 'CONFIG'} iNumIOs : INT := 0; END_VAR
属性: 'ac_persist_set_default_group'
属性にグループ名が欠落している場合 'ac_persist'
、 デフォルトグループ それぞれの変数を直接的または間接的に含む関数ブロック インスタンスまたは構造体インスタンスで定義する必要があります。これは属性で可能です 'ac_persist_set_default_group'
。この属性は、ファンクション ブロックのメンバーにも設定できます。最も内側に見つかった定義は、 'ac_persist_set_default_group'
変数のデフォルトのグループとして使用されます。
使用は許可されていません 'ac_persist_set_default_group'
一緒に 'ac_persist'
または 'ac_persist_exclude'
。この場合、コード生成中にエラー メッセージが作成されます。
FUNCTION_BLOCK FB_Util VAR {attribute 'ac_persist'} // no group //'ac_persist_set_default_group‘ and 'ac_persist_exclude' not allowed here i : INT := 0; END_VAR
PROGRAM PLC_PRG VAR {attribute 'ac_persist_set_default_group' := 'PROCESS'} fbu1 : FB_Util; {attribute 'ac_persist_set_default_group'´ := 'CONFIG'} fbu2 : FB_Util; END_VAR
属性: 'ac_persist_exclude'
属性 'ac_persist_exclude'
構造体または関数ブロック宣言内のメンバーが「永続的」として定義されているかどうかに関係なく、永続ストレージから変数を除外するために使用されます。宣言に永続メンバーが存在しない場合、コード生成中にエラーが発生します。
PROGRAM PLC_PRG VAR {attribute 'ac_persist_exclude'} fb1 : FB; END_VAR