Simulink 列挙型
"列挙型データ" は決まった数の値に制約されるデータです。"列挙データ型" は、"列挙型の値" のセットを定義する MATLAB® クラスです。各列挙型の値は、ソフトウェアが生成コード内で内的に使用する "列挙型の名前" と "使用可能な整数" から構成されます。
モデリング コンテキストでの列挙値の使用を開始する前に、列挙に記載された情報を理解していなければなりません。
Simulink® モデルで使用する列挙型を定義するには、次のいずれかの方法を選択します。
関数
Simulink.defineIntEnumType
を使用する。列挙型は MATLAB セッション中に存在します。以下の組み込みクラスのいずれかをサブクラス化して永続的な列挙クラスを作成する。
int8
やuint16
などの多くの組み込み整数データ型Simulink.IntEnumType
関数
Simulink.importExternalCTypes
を使用して、外部 C コードで定義した列挙データ型 (enum
) の Simulink 表現を作成する。この手法を使用すると、次を実行できます。
既存の C コードを Simulink モデルで置き換える。
Simulink でのシミュレーション用の既存の C コードを統合する (たとえば、レガシ コード ツールを使用)。
既存の C コードを使用して単一のアプリケーションにコンパイルできる C コードを生成する (Simulink Coder™)。
詳細については、Simulink 列挙型の定義を参照してください。
次の例は、Simulink および Stateflow® での列挙値の使用方法を示します。
例 | 対象 |
---|---|
Simulink のデータ型 | Simulink のデータ型。列挙データ型を含む。 |
メディア プレーヤーのシミュレーション (Stateflow) | Stateflow チャートを含む Simulink モデルの列挙データ型 |
Stateflow での列挙値の使用の詳細は、列挙データ (Stateflow)を参照してください。
列挙型をサポートする Simulink の構成
概要
通常、列挙型は、列挙型にすることに意味があればすべての Simulink ツールと構成でサポートされます。列挙型の目的とは、プログラムの状態を表したり、プログラムのロジックを制御することです。サブシステムサブシステム列挙型は、Simulink エディター、端子の値ラベル、参照モデル、サブシステム、マスク、バス、データ ログ、および大部分のその他の Simulink の機能で特別な要件を課せられることなくサポートされます。
列挙型は数学計算を目的としていないため、(数値入力と数値出力間の受け渡しは例外として) 数値出力を計算するブロックで列挙型はサポートされません。つまり、数値として使用可能な整数値をもっていても、列挙型は数値型とは見なされません。詳細については、計算における列挙値を参照してください。
列挙型をサポートしないほとんどの機能は、数値型をサポートできません。したがって、通常 Simulink のドキュメンテーションには、誤認を避けたり例外を説明したりする必要がある場合のみ、サポートされない列挙型についての記述があります。列挙型をサポートできるにも関わらずサポートしない特定の構成の詳細は、Simulink 列挙型の制限を参照してください。
ブロックのサポート
列挙型は、Simulink の多くのブロックでサポートされます。各ブロックのリファレンス ページの「サポートするデータ型」の節では、そのブロックがサポートするすべてのデータ型が説明されています。
特に、Simulink ブロックの以下のカテゴリの全メンバーで列挙型がサポートされます。
バス対応ブロック (バス対応ブロックを参照)
パススルー ブロック:
Data Store Memory ブロックおよび Unit Delay ブロックのように状態あり
Mux ブロックのように状態なし
クラス サポート
列挙型は、以下の Simulink のクラスでサポートされます。
Simulink.ValueType
Simulink.Signal
Simulink.Parameter
Simulink.AliasType
Simulink.BusElement
列挙型のログ
最上位モデルの出力端子、To Workspace ブロック、および Scope ブロックはすべて、列挙値をエクスポートできます。信号と状態のログは、他のデータの場合と同じように列挙型データでも機能します。ログの形式は、サポートされています。詳細については、シミュレーションのランタイム データの保存を参照してください。
列挙型データのインポート
最上位モデルの出力端子と From Workspace ブロックは、シミュレーション時に列挙信号を出力できます。Structure
、Structure with Time
、または timeseries
オブジェクトにデータを与えなければなりません。指定されたシミュレーション時間中に、列挙値での内挿は行われません。そのため、列挙型はサポートされません。詳細については、シミュレーションのための信号データの読み込みを参照してください。
Simulink 列挙型の制限
列挙型とスコープ
Scope ブロックに列挙型信号が表示されるときは、シミュレーション時にスコープが開かれた場合のみ、縦軸に列挙値の名前が表示されます。シミュレーションが実行される前かシミュレーション中にはじめて Scope ブロックを開くと、このブロックには数値のみが表示されます。シミュレーションが開始されると、列挙型の名前は数値に置き換えられ、その後は Scope ブロックを開くたびに表示されます。
Floating Scope ブロックに複数の信号が表示されるときは、すべての信号が同じ列挙型である場合のみ、列挙値の名前が Y 軸上に示されます。Floating Scope ブロックに 1 種類を超える列挙型信号や数値型信号が表示される場合は名前は表示されず、列挙値は整数値で表現されます。
Switch ブロックの列挙型
Switch ブロックの制御入力は、Simulink がサポートするデータ型のいずれかになります。ただし、u2 ~=0
モードは列挙ではサポートされません。制御入力に列挙型が含まれている場合は、以下の方法のいずれかを選択して最初の入力の通過条件を指定します。
[u2 >= しきい値]
または[u2 > しきい値]
を選択し、制御入力と同じ列挙型のしきい値を指定します。Relational Operator ブロックを使用して比較を行い、比較の boolean 結果を Switch ブロックの制御端子に供給します。
列挙型のサポートなし
Simulink で列挙データ型を使用する場合、以下の制限があります。
パッケージに列挙型クラス定義を含めることはできません。
If Action ブロックでは列挙型はサポートされません。
生成されたコードでは、ログ列挙型データはサポートされません。
カスタム Stateflow ターゲットでは、列挙型はサポートされません。
参考
enumeration
| Simulink.defineIntEnumType
| Simulink.data.getEnumTypeInfo