Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

信号の入れ子にされた構造体

生成されたコードで信号データの入れ子にされた構造体を作成できます。

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 という名前のバス オブジェクト

  • signal1signal2、および 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_varsig_struct_var のフィールドにアクセスします。

参考

関連するトピック