このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
信号の入れ子にされた構造体
生成されたコードで信号データの入れ子にされた構造体を作成できます。
C コンストラクター
typedef struct { double signal1; double signal2; double signal3; } B_struct_type; typedef struct { double signal1; double signal2; } C_struct_type; typedef struct { B_struct_type subStruct_B; C_struct_type subStruct_C; } A_struct_type;
手順
モデルで構造体型を表すには、Simulink.Bus
オブジェクトを作成します。このオブジェクトをモデル内のバスのデータ型として使用します。
別の構造体内に構造体を入れ子にするには、別のバス オブジェクト内でバス オブジェクトを要素のデータ型として使用します。
1. ex_signal_nested_struct
モデルを Gain ブロック、Bus Creator ブロック、Unit Delay ブロックで作成します。Gain ブロックと Unit Delay ブロックによって、生成されたコードで構造体がより識別しやすくなります。
3 つの入力を受け入れるように Bus Creator ブロックを設定するには、ブロック ダイアロブ ボックスで [入力数] を 3
に設定します。
2. ツールストリップの [モデル化] タブの [設計] ギャラリーで、[型エディター] をクリックします。
3. 型エディターで、Simulink.Bus
オブジェクトを 3 つ作成します。
subStruct_B
およびsubStruct_C
という名前の 2 つの要素を含むA_struct_type
という名前のバス オブジェクトsignal1
、signal2
、およびsignal3
という名前の 3 つの要素を含むB_struct_type
という名前のバス オブジェクトsignal1
およびsignal2
という名前の 2 つの要素を含むC_struct_type
という名前のバス オブジェクト
A_struct_type
という名前のバス オブジェクトは、生成されたコードで使用する最上位構造体型を表します。
バス オブジェクトとその要素の作成方法については、Type Editorを参照してください。
4. A_struct_type
オブジェクトで、他のバス オブジェクトをデータ型として使用します。
subStruct_B
要素について、[データ型] をBus: B_struct_type
に設定します。subStruct_C
要素について、[データ型] をBus: C_struct_type
に設定します。
A_struct_type
の各要素は別のバス オブジェクトをデータ型として使用します。これらの要素はサブ構造体を表します。
5. 3 つの Gain ブロックから信号を受け取る Bus Creator ブロックのダイアログ ボックスで、次を行います。
[出力データ型] を
Bus: B_struct_type
に設定します。[非バーチャル バスとして出力] を選択します。
[OK] をクリックします。
6. 他の下位の Bus Creator ブロックのダイアログ ボックスで、次を行います。
[出力データ型] を
Bus: C_struct_type
に設定します。[非バーチャル バスとして出力] を選択します。
[OK] をクリックします。
7. 最後の [Bus Creator ブロック] ダイアログ ボックスで、次を行います。
[出力データ型] を
Bus: A_struct_type
に設定します。[非バーチャル バスとして出力] を選択します。
[OK] をクリックします。
8. Simulink Coder アプリを開きます。[C コード] タブで、[コード インターフェイス]、[個々の要素コードのマッピング] を選択します。
9. [信号/状態] タブを開きます。モデルで、Unit Delay ブロックに接続する A_struct_type
Bus Creator ブロックの出力信号を選択します。コード マッピング エディターで、[選択した信号をコード マッピングに追加] ボタンをクリックします。
10. 追加された信号について [ストレージ クラス] を ExportedGlobal
に設定します。
11.プロパティ インスペクターで [コード]、[Identifier] プロパティを sig_struct_var
に設定します。Bus Creator ブロックの出力は生成されたコードに sig_struct_var
という名前の個別のグローバル構造体変数として表示されます。
12.モデルからコードを生成します。
結果
生成されたヘッダー ファイル ex_signal_nested_struct_types.h
は構造体型を定義します。各構造体型は Simulink.Bus
オブジェクトに対応します。
typedef struct { real_T signal1; real_T signal2; real_T signal3; } B_struct_type; typedef struct { real_T signal1; real_T signal2; } C_struct_type; typedef struct { B_struct_type subStruct_B; C_struct_type subStruct_C; } A_struct_type;
生成されたソース ファイル ex_signal_nested_struct.c
はグローバル構造体変数 sig_struct_var
にメモリを割り当てます。既定では、A_struct_type
Bus Creator ブロックの名前は Bus Creator2
です。
/* Exported block signals */ A_struct_type sig_struct_var; /* '<Root>/Bus Creator2' */
同じファイル内のモデルの関数 step
で、アルゴリズムは sig_struct_var
と sig_struct_var
のフィールドにアクセスします。