Simulink.importExternalCTypes
C または C++ コードで定義されたカスタム データ型の Simulink 表現の生成
構文
説明
は、importInfo = Simulink.importExternalCTypes(headerFiles)typedef、struct、enum 型定義の headerFiles で特定された C または C++ のヘッダー ファイル (.h または .hpp) を解析し、その型の Simulink® 表現を生成します。出力 importInfo は、正常にインポートされた型と正常にインポートされなかった型を識別します。
Simulink 表現を使用して、次のことを実行できます。
既存のアルゴリズム C コードを再利用する。また、シミュレーションを通じて、Simulink 制御アルゴリズムとの相互作用をテストする。レガシ コード ツールの使用方法を示す例については、Integrate C Function Whose Arguments Are Pointers to Structuresを参照してください。
既存のコードで定義された型とデータを再利用するコード (Simulink Coder™) を生成する。生成されたコードと既存のコードを単一のアプリケーションに統合し、コンパイルすることができます。例については、Exchange Structured and Enumerated Data Between Generated and External Code (Embedded Coder)を参照してください。
組織が C コード内で定義した標準のデータ型を使用して、モデル内でデータ (信号、パラメーター、状態) を作成および整理する。
Simulink で信号の構造体を作成するには、非バーチャル バスを使用します。バーチャル バスへの信号またはメッセージのグループ化を参照してください。
パラメーターの構造体を作成するには、MATLAB® 構造体と
Simulink.Parameterオブジェクトを使用します。関連するブロック パラメーター定義を構造体に整理を参照してください。列挙型データを作成するには、Simulink モデルでの列挙型データの使用を参照してください。
プリミティブ型の
typedefステートメントを一致させるには、Simulink.AliasTypeオブジェクトを使用して、モデル内でパラメーターと信号のデータ型を設定します。
既定では、関数は次のとおりです。
Simulink 列挙型の定義で説明されているように、
Simulink.IntEnumTypeから列挙型クラスを派生させるスクリプト ファイルを生成することで、列挙型をインポートする。その後、必要に応じてクラス定義を編集してカスタマイズできます (たとえば、addClassNameToEnumNamesメソッドを実装する)。ベース ワークスペース内で
Simulink.Busオブジェクトを生成することで、構造体型をインポートする。ベース ワークスペース内で
Simulink.AliasTypeオブジェクトを生成することで、プリミティブ型のtypedefステートメントをインポートする。ホスト コンピューターの語長に従って、
intまたはshortなどの汎用 C データ型を解釈します。たとえば、ほとんどの新しいマシンでは、intの語長は 32 なので、関数は、int構造体フィールドを Simulink データ型のint32を使用するバス要素として表します。この既定の動作をオーバーライドするには、
HardwareImplementationのペア引数を使用してターゲット ハードウェア ボードを特定します。
既定の動作の詳細については、ヒントを参照してください。
は、importInfo = Simulink.importExternalCTypes(modelName)modelName を使用して識別するモデルを解析することで、カスタム C データ型の Simulink 表現を生成します。モデルで [シミュレーション ターゲット] コンフィギュレーション パラメーターを使用し、シミュレーション時に含めるヘッダー ファイルを特定するには、ホスト コンピューターでモデルのシミュレーションを実行するため、この構文を使用して型をインポートします。この関数は、ホスト コンピューターの語長に従って汎用 C データ型を解釈します。
この構文を使用する場合、ターゲット モデルのコンフィギュレーション パラメーターと競合する可能性がある HardwareImplementation などのペア引数は使用しないでください。このようなペア引数をこの構文に使用すると、関数によって警告が生成されます。
は、1 つ以上の名前と値のペアの引数を使用して追加のオプションを指定します。この構文を使用して、次のことを実行できます。importInfo = Simulink.importExternalCTypes(___,Name,Value)
Namesペア引数を使用して、インポートする型の名前を指定する。Simulink によるインポートされた型の保存方法を制御する (たとえば、Simulink データ ディクショナリに型を生成する)。
MATFileとDataDictionaryのペアの引数を使用します。関数が汎用 C データ型を解釈する方法を制御します。
HardwareImplementationのペア引数を使用します。更新された C コード定義を再インポートしようとすることで、C コード定義と Simulink 表現の間の同期性を維持する。既存の Simulink 表現を上書きするかどうかを選択できます。
OverwriteとVerboseのペアの引数を使用します。
例
入力引数
名前と値の引数
出力引数
制限
この関数では、次のものはサポートされません。
Simulink でサポートされている型に対応していない C データ型。たとえば、Simulink では
long doubleと等価な型が認識されません。Simulink でサポートされているデータ型の詳細については、Simulink でサポートされているデータ型を参照してください。ポインター型。基本データ型がポインター型であるポインターまたは
typedefステートメントを値としてもつフィールドを定義する構造体など。共用体。
構造体フィールドが固定小数点データを表す場合、あるいは
typedefステートメントが固定小数点基本データ型にマップされる場合、関数は対応するバス要素またはSimulink.AliasTypeオブジェクトのデータ型に対して、関連する Simulink の整数型 (int16など) を設定します。インポーターは C コードを解析しても固定小数点のスケーリングを判断できません。この関数を使用した後、バス要素のデータ型またはSimulink.AliasTypeオブジェクトの基本データ型を関数fixdtを使用して手動で指定しなければなりません。
ヒント
次の場合は、インポートされる列挙型または構造体型を定義するヘッダー ファイルをインクルード (
#include) するようにモデルの [シミュレーション ターゲット] コンフィギュレーション パラメーターを構成する必要があります。型を MATLAB Function ブロックで使用する。インポートされたバスと列挙型定義の制御を参照してください。
型を Stateflow® チャートで使用する。Stateflow チャート内のカスタム コードの変数および関数へのアクセス (Stateflow)およびStateflow チャートのカスタム構造体の統合 (Stateflow)を参照してください。
型を C Function ブロックまたは C Caller ブロックで使用する。
型が
typedefステートメントで宣言されていない。
メモ
typedefステートメントで名前が指定されていない型をインポートするには、[シミュレーション ターゲット] コンフィギュレーション パラメーター [カスタム コードのインポート] が選択されていることを確認します。このパラメーターは既定では選択されています。既定では以下のようになります。
Simulink の列挙型クラスは
Simulink.IntEnumTypeから派生するため、インポートされた列挙型については、シミュレーションまたはコード生成をモデルから行う場合、列挙型はターゲット ハードウェアにとってネイティブな整数サイズを使用します。ターゲット ハードウェアの特性を指定するには、モデル コンフィギュレーション パラメーター ([製品デバイスのベンダーとタイプ] や [製品ハードウェアのネイティブ ワード サイズ] など) を使用します。インポートされた構造体型については次のとおりです。
フィールドが対応する Simulink Coder 構造体型のいずれかをデータ型として使用する場合のみ、関数は構造体フィールドを数値的な実数/複素数としてインポートする。たとえば、外部コードの構造体フィールドがデータ型
cint8_Tを使用する場合、関数はこのフィールドをバス要素 (Simulink.BusElementオブジェクト) としてインポートします。このバス要素のデータ型はint8で、そのComplexityプロパティは'complex'に設定されています。入れ子にされた構造体の場合、関数は一意の各構造体型に対してバス オブジェクトを生成する。
インポートされた構造体型または列挙型に関しては、型の名前を付けるために外部コードで
typedefステートメントが使用されている場合、生成されたバス オブジェクトまたは Simulink 列挙型クラスの名前はtypedefの名前に一致します。コードでtypedefステートメントを使用して型の名前を指定していない場合、オブジェクトまたはクラスの名前は型のタグ名になります。ただし、ヘッダー ファイルの他の場所にあるtypedefステートメントで定義されている型名と名前が競合する場合は例外で、その場合は Simulink にその型はインポートされません。タグ名を指定しなかったり、typedef名を適用しなかった場合は、Simulink はそのオブジェクトまたはクラスに対して任意の名前を生成します。関数は、シミュレーションおよびコード生成のためにインポートされたときに、生成された Simulink 表現を構成します。たとえば、バス オブジェクトに関しては、関数は
DataScopeプロパティを'Imported'に、HeaderFileプロパティを外部のヘッダー ファイルの名前に設定します。これらの Simulink 表現のいずれかを使用するモデルからシミュレーションやコード生成を行うには、モデルがヘッダー ファイルを利用できるようにしなければなりません。
たとえば、
DataDictionaryのペア引数を使用してSimulink.importExternalCTypesのファイルを使用または生成するように指定する場合は、次のようになります。使用する既存のファイルが現在のフォルダー内または MATLAB パス上に存在する場合、ファイル パスを指定する必要はありません。ファイル名だけを指定できます。
生成されたファイルのフォルダーの場所を管理する場合は、パスとファイル名を指定できます。
OutputDirのペア引数を使用することもできます。