属性:global_init_slot
プラグマは、POUおよびグローバル変数リストの初期化の順序を定義します。GVLまたはPOU内の変数は、上から下に初期化されます。複数のグローバル変数リストがある場合、初期化順序は定義されていません。
初期化は、リテラル値の初期化には適用されません。たとえば、 1
、 'hello'
、 3.6
、または基本データ型の定数。ただし、リスト間に依存関係がある場合は、初期化の順序を自分で定義する必要があります。定義された初期化スロットをGVLまたはPOUに割り当てることができます。 'global_init_slot'
属性。
定数は、変数の前に、変数と同じ順序で初期化されます。初期化中、POUは<slot>の値に従ってソートされます。次に、定数を初期化するためのコードが生成され、その後、変数を初期化するためのコードが生成されます。
構文:
{attribute 'global_init_slot' := '<slot>'}
挿入場所 | プラグマは常にGVLまたはPOU全体に作用するため、プラグマは |
| 呼び出しの順序で位置を定義する整数値 POU(プログラム、機能ブロック)のデフォルト値は50000です。GVLのデフォルト値は49990です。値が小さいほど、初期化が早いことを意味します。 |
ヒント
複数のPOUに同じ値が割り当てられている場合 'global_init_slot'
属性の場合、初期化の順序は未定義のままです。
プロジェクトには、2つのグローバル変数リストが含まれています GVL_1
と GVL_2
、および PLC_PRG
両方のリストの変数を使用するプログラム。 GVL_1
変数を使用します B
変数を初期化するため A
、で初期化されます GVL_2
と 1000
。
GVL_1
VAR_GLOBAL //49990 A : INT := GVL_2.B*100; END_VAR
GVL_2
VAR_GLOBAL //49990 B : INT := 1000; C : INT := 10; END_VAR
PLC_PRG
PROGRAM PLC_PRG //50000 VAR ivar: INT := GVL_1.A; ivar2: INT; END_VAR ivar:=ivar+1; ivar2:=GVL_2.C;
この場合、コンパイラはエラーを出力します。 GVL_2.B
初期化に使用されます GVL_1.A
前 GVL_2 初期化されました。これを防ぐには、 global_init_slot
位置への属性 GVL_2 前 GVL_1 初期化シーケンスで。
この例では、 GVL_1 プログラム内で最も早い初期化を実現するには、少なくとも1つのスロット値49989が必要です。低い値はすべて同じ効果があります。
GVL_2
{attribute 'global_init_slot' := '100'} VAR_GLOBAL B : INT := 1000; END_VAR
使用する GVL_2.C
の実装部分で PLC_PRG
どちらの場合も、両方のGVLがプログラムの前に初期化されるため、プラグマを使用しなくても重要ではありません。
詳細については、以下を参照してください。 Global Init Slots