列挙
列挙は、ユーザー定義変数を宣言するためのカンマ区切りのメンバー (列挙値) のリストで構成されるユーザー定義データ型です。
で列挙を宣言します DUT クリックしてプロジェクト内に既に作成されているオブジェクト [オブジェクトを追加]。
アプリケーションコードでは、識別子 <enumeration name>.<member name>
がプロジェクト内でグローバルに認識される定数として、列挙メンバを使用することができます。
詳細については、以下を参照してください。 DUT
デクラレーション
構文
{attribute 'strict'}
TYPE <enumeration name> :
(
<member name> := <value>
) <base data type> := <initialization> ;
END_TYPE
| [オプション] プラグマには、以下のように厳密な型テストを行うという効果があります。 プラグマはオプションですが、推奨されます。 |
| コードでデータ型として使用できる列挙の名前 例: |
| 任意の数のメンバー、ただし少なくとも 2 人のメンバー 列挙は、カンマで区切られたメンバー名を丸括弧で囲んだリストです。閉じ角括弧の前の最後のメンバーにはカンマは必要ありません。すべてのメンバーのデータ型は同じです メンバーの値は自動的に初期化されます。0 から始まり、値は連続的に 1 ずつ増加します。個々のメンバーに固定の初期値を明示的に割り当てることもできます 例: |
| [オプション] 次の基本データ型のいずれかを明示的に割り当てることができます。
デフォルト: |
| [オプション] メンバーの 1 つを初期メンバーとして明示的に宣言できます。 デフォルト:初期化が明示的に指定されていない場合、初期化は最上位メンバーで自動的に実行されます。 |
{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
デフォルトです。ただし、別の整数データ型を明示的に基にした列挙を宣言することもできます
基本データ型による列挙 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> ;
ユーザー定義の列挙を使用して列挙変数を宣言する場合、変数は列挙メンバーで初期化できます。
PROGRAM PLC_PRG VAR colorCar: COLOR; colorTaxi : COLOR := COLOR.yellow; END_VAR
変数 colorCar
で初期化されます COLOR.black
。これが、型のすべての列挙型変数のデフォルト初期化です COLOR
型宣言でこのように定義されています。 colorTaxi
独自の初期化機能があります。
初期化が指定されていない場合、初期化値は 0 です。
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 の値が含まれている場合、この値がデフォルトの初期化になり、含まれていない場合は、リストの最初のメンバーになります。
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>
. を使用して定数変数としても使用できます。列挙メンバーはプロジェクト全体で認識され、それらへのアクセスは一意です。したがって、メンバー名は異なる列挙で使用できます。
メンバー: 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;
詳細については、以下を参照してください。 列挙型名前空間。