列挙型(enum)を使うと数字を文字で扱える!
概要
列挙型(enum型)を使用すると、数字に名前を付けて扱うことができます。
数字を直接扱うよりも、名前を付けたほうが挙動がわかりやすいため可読性の向上や誤配線の防止につながります。
例えば、自動車の自動運転プログラムとして、信号が青色なら前進する。黄色もしくは赤色なら停止するというロジックを列挙型無しで作成すると下図のようなモデルになります。
入力信号(SignalColour)は1の時が青色, 2が黄色, 3が赤色。出力信号(DriveMode)は0が停止, 1が前進を表すものとします。
信号の値を注意深く追っていけば動作がわかりますが、ちょっと分かりづらいですよね。この規模ならなんとかなりますが、信号の意味が10個, 100個と増えていくと「この値の意味は~~だ。」と脳内変換するのが大変になってくると思います。
列挙型を使用してモデルを書き直すと下図のようになります。数字ではなく、数字が表す意味を文字で扱うことができています。数字から意味への変換が不要なので可読性が高く、モデルのミスを減らすことができます。
入力信号はE_SignalColourという名前の列挙型を定義して使用しました。
出力信号はE_Modeという名前の列挙型を定義して使用しました。
列挙型の定義方法
列挙型を定義する方法を解説します。
1. 新規列挙型の追加
Simulinkデータディクショナリーに列挙型を追加します。追加→Simulink列挙型を選択します。
下図のようにあたらしく”Enum”という列挙型が定義されました。列挙型のメンバーはデフォルトの”enum1″のみが定義されています。
2. 列挙型の定義
2.1. 列挙型の名前をデフォルトの”Enum”から好きな名前に変更します。
2.2. 新しい列挙値を追加ボタンを押して列挙値を必要数追加します。
2.3. 名前, 値, 説明を設定します。
列挙型の使い方
列挙型以外の信号を列挙型に変換する
列挙型以外の信号を列挙型に変換するにはData Type Conversionブロックを使用します。
下図の例ではuint8型の信号をE_SignalColoulr列挙型に変換しています。
列挙型を直接使用する
列挙型のメンバーを直接使用する場合はEnumerated Constantブロックを使用します。
“出力データ型”でどの列挙型を使用するのかを選択します。
“値”でどの列挙値を使用するか選択します。