Skip to main content

属性:global_init_slot

プラグマは、POUおよびグローバル変数リストの初期化の順序を定義します。GVLまたはPOU内の変数は、上から下に初期化されます。複数のグローバル変数リストがある場合、初期化順序は定義されていません。

初期化は、リテラル値の初期化には適用されません。たとえば、 1'hello'3.6、または基本データ型の定数。ただし、リスト間に依存関係がある場合は、初期化の順序を自分で定義する必要があります。定義された初期化スロットをGVLまたはPOUに割り当てることができます。 'global_init_slot' 属性。

定数は、変数の前に、変数と同じ順序で初期化されます。初期化中、POUは<slot>の値に従ってソートされます。次に、定数を初期化するためのコードが生成され、その後、変数を初期化するためのコードが生成されます。

構文

{attribute 'global_init_slot' := '<slot>'}

挿入場所

プラグマは常にGVLまたはPOU全体に作用するため、プラグマは VAR_GLOBAL またはPOU宣言。

<slot>

呼び出しの順序で位置を定義する整数値

POU(プログラム、機能ブロック)のデフォルト値は50000です。GVLのデフォルト値は49990です。値が小さいほど、初期化が早いことを意味します。

ヒント

複数のPOUに同じ値が割り当てられている場合 'global_init_slot' 属性の場合、初期化の順序は未定義のままです。

267.

プロジェクトには、2つのグローバル変数リストが含まれています GVL_1GVL_2、および PLC_PRG 両方のリストの変数を使用するプログラム。 GVL_1 変数を使用します B 変数を初期化するため A、で初期化されます GVL_21000

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.AGVL_2 初期化されました。これを防ぐには、 global_init_slot 位置への属性 GVL_2GVL_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