Skip to main content

列挙

列挙は、ユーザー定義変数を宣言するためのカンマ区切りのメンバー (列挙値) のリストで構成されるユーザー定義データ型です。

で列挙を宣言します DUT クリックしてプロジェクト内に既に作成されているオブジェクト [オブジェクトを追加]

アプリケーションコードでは、識別子 <enumeration name>.<member name> がプロジェクト内でグローバルに認識される定数として、列挙メンバを使用することができます。

詳細については、以下を参照してください。 DUT

デクラレーション

構文

{attribute 'strict'}

TYPE <enumeration name> :

(

    <member name> := <value>

) <base data type> := <initialization> ;

END_TYPE

{attribute 'strict'}

[オプション]

プラグマには、以下のように厳密な型テストを行うという効果があります。

プラグマはオプションですが、推奨されます。

<enumeration name>

コードでデータ型として使用できる列挙の名前

例: COLOR_BASIC

    <member name> := <initial value>

任意の数のメンバー、ただし少なくとも 2 人のメンバー

列挙は、カンマで区切られたメンバー名を丸括弧で囲んだリストです。閉じ角括弧の前の最後のメンバーにはカンマは必要ありません。すべてのメンバーのデータ型は同じです

メンバーの値は自動的に初期化されます。0 から始まり、値は連続的に 1 ずつ増加します。個々のメンバーに固定の初期値を明示的に割り当てることもできます

例: yellow := 1

<base data type>

[オプション]

次の基本データ型のいずれかを明示的に割り当てることができます。

INT | UINT | SINT | USINT | DINT | UDINT | LINT | ULINT | BYTE | WORD | DWORD | LWORD

デフォルト: INT

:= <initialization>

[オプション]

メンバーの 1 つを初期メンバーとして明示的に宣言できます。

デフォルト:初期化が明示的に指定されていない場合、初期化は最上位メンバーで自動的に実行されます。

227.
{attribute 'qualified_only'}
{attribute 'strict'}
TYPE COLOR_BASIC :
(
    yellow,
    green,
    blue,
    black
) // Basic data type is INT, default initialization for all COLOR_BASIC variables is yellow
;
END_TYPE


明示的な基本データ型による列挙

IEC 61131-3 スタンダードの拡張

列挙宣言の基本データ型は INT デフォルトです。ただし、別の整数データ型を明示的に基にした列挙を宣言することもできます

228.

基本データ型による列挙 DWORD

TYPE COLOR :
(
        white := 16#FFFFFF00,
        yellow := 16#FFFFFF00,
        green := 16#FF00FF00,
        blue := 16#FF0000FF,
        black := 16#88000000
) DWORD := black
; // Basic data type is DWORD, default initialization for all COLOR variables is black
END_TYPE


厳格なプログラミング規則

重要

CODESYS V3.5 SP7 以降では、プラグマが使われています。 {attribute 'strict'} 列挙を宣言すると、最初の行に自動的に追加されます。

プラグマを追加すると、厳密なプログラミングルールが有効になります。 {attribute 'strict'}

. 次のコードはコンパイラエラーとみなされます。
  • 列挙型メンバーによる算術演算

    たとえば、列挙型変数を a のカウンタ変数として使用することはできません。 FOR ループ。

  • 列挙値に対応しない定数値の列挙メンバーへの代入

  • 列挙型として別のデータ型を持つ非定数変数の列挙メンバーへの代入

算術演算を行うと、宣言されていない値が列挙メンバーに割り当てられる可能性があります。より適切なプログラミング・スタイルは、を使用することです。 SWITCH/CASE メンバー値を処理するためのステートメント。

列挙変数の宣言と初期化

構文

<variable name> : <enumeration name> := <initialization> ;

ユーザー定義の列挙を使用して列挙変数を宣言する場合、変数は列挙メンバーで初期化できます。

229.
PROGRAM PLC_PRG
VAR
    colorCar: COLOR;
    colorTaxi : COLOR := COLOR.yellow;
END_VAR

変数 colorCar で初期化されます COLOR.black。これが、型のすべての列挙型変数のデフォルト初期化です COLOR 型宣言でこのように定義されています。 colorTaxi 独自の初期化機能があります。



初期化が指定されていない場合、初期化値は 0 です。

230.
PROGRAM PLC_PRG
VAR
    cbFlower : COLOR_BASIC;
    cbTree: COLOR_BASIC := COLOR_BASIC.green;
END_VAR

変数 cbFlower で初期化されます COLOR_BASIC.yellow。これが、型のすべての列挙型変数のデフォルト初期化です COLOR_BASIC。列挙宣言では初期化するメンバーを指定していないため、システムは値が 0 のメンバーで自動的に初期化されます。通常、これは列挙メンバーのうちの最初のメンバーです。ただし、最初の位置にはないが明示的に 0 で初期化された別のメンバーでもかまいません

変数 cbTree 明示的な初期化が行われている。



タイプと変数の両方に値を指定しない場合は、次のルールが適用されます。列挙に 0 の値が含まれている場合、この値がデフォルトの初期化になり、含まれていない場合は、リストの最初のメンバーになります。

231.

0 メンバーによる初期化

TYPE ENUM :
(
    e1 := 2,
    e2 := 0,
    e3
)
;
END_TYPE

PROGRAM PLC_PRG
VAR
    e : ENUM;
END_VAR

変数 e で初期化されます ENUM.e2

最初のメンバーによる初期化

TYPE ENUM2 :
(
    e1 := 3,
    e2 := 1,
    e3
)
;
END_TYPE

PROGRAM PLC_PRG
VAR
    e2 : ENUM2;
END_VAR

変数 e2 で初期化されます ENUM.e1



列挙メンバーへのユニークなアクセス

IEC 61131-3 スタンダードの拡張

列挙メンバーは、識別子 <enumeration name>.<member name>. を使用して定数変数としても使用できます。列挙メンバーはプロジェクト全体で認識され、それらへのアクセスは一意です。したがって、メンバー名は異なる列挙で使用できます。

232.

メンバー: blue

PROGRAM PLC_PRG
VAR
    cbFlower : COLOR_BASIC;
    colorCar : COLOR;
END_VAR

(* unambiguous identifiers although the component names are identical *)
cbFlower := COLOR_BASIC.blue;
colorCar := COLOR.blue;

(* invalid code *)
cbFlower := blue;
colorCar := blue;


詳細については、以下を参照してください。 列挙型名前空間