Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

カスタム データ型のファイル配置の制御

既定では、データ型オブジェクト (Simulink.AliasTypeSimulink.Bus など) とカスタムの列挙型を使用して信号やブロック パラメーターのデータ型を指定すると、モデルから生成されたコードに型の定義 (たとえば typedef ステートメントなど) が含まれます。他の既存のコードとの生成コードの統合を簡単にしたり、生成コードをモジュール化したりするために、オブジェクトと列挙型のプロパティを調整して型定義のファイル配置を制御できます。

データ スコープとヘッダー ファイル

生成コードにおけるカスタム型定義のファイル配置を制御するには、データ型オブジェクトの DataScope プロパティと HeaderFile プロパティを次の表に従って設定します。MATLAB® ファイルで定義する列挙型についても同様に、getDataScope メソッドと getHeaderFile メソッドの戻り引数を同じように設定します。

  • typename はカスタム データ型の名前です。

  • filename はヘッダー ファイルの名前です。

  • model はモデルの名前です。

目的DataScope の指定内容HeaderFile の指定内容
model_types.h に型定義をエクスポートするAuto
作成したヘッダー ファイル filename から型定義をインポートするAuto または Importedfilename (必要な場合は拡張子 .h を含める)
生成されたヘッダー ファイル filename.h に型定義をエクスポートするExportedfilename または filename.h
生成されたヘッダー ファイル typename.h に型定義をエクスポートするExported

データ型定義をインポートすると (たとえば DataScopeImported に設定)、生成されるモデル コードにおいて、型定義の代わりにヘッダー ファイルの #include 命令が作成されます。定義を含むヘッダー ファイルを提供します。

データ型置換に関する考慮事項

  • データ型置換を使用して生成コード内の組み込みの Simulink® データ型を独自のデータ型に置換する場合 (モデル コンフィギュレーション パラメーター: コード生成のデータ型置換を参照)、typedef ステートメントおよび #include 命令が配置されるのは model_types.h ではなく rtwtypes.h になります。

  • Simulink.AliasType オブジェクトまたは Simulink.NumericType オブジェクトをデータ型置換で使用する場合、オブジェクトの DataScope プロパティを Exported に設定できません。そのため、コード ジェネレーターで対応する typedef ステートメントを生成する場合は、ステートメントのファイル配置を制御できません。ただし、DataScopeImported に設定することで、外部コードで提供される typedef ステートメントを再利用するようにコードを構成することは可能です。

    回避策として、データ型オブジェクトをデータ型置換として使用する代わりに、オブジェクトを使用してモデル内の個々のデータ項目のデータ型を設定します。多数のデータ項目の構成には、モデル データ エディターを使用してデータ型の伝播や継承を利用できます。詳細については、Control Names of Primitive Data Typesを参照してください。

複素数データ型の定義のインポート

Simulink.AliasType オブジェクトでは複素数データ (i) を使用できます。この場合、型定義を外部コードからインポートするように生成コードを構成するには (たとえば DataScope プロパティを Imported に設定)、コードに 2 つの補完的な typedef ステートメントが必要になります。

外部ヘッダー ファイル myAliasTypes.h で、データ型 IAT_int32 を 32 ビット整数のエイリアスとして定義するとします。IAT_int32cIAT_int32 の 2 つの型をファイルで定義しなければなりません。

#ifndef myAliasTypes_H_
#define myAliasTypes_H_

#include "rtwtypes.h"

typedef int32_T IAT_int32;
typedef cint32_T cIAT_int32;

#endif 

Simulink.AliasType オブジェクトは 2 つ作成する必要はありません。この例では、オブジェクト IAT_int32 を 1 つだけ作成します。これにより、生成コードで IAT_int32cIAT_int32 の両方を使用して複素数データ (変数) が生成されます。

マクロ ガード

生成されたヘッダー ファイルに 1 つ以上のデータ型定義をエクスポートすると、ファイルには RTW_HEADER_filename_h の形式のファイルレベルのマクロ ガードが含まれます。

次のプロパティをもつ複数の Simulink.AliasType オブジェクト mySingleAliasmyDoubleAlias、および myIntAlias を使用するとします。

  • DataScopeExported に設定

  • HeaderFilemyTypes.h に設定

コードを生成すると、ガードされたファイル myTypes.htypedef ステートメントが含まれます。

#ifndef RTW_HEADER_myTypes_h_
#define RTW_HEADER_myTypes_h_
#include "rtwtypes.h"

typedef real_T myDoubleAlias;
typedef real32_T mySingleAlias;
typedef int16_T myIntAlias;

#endif        

model_types.h にデータ型定義をエクスポートすると、ファイルにはそれぞれの typedef ステートメントに対する _DEFINED_TYPEDEF_FOR_typename_ の形式のマクロ ガードが含まれます。次のプロパティをもつ Simulink.AliasType オブジェクト mySingleAlias を使用するとします。

  • DataScopeAuto に設定

  • HeaderFile の指定なし

コードを生成すると、ファイル model_types.h にガードされた typedef ステートメントが含まれます。

#ifndef _DEFINED_TYPEDEF_FOR_mySingleAlias_
#define _DEFINED_TYPEDEF_FOR_mySingleAlias_

typedef real32_T mySingleAlias;

#endif

参考

| |

関連するトピック