ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Simulink 列挙型

"列挙型データ" は決まった数の値に制約されるデータです。"列挙データ型" は、"列挙型の値" のセットを定義する MATLAB® クラスです。各列挙型の値は、ソフトウェアが生成コード内で内的に使用する "列挙型の名前""使用可能な整数" から構成されます。

モデリング コンテキストでの列挙値の使用を開始する前に、列挙型 (MATLAB)に記載された情報を理解していなければなりません。

Simulink® モデルで使用する列挙型を定義するには、次のいずれかの方法を選択します。

  • 関数 Simulink.defineIntEnumType を使用する。列挙型は MATLAB セッション中に存在します。

  • 以下の組み込みクラスのいずれかをサブクラス化して永続的な列挙クラスを作成する。

    • int8uint16 などの多くの組み込み整数データ型

    • Simulink.IntEnumType

  • 関数 Simulink.importExternalCTypes を使用して、外部 C コードで定義した列挙データ型 (enum) の Simulink 表現を作成する。

    この手法を使用すると、次を実行できます。

    • 既存の C コードを Simulink モデルで置き換える。

    • Simulink でのシミュレーション用の既存の C コードを統合する (たとえば、レガシ コード ツールを使用)。

    • 既存の C コードを使用して単一のアプリケーションにコンパイルできる C コードを生成する (Simulink Coder™)。

詳細については、Simulink 列挙型の定義を参照してください。

次の例は、Simulink および Stateflow® での列挙値の使用方法を示します。

対象
Simulink のデータ型Simulink のデータ型。列挙データ型を含む。
列挙型のデータ型を使った CD プレーヤー/ラジオのモデル化Stateflow チャートを含む Simulink モデルの列挙データ型

Stateflow での列挙値の使用の詳細は、列挙型データ (Stateflow)を参照してください。

列挙型をサポートする Simulink の構成

概要

通常、列挙型は、列挙型にすることに意味があればすべての Simulink ツールと構成でサポートされます。列挙型の目的とは、プログラムの状態を表したり、プログラムのロジックを制御することです。列挙型は、Simulink エディター、Simulink デバッガー、端子の値表示、参照モデル、サブシステム、マスク、バス、データ ログ、および大部分のその他の Simulink の機能で特別な要件を課せられることなくサポートされます。

列挙型は数学計算を目的としていないため、(数値入力と数値出力間の受け渡しは例外として) 数値出力を計算するブロックで列挙型はサポートされません。つまり、数値として使用可能な整数値をもっていても、列挙型は数値型とは見なされません。詳細については、計算における列挙値を参照してください。

列挙型をサポートしないほとんどの機能は、数値型をサポートできません。したがって、通常 Simulink のドキュメンテーションには、誤認を避けたり例外を説明したりする必要がある場合のみ、サポートされない列挙型についての記述があります。列挙型をサポートできるにも関わらずサポートしない特定の構成の詳細は、Simulink 列挙型の制限を参照してください。

ブロックのサポート

列挙型は、以下の Simulink のブロックでサポートされます。

Simulink ブロックの以下のカテゴリの全メンバーで列挙型がサポートされます。

前述のブロックに加えて多くの Simulink のブロックが列挙型をサポートしますが、それらのブロックは、前述のカテゴリのいずれかに属するか、あるいは列挙型とともに使用されることがほとんどありません。各ブロックのリファレンス ページの「サポートするデータ型」の節では、そのブロックがサポートするすべてのデータ型が説明されています。

クラス サポート

列挙型は、以下の Simulink のクラスでサポートされます。

  • Simulink.Signal

  • Simulink.Parameter

  • Simulink.AliasType

  • Simulink.BusElement

列挙型のログ

ルートレベルの outport、To Workspace ブロック、および Scope ブロックは、すべての列挙値をエクスポートできます。信号と状態のログは、他のデータの場合と同じように列挙型データでも機能します。ログの形式は、サポートされています。From File ブロックは、列挙型データをサポートしていません。代わりに、ファイルとワークスペース間のデータ移動の手法と組み合わせて From Workspace ブロックを使用します。詳細については、シミュレーションのランタイム データの保存を参照してください。

列挙型データのインポート

ルートレベルの Inport と From Workspace ブロックは、シミュレーション時に列挙信号を出力できます。構造体、時間付き構造体、または TimeSeries オブジェクトにデータを与えなければなりません。指定されたシミュレーション時間中に、列挙値での内挿は行われません。From File ブロックでは double 型のデータのみが生成されます。そのため、列挙型はサポートされません。詳細については、シミュレーションのための信号データの読み込みを参照してください。

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 ターゲットでは、列挙型はサポートされません。

参考

| |

関連するトピック