このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
列挙型
列挙データ型を生成するには、MATLAB® ファイルで列挙クラスを定義します。その後、列挙クラスをモデル内の信号、ブロック パラメーター、および状態のデータ型として使用します。
C コンストラクター
typedef enum { Choice1 = 0, Choice2 } myEnumType;
手順
現在のフォルダーで、MATLAB ファイル ex_myEnumType.m
を作成します。このファイルは列挙クラス ex_myEnumType
を定義します。
classdef ex_myEnumType < Simulink.IntEnumType enumeration Choice1(0) Choice2(1) end %enumeration methods (Static) function retVal = getHeaderFile() retVal = 'myEnumHdr.h'; end %function function retVal = getDataScope() retVal = 'Exported'; end %function end %methods end %classdef
1. Enumerated Constant ブロックと Multiport Switch ブロックを含むモデル ex_pattern_enum
を開きます。
2. モデル データ エディターで、[パラメーター] タブを選択します。
3. モデルで Enumerated Constant ブロックをクリックします。
4. モデル データ エディターで、[値] 列を使用して定数値を myChoice
に設定します。myChoice
の横にあるアクション ボタン (3 つの縦向きのドット) をクリックし、[作成] を選択します。
5. [新規データの作成] ダイアログ ボックスで、[値] を Simulink.Parameter(ex_myEnumType.Choice1)
に設定して [作成] をクリックします。myChoice
という名前の Simulink.Parameter
オブジェクトがベース ワークスペースに表示されます。このオブジェクトは、ex_myEnumType
型の列挙値 Choice1
を保存します。
6. [コード生成] タブで、[ストレージ クラス] を ExportedGlobal
に設定します。この設定により、オブジェクトはグローバル変数として生成されたコードに表示されます。
7. モデル データ エディターで、[信号] タブを選択します。
8. モデルで、Enumerated Constant ブロックの出力信号を選択します。
9. モデル データ エディターで [データ型] 列を使用して、信号のデータ型を Enum: ex_myEnumType
に設定します。
10. Multiport Switch ブロックを選択します。
11.プロパティ インスペクターで、次のように設定します。
[データ端子の順序] を
[Specify indices]
。[データ端子インデックス] を
enumeration('ex_myEnumType')
。この式はex_myEnumType
のすべての列挙メンバーを返します。
12.モデル コンフィギュレーション パラメーター [ファイル パッケージ化形式] を [Modular]
に設定します。この設定により、生成されたコードで、ex_myEnumType
の定義を指定したヘッダー ファイル myEnumHdr.h
に表示できます。
13.モデルをビルドしてコードを生成するには、Ctrl+B を押します。
結果
生成されたヘッダー ファイル myEnumHdr.h
を表示します。このファイルは列挙データ型を定義します。
typedef enum { Choice1 = 0, /* Default value */ Choice2 } ex_myEnumType;
ソース ファイル ex_pattern_enum.c
を表示します。このファイルは変数 myChoice
を定義します。関数 step
のアルゴリズムは、myChoice
を使用して、入力信号の 1 つを出力信号に送ります。
ex_myEnumType myChoice = Choice1; /* Variable: myChoice /* Model step function */ void ex_pattern_enum_step(void) { /* MultiPortSwitch: '<Root>/Multiport Switch' incorporates: * Constant: '<S1>/Constant' */ if (myChoice == Choice1) { /* Outport: '<Root>/Data Out' incorporates: * Inport: '<Root>/Data In 1' */ rtY.DataOut = rtU.DataIn1; } else { /* Outport: '<Root>/Data Out' incorporates: * Inport: '<Root>/Data In 2' */ rtY.DataOut = rtU.DataIn2; } /* End of MultiPortSwitch: '<Root>/Multiport Switch' */ }