Skip to main content

永続変数の定義

単一変数、構造体インスタンス、関数ブロック インスタンスは、属性を使用して「永続的」としてマークできます。インスタンスがマークされると、インスタンスのすべてのメンバーが VARVAR_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 共用体の宣言内の属性。共用体の配列にもマークを付けて、配列の要素を参照することができます。

2.

「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 つのメンバーも「永続的」としてマークされている場合、エラー メッセージが作成されます。

3. 永続インスタンスの例

変数 t 永続化グループに割り当てられます PROCESS。すべてのメンバーは永続的に保存されます。

PROGRAM PLC_PRG
VAR
        {attribute 'ac_persist' := 'PROCESS'}
        t : TON;
END_VAR


4. 関数ブロックの永続メンバーの例

メンバー 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'。この場合、コード生成中にエラー メッセージが作成されます。

5. デフォルトグループの例
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' 構造体または関数ブロック宣言内のメンバーが「永続的」として定義されているかどうかに関係なく、永続ストレージから変数を除外するために使用されます。宣言に永続メンバーが存在しない場合、コード生成中にエラーが発生します。

6. 変数の除外例
PROGRAM PLC_PRG
VAR
        {attribute 'ac_persist_exclude'}
        fb1 : FB;
END_VAR