列挙型
列挙データ型を生成するには、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' */
}