Skip to main content

データ構造: UNION

UNION はユーザー定義のデータ構造で、そのメンバーのデータ型とサイズは通常異なります。

a のインスタンスのメンバー UNION データ型はすべて同じメモリ空間を予約します。すべてのメンバーが同じアドレスオフセットを持ち、メモリを共有します。メモリ要件は、最も大きいメンバーによって決まります。

UNION 変数は、正確に1つのメンバーの値を格納します。メモリには最後に割り当てられた値が含まれています。つまり、メモリが効率的に使用されているということです。

詳細については、「オブジェクト:」を参照してください。 DUT

タイプ宣言

構文:

TYPE <identifier>

UNION

   <member name> : <data type> := <initialization> ;

END_UNION

END_TYPE

<member name> : <data type> ;

基本データ型のメンバーの宣言

宣言はいくつでも構いませんが、少なくとも 2 つは必要です。

:= <initialization>

[オプション]

238.

タイプ宣言: U_VAR_12

TYPE U_VAR_12:
UNION
    wVar1: WORD;
    byVar2 : BYTE;
END_UNION
END_TYPE

タイプ宣言: U_INT_ID

TYPE U_INT_ID:
UNION
    iVar: INT;
    dVar : DINT;
END_UNION
END_TYPE

タイプ宣言: U_EFFICIENT

TYPE U_EFFICIENT
UNION
    wMember : WORD;
    dwMember : DWORD;
    strMember : STRING := 'A'; 
END_UNION
END_TYPE


変数宣言

a の変数のインスタンス化/宣言 UNION データタイプ:

<variable name> : <name UNION type> := <initialization> ;

:= <initialization>

[オプション]

:= ( <member name> := <literal> )

初期化の詳細:

代入演算子の後には、丸括弧で囲まれたメンバーへの初期値の代入が続きます。

239.
TYPE U_AB:
UNION
    lrA : LREAL;
    liB : LINT;
END_UNION
END_TYPE

初期化を伴う変数宣言

PLC_PRG PROGRAM
VAR
    uabVAR_1 : U_AB := (lrA := LREAL#1.5);
    uabVAR_2 : U_AB := (liB := LINT#1);
END_VAR


240.

での変数宣言 PLC_PRG データ型付き U_EFFICIENT

PLC_PRG PROGRAM
VAR
 uefficient_1 : U_EFFICIENT := (strMember := 'A');
END_VAR

実装: PLC_PRG

uefficient_1.wMember := 16#000A;

いつ uefficient_1 が変数のメンバーに書き込まれると、変数のすべてのメンバーに影響します。