Main Content

Simulink.importExternalCTypes

C または C++ コードで定義されたカスタム データ型の Simulink 表現の生成

説明

importInfo = Simulink.importExternalCTypes(headerFiles) は、typedefstructenum 型定義の headerFiles で特定された C または C++ のヘッダー ファイル (.h または .hpp) を解析し、その型の Simulink® 表現を生成します。出力 importInfo は、正常にインポートされた型と正常にインポートされなかった型を識別します。

Simulink 表現を使用して、次のことを実行できます。

既定では、関数は次のとおりです。

  • 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 などのペア引数は使用しないでください。このようなペア引数をこの構文に使用すると、関数によって警告が生成されます。

importInfo = Simulink.importExternalCTypes(___,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して追加のオプションを指定します。この構文を使用して、次のことを実行できます。

  • Names ペア引数を使用して、インポートする型の名前を指定する。

  • Simulink によるインポートされた型の保存方法を制御する (たとえば、Simulink データ ディクショナリに型を生成する)。MATFileDataDictionary のペアの引数を使用します。

  • 関数が汎用 C データ型を解釈する方法を制御します。HardwareImplementation のペア引数を使用します。

  • 更新された C コード定義を再インポートしようとすることで、C コード定義と Simulink 表現の間の同期性を維持する。既存の Simulink 表現を上書きするかどうかを選択できます。OverwriteVerbose のペアの引数を使用します。

すべて折りたたむ

この例では、C 構造体型 (struct) と列挙 (enum) データ型の Simulink 表現をヘッダー ファイルから生成する方法を説明します。

現在のフォルダーで、ファイル ex_cc_simpleTypes.h を作成します。

typedef enum {
  PWR_LOSS = 0,                 /* Default value */
  OVERSPD,
  PRESS_LOW,
} fault_T;

typedef struct {
    double coeff;
    double init;
} params_T;

Simulink.importExternalCTypes を呼び出すことで、その型の Simulink 表現を生成します。

Simulink.importExternalCTypes('ex_cc_simpleTypes.h');

関数は Simulink.Bus オブジェクト params_T をベース ワークスペースに作成します。

オブジェクトのプロパティを検査するには、型エディターを開きます。

typeeditor

各バス要素は、ex_cc_simpleTypes.h 内の対応する構造体フィールドに一致する名前とデータ型 (double) を使用します。

現在のフォルダー内で、列挙型 fault_T を列挙型クラスとして定義する生成ファイル fault_T.m を検査します。

バス オブジェクトと列挙型クラスを使用して、Simulink モデル内で信号とパラメーターのデータ型を設定できます。

この例では、カスタム データ型 (typedef) を使用するフィールドをもつ構造体型の Simulink 表現を生成する方法を説明します。

現在のフォルダーにファイル ex_integer_aliases.h を作成します。

typedef int sint_32;

typedef unsigned short uint_16;

現在のフォルダーにファイル ex_cc_struct_alias.h を作成します。

#include "ex_integer_aliases.h"

typedef struct {
    sint_32 accum;
    uint_16 index;
} my_ints_T;

構造体型をベース ワークスペース内の Simulink.Bus オブジェクトとして Simulink にインポートします。typedef ステートメントを Simulink.AliasType オブジェクトとしてインポートします。

Simulink.importExternalCTypes('ex_cc_struct_alias.h');

バス オブジェクトのバス要素のデータ型を検査します。たとえば、構造体フィールド accum に対応する最初のバス要素の DataType プロパティを検査します。

my_ints_T.Elements(1)
ans = 

  BusElement with properties:

              Name: 'accum'
        Complexity: 'real'
        Dimensions: 1
          DataType: 'sint_32'
               Min: []
               Max: []
    DimensionsMode: 'Fixed'
        SampleTime: -1
              Unit: ''
       Description: ''

関数 Simulink.importExternalCTypes は、生成された Simulink.AliasType オブジェクトを使用してバス要素のデータ型を設定します。

ベース ワークスペース内の Simulink.AliasType オブジェクトを検査します。たとえば、sint_32 という名前のオブジェクトは、ex_integer_aliases.h のいずれかの typedef ステートメントに対応します。

sint_32
sint_32 = 

  AliasType with properties:

    Description: ''
      DataScope: 'Imported'
     HeaderFile: 'ex_integer_aliases.h'
       BaseType: 'int32'

ほとんどのホスト コンピューターでは (既定で関数がターゲットとする)、int の語長は 32 ビット、unsigned short の語長は 16 ビットです。関数は intunsigned short を Simulink の int32 型と uint16 型にマッピングします。

Embedded Coder を使用している場合、モデルから生成したコードは、標準のデータ型名である int32_Tuint16_T の代わりに、sint_32uint_16 を使用できます。

この例では、インポートされたデータ型を Simulink データ ディクショナリに保存する方法を説明します。データ ディクショナリには、1 つ以上の Simulink モデルに関するデータ仕様 (信号やブロック パラメーター値に関する仕様など)、データ型、その他の設計データが保存されます。

現在のフォルダーで、ファイル ex_cc_simpleTypes.h を作成します。

typedef enum {
  PWR_LOSS = 0,            /* Default value */
  OVERSPD,
  PRESS_LOW,
} fault_T;

typedef struct {
    double coeff;
    double init;
} params_T;

myDictionaries という名前のサブフォルダーを作成します。

mkdir('myDictionaries')

Simulink.importExternalCTypes を呼び出すことで、その型の Simulink 表現を生成します。新しいサブフォルダーに新しいデータ ディクショナリ ex_cc_myTypes.sldd を作成することで、型定義を永続的に保存します。

Simulink.importExternalCTypes('ex_cc_simpleTypes.h',...
    'DataDictionary','ex_cc_myTypes.sldd',...
    'OutputDir','myDictionaries');

ディクショナリのコンテンツを検査するには、現在のフォルダーを myDictionaries に設定し、ディクショナリ ファイルをダブルクリックします。

ディクショナリ内の Simulink 表現を使用するには、モデルをディクショナリにリンクさせなければなりません。Simulink データ ディクショナリを使用するモデルの移行を参照してください。

この例では、名前で指定した列挙データ型と構造体データ型のみの Simulink 表現を生成する方法を説明します。

現在のフォルダーで、ファイル ex_cc_manySimpleTypes.h を作成します。このファイルでは、3 つの構造体型 params_Tsignals_Tstates_T が定義されます。

typedef struct {
    double coeff;
    double init;
} params_T;

typedef struct {
    double flow_rate;
    double steam_press;
} signals_T;

typedef struct {
    double accum;
    double error;
} states_T;

params_T および signals_T のみの Simulink 表現を生成します。

Simulink.importExternalCTypes('ex_cc_manySimpleTypes.h',...
    'Names',{'params_T','signals_T'});

Simulink.Bus オブジェクトの params_Tsignals_T がベース ワークスペースに表示されます。

既定では、Simulink.importExternalCTypes は、組み込みクラスの Simulink.IntEnumType から派生する列挙型クラスを作成することで列挙データ型を表します。生成されたクラスを使用するモデルからシミュレーションやコード生成を行う場合、モデルに対して選択したコンフィギュレーション パラメーター (たとえば、[ハードウェア実行] ペインなど) によって、Simulink.IntEnumType および列挙型クラスで採用される特定の整数値の長さが決定されます。

既定では、この関数はホスト コンピューターの語長に従って、short および int などのプリミティブ型の汎用 C データ型を解釈します。たとえば、int 構造体フィールドを表すために、この関数は通常、32 ビットのデータ型 int32 を対応するバス要素に適用します。ホスト コンピューター以外のハードウェア用にコードをシミュレーションして生成する場合、HardwareImplementation のペア引数を使用してターゲット ハードウェアを特定し、さらには、ハードウェアの語長を特定します。

この例では、16 ビット ハードウェアで使用するコードからデータ型をインポートする方法を説明します。このボードでは、int の長さは 16 ビットであり、列挙型データ (enum) の項目はそれぞれ 16 ビットを消費します。

現在のフォルダーで、ファイル ex_cc_intTypes.h を作成します。

typedef enum {
  PWR_LOSS = 0,            /* Default value */
  OVERSPD,
  PRESS_LOW,
} fault_T;

typedef struct {
    int coeff;
    int init;
} params_T;

列挙データ型と、汎用 C データ型 int を使用するフィールドをもつ構造体型がコードで定義されます。

構造体型の正確な Simulink 表現を生成するには、最初に既存のモデルを開くか、新しいモデルを作成します。この例では、ex_hdwImpl_16bit という名前の新しいモデルを作成します。

新しいモデルで、[コンフィギュレーション パラメーター]、[ハードウェア実行]、[デバイス ベンダー]Atmel に設定します。[デバイス タイプ]AVR に設定します。

あるいは、コマンド プロンプトで、次のコマンドを使用してモデルの作成や設定を行います。

new_system('ex_hdwImpl_16bit','Model');
set_param('ex_hdwImpl_16bit','ProdHWDeviceType','Atmel->AVR')

この型の Simulink 表現を生成します。ターゲットの 16 ビット ハードウェアの語長を指定するには、モデル コンフィギュレーション パラメーター ([ハードウェア実行] 設定も含む) を Simulink.ConfigSet オブジェクトとして抽出します。

configSet = getActiveConfigSet('ex_hdwImpl_16bit');
Simulink.importExternalCTypes('ex_cc_intTypes.h','HardwareImplementation',configSet);

Simulink.Bus オブジェクト params_T がベース ワークスペースに表示されます。coeff などのバス要素は、Simulink データ型 int16 を使用します。

params_T.Elements(1)
ans = 

  BusElement with properties:

              Name: 'coeff'
        Complexity: 'real'
        Dimensions: 1
          DataType: 'int16'
               Min: []
               Max: []
    DimensionsMode: 'Fixed'
              Unit: ''
       Description: ''

現在のフォルダー内では、ファイル fault_T.m によって列挙型クラス fault_T が定義されます。クラスは Simulink.IntEnumType から派生します。そのため、モデル コンフィギュレーション パラメーターを使用して、ターゲット ハードウェア、さらには正しいネイティブの整数値の長さを特定しなければなりません。

現在のフォルダーにファイル ex_cc_fixpt_struct.h を作成します。

typedef struct {
    
    int coeff;   /* Word length 16, 
       binary fraction length 7 */
    
    int init;   /* Word length 16, 
       binary fraction length 3 */
    
} params_T;

このファイルでは、固定小数点データ型を使用するフィールドをもつ構造体型が定義されます。たとえば、構造体はフィールド coeff を符号付きの 16 ビット整数データ型で保存します。2 進数の小数部の長さ 7 は、保存された整数値を実際の値に関連付けます。

このコードが 16 ビット ハードウェア (汎用 C データ型 int が 16 ビットの語長をもつような) 上で実行されるとします。この型の Simulink 表現を生成するには、最初にハードウェアを特定する coder.HardwareImplementation オブジェクトを作成します。

hdw = coder.HardwareImplementation;
hdw.ProdHWDeviceType = 'Atmel->AVR';

構造体型の Simulink 表現を生成します。

Simulink.importExternalCTypes('ex_cc_fixpt_struct.h',...
    'HardwareImplementation',hdw);

Simulink.Bus オブジェクト params_T がベース ワークスペースに表示されます。coeff などの各バス要素はデータ型 int16 を使用します。

params_T.Elements(1)
ans = 

  BusElement with properties:

              Name: 'coeff'
        Complexity: 'real'
        Dimensions: 1
          DataType: 'int16'
               Min: []
               Max: []
    DimensionsMode: 'Fixed'
              Unit: ''
       Description: ''

Simulink.importExternalCTypes は、C コードから固定小数点のスケーリング (2 進数の小数部の長さ) を推測できません。バス要素のデータ型を手動で指定しなければなりません。コマンド プロンプトでデータ型を指定するには、関数 fixdt を使用します。

params_T.Elements(1).DataType = 'fixdt(1,16,7)';
params_T.Elements(2).DataType = 'fixdt(1,16,3)';

(データ型アシスタントを使用して) データ型を対話的に指定するには、型エディターを使用します。

typeeditor

この例では、モデリング プロジェクトの有効期間中に定義を変更した C データ型の Simulink 表現を維持する方法について説明します。

カスタム C 型をインポートする

現在のフォルダーにファイル ex_cc_myTypes_rec.h を作成します。このファイルでは、カスタム構造体型が定義されます。

typedef struct {
    double flow;
    double pres;
    double tqe;
} sigStructType;

型を表す Simulink.Bus オブジェクトを生成します。

Simulink.importExternalCTypes('ex_cc_myTypes_rec.h');

C コードの型定義を変更する

ex_cc_myTypes_rec.h で、spd という名前のフィールドを sigStructType に追加します。

同じファイル内で、新しい構造体型 stateStructType を作成します。

typedef struct {
    double flow;
    double pres;
    double tqe;
    double spd;
} sigStructType;

typedef struct {
    double err;
    double read;
    double write;
} stateStructType;

型のインポートを再試行する

型を表すバス オブジェクトの生成を試みます。

importInfo = Simulink.importExternalCTypes('ex_cc_myTypes_rec.h');

この関数はコマンド プロンプトで警告を生成します。警告に従わずに、出力 importInfo を検査して、関数が型をインポートできなかったかどうかを判断することができます。

importInfo.failedToImport.Bus
ans =

  1×1 cell array

    {'sigStructType'}

この関数では、sigStructType はインポートされませんでした。ベース ワークスペース内の対応するバス オブジェクトに含まれるバス要素は、依然として 3 つだけです。関数が sigStructType をインポートしなかった理由を判断するには、importInforeport フィールドを検査します。

sigStructType を再度インポートします。今回は、既存のバス オブジェクトを上書きします。

importInfo = Simulink.importExternalCTypes('ex_cc_myTypes_rec.h',...
    'Names',importInfo.failedToImport.Bus,'Overwrite','on');

既存の Simulink 表現を上書きするとき、Simulink 表現に対して行ったカスタマイズ (バス要素への固定小数点データ型の適用など) はすべて上書きされます。

入力引数

すべて折りたたむ

解析するヘッダー ファイルの名前とパス。文字ベクトル、文字ベクトルの cell 配列、string または string 配列として指定します。ファイル拡張子の .h または .hpp が含まれます。

インクルードされる (#include) ヘッダー ファイルの階層を使用して型を定義する場合、HeaderFiles を指定するときはエントリポイント ファイルのみを特定する必要があります。この関数では、インクルードされるファイルと特定されたエントリポイント ファイルが解析されます。インクルードされたファイルが対応するエントリポイント ファイルと同じフォルダーに存在しない場合、IncludeDirs ペア引数を使用して追加のフォルダーを特定します。

例: 'myHeader.h'

例: {'thisHeader.hpp','thatHeader.hpp'}

データ型: char | cell | string

型をインポートするための、読み込まれた Simulink モデルの名前。文字ベクトルまたは string スカラーとして指定します。たとえば、モデルを開くか、関数 load_system を使用した場合にモデルが読み込まれます。この引数を使用すると、関数は次のことを実行します。

  • カスタム ヘッダー ファイルのモデル コンフィギュレーション パラメーターを検索し、ヘッダー ファイルを解析してインポートするデータ型を特定する。この検索に影響を与えるのは [シミュレーション ターゲット] ペインのコンフィギュレーション パラメーターのみです。

    たとえば、モデル内で [コンフィギュレーション パラメーター][シミュレーション ターゲット][インクルード ヘッダー]#include "myTypes.h" に設定した場合、関数は myTypes.h を解析してインポートする型を特定します。

  • ホスト コンピューターの語長に従って、int または short などの汎用 C データ型を解釈します。HardwareImplementation のペア引数を使用してこの解釈をオーバーライドしないでください。

例: 'myModel'

データ型: char | string

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後に表示されなければなりませんが、ペアの順序は重要ではありません。

R2021a より前は、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: Simulink.importExternalCTypes('myHdr.h','DataDictionary','myDictionary.sldd')

生成された Simulink.Bus オブジェクトと Simulink.AliasType オブジェクトを保存するために作成する MAT ファイルの名前と、必要に応じてパス。文字ベクトルまたは string として指定します。MATFile を使用しない場合、既定では、関数はベース ワークスペース内にオブジェクトを生成します。

この関数は MAT ファイルに列挙型定義を生成しません。

MATFile を使用して一部の struct 型とプリミティブ型の typedef ステートメントをインポートし、後で一部の同じ型を MATFile を使用して再度インポートする場合、関数は古い MAT ファイルを新しい MAT ファイルで完全に置換します。関数は、古い MAT ファイルのコンテンツに対して行ったすべての変更を破棄します。

MATFile および DataDictionary のペア引数を同時に使用することはできません。

例: 'myMat.mat'

例: 'myMat'

例: fullfile('subfolder','myMat')

データ型: char | string

生成された列挙型およびオブジェクトを保存するために使用または作成する Simulink データ ディクショナリの名前と、必要に応じてパス。文字ベクトルまたは string として指定します。このペア引数を使用すると、関数は列挙型を Simulink.data.dictionary.EnumTypeDefinition オブジェクトとしてインポートし、これらのオブジェクト (および Simulink.Bus オブジェクトと Simulink.AliasType オブジェクト) をターゲットのディクショナリに保存します。

データ ディクショナリの詳細については、データ ディクショナリとはを参照してください。

必要に応じて .sldd 拡張子を指定できます。

DataDictionary および MATFile のペア引数を同時に使用することはできません。

例: 'myDict.sldd'

例: 'myDict'

例: fullfile('subfolder','myDict.sldd')

データ型: char | string

インポートする型の名前。文字ベクトル、文字ベクトルの cell 配列、string または string 配列として指定します。既定では、Names を使用しない場合、関数は特定されたヘッダー ファイルが定義するすべてのカスタム型をインポートしようとします。

単一の文字ベクトルを使用して複数の型名を照合するには、アスタリスク (*) を使用します。

例: 'myEnumType'

例: {'myEnumType','myStructType'}

例: 'my*Type'

データ型: char | cell | string

C の型定義に影響を与えるマクロを定義するコンパイラ オプション。文字ベクトルまたは string スカラーとして指定します。たとえば、マクロが定義されているかを確認する #ifdef ブロック内に定義が含まれている場合、マクロは型定義に影響します。

そうでない場合は Defines を使用して、-D などのコンパイラ オプションを通じて定義するマクロ定義を指定します。

例: 'SIGSTRUCT=1'

例: 'SIGSTRUCT=1 ENUM=1'

データ型: char | string

C の型定義に影響を与えるマクロを削除するコンパイラ オプション。文字ベクトルまたは string スカラーとして指定します。たとえば、マクロが定義されているかを確認する #ifdef ブロック内に定義が含まれている場合、マクロは型定義に影響します。

そうでない場合は UnDefines を使用して、-U などのコンパイラ オプションを通じて定義するマクロの削除を指定します。

例: 'SIGSTRUCT'

例: 'SIGSTRUCT ENUM'

データ型: char | string

インクルードされた (#include) 下位のヘッダー ファイルを含むフォルダー。文字ベクトル、文字ベクトルの cell 配列、string または string 配列として指定します。プライマリ ヘッダー ファイル (headerFiles 引数によって指定) が依存する他のヘッダー ファイルを検索して解析する関数を有効にするには、このペア引数を使用します。

headerFiles 構文の代わりに modelName 構文を使用する場合、[シミュレーション ターゲット] コンフィギュレーション パラメーターを使用してインクルード パスを指定できます。この場合、IncludeDirs のペア引数を使用する必要はありません。

例: 'myHeaders'

例: fullfile('myProject','myHeaders')

例: {fullfile('myProject','myHeaders'),fullfile('myProject','myOtherHeaders')}

データ型: char | cell | string

生成されたファイルを保存するフォルダー。文字ベクトルまたは string として指定します。この関数は、生成されたファイル (classdef スクリプト ファイルやデータ ディクショナリ ファイルなど) をこのフォルダーに配置します。

指定するフォルダーは、関数を使用する前に存在していなければなりません。

例: 'myDictionaries'

例: fullfile('myProject','myDictionaries')

データ型: char | string

互換性のあるデータ型を C および C++ ヘッダー ファイルから解析およびインポートします。C++ 機能を含むヘッダー ファイルを指定する場合、Language'C++' に指定して互換性のある C データ型をインポートします。

データ型が hpp 拡張子付きのヘッダー ファイルからインポートされると、Language 設定が指定されてないか、'Auto' に設定されている場合、ヘッダー ファイルを解析するために 'C++' が選択されます。C++ クラスと C++ struct 型は無視されます。空の struct はインポートされません。

読み込まれたモデルからヘッダー ファイルをインポートするときに、Language が指定されていないか、'Auto' に設定されている場合、Language 設定はモデルのカスタム設定から継承されます。インポートされたモデルに既に Language 設定が [コンフィギュレーション パラメーター][シミュレーション ターゲット] にある場合、この設定の優先順位はインポートされたモデルの設定よりも低くなります。

プリミティブ型の汎用 C データ型を解釈するための語長。Simulink.ConfigSet または coder.HardwareImplementation (MATLAB Coder) オブジェクトとして指定します。

  • Simulink.ConfigSet オブジェクトを使用するには、getConfigSetgetActiveConfigSet などの関数を使用して、モデルからコンフィギュレーション セットを抽出することができます。この手法では、[コンフィギュレーション パラメーター] ダイアログ ボックスを使用してターゲット ハードウェアを特定することができます ([ハードウェア実行] コンフィギュレーション パラメーターから)。

  • coder.HardwareImplementation オブジェクト (プログラムで作成および構成) を使用するには、オブジェクトのプロパティ (ProdHWDeviceType など) を指定してターゲット ハードウェアを特定します。その後、オブジェクトはハードウェアのネイティブの整数サイズを反映する ProdBitPerInt などの他のプロパティを設定します。

関数はオブジェクトを検査し、int などの汎用 C データ型を解釈する際に採用する Simulink の整数データ型を判断します。たとえば、coder.HardwareImplementation オブジェクトを作成して 16 ビット ハードウェアを特定し、次に関数を使用して C データ型 int を使用するフィールドをもつ構造体型をインポートする場合、関数は Simulink データ型 int16 を使用するバス要素をもつバス オブジェクトを生成します。この関数は、テスト ハードウェアの設定ではなく、製品ハードウェアの設定を使用します。

Simulink モデルのハードウェア実行設定の詳細については、ランタイム環境オプションの構成 (Simulink Coder)を参照してください。

既存の Simulink 表現を上書きする指定。'on' または 'off' として指定します。インポートされた型の表現が既に Simulink 内に存在する場合、次のようになります。

  • 'off' を指定した場合、あるいは Overwrite を指定しなかった場合、関数はその型をインポートしません。出力引数 importInfo では、failedToImport フィールドによって型が示されます。

  • 'on' を指定した場合、関数は既存の Simulink 表現を上書きします。

関数を使用して一部の型をベース ワークスペースまたはデータ ディクショナリにインポートし、生成された Simulink 表現を後でカスタマイズする場合、この関数を再度使用して Overwrite'on' に設定すると、カスタマイズされた内容は保存されません。これらのカスタマイズには次のようなものがあります。

  • 列挙型クラスの定義における、追加のメソッドの実装または getDataScope などの生成されたメソッドの変更 (Simulink 列挙型のカスタマイズを参照)。

  • 生成された Simulink.Bus オブジェクトまたは Simulink.AliasType オブジェクトのプロパティの変更 (たとえば、バス要素のデータ型を固定小数点データ型に手動で設定)。

成功したインポート操作に対してメッセージを生成する指定。'on' または 'off' として指定します。

  • 'off' を指定した場合、あるいは Verbose を指定しなかった場合、関数は型を暗黙的にインポートします。型をインポートできない場合を除いて、メッセージがコマンド ウィンドウに表示されることはありません。

  • 'on' を指定した場合、関数はインポート処理中の各操作に対して、コマンド ウィンドウにメッセージを生成します。

出力引数

すべて折りたたむ

インポートされた型およびインポートされなかった型に関する情報。これらのフィールドをもつ構造体として返されます。

インポートされた型およびインポートされなかった型の説明。文字ベクトルとして返されます。このフィールドの値を検査し、関数が型をインポートできなかった理由を判断します。

インポートされなかった型。次のフィールドをもつ構造体として返されます。

フィールド名フィールドの値目的
Bus文字ベクトルの cell 配列インポートされなかった構造体 (struct) の型の名前。
Enum文字ベクトルの cell 配列インポートされなかった列挙型 (enum) の名前。
AliasType文字ベクトルの cell 配列インポートされなかったプリミティブ型 typedef ステートメントの名前。

正常にインポートされた型。次のフィールドをもつ構造体として返されます。

フィールド名フィールドの値目的
Bus文字ベクトルの cell 配列インポートされた構造体 (struct) の型の名前。生成された Simulink.Bus オブジェクトはこれらの名前を使用します。
Enum文字ベクトルの cell 配列インポートされた列挙型 (enum) の名前。生成された列挙型クラスまたは Simulink.data.dictionary.EnumTypeDefinition オブジェクトはこれらの名前を使用します。
AliasType文字ベクトルの cell 配列インポートされたプリミティブ型 typedef ステートメントの名前。生成された Simulink.AliasType オブジェクトはこれらの名前を使用します。

制限

  • この関数では、次のものはサポートされません。

    • Simulink でサポートされている型に対応していない C データ型。たとえば、Simulink では long double と等価な型が認識されません。Simulink でサポートされているデータ型の詳細については、Simulink でサポートされているデータ型を参照してください。

    • ポインター型。基本データ型がポインター型であるポインターまたは typedef ステートメントを値としてもつフィールドを定義する構造体など。

    • 共用体。

  • 構造体フィールドが固定小数点データを表す場合、あるいは typedef ステートメントが固定小数点基本データ型にマップされる場合、関数は対応するバス要素または Simulink.AliasType オブジェクトのデータ型に対して、関連する Simulink の整数型 (int16 など) を設定します。インポーターは C コードを解析しても固定小数点のスケーリングを判断できません。この関数を使用した後、バス要素のデータ型または Simulink.AliasType オブジェクトの基本データ型を関数 fixdt を使用して手動で指定しなければなりません。

ヒント

  • 次の場合は、インポートされる列挙型または構造体型を定義するヘッダー ファイルをインクルード (#include) するようにモデルの [シミュレーション ターゲット] コンフィギュレーション パラメーターを構成する必要があります。

    メモ

    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 のペア引数を使用することもできます。

バージョン履歴

R2017a で導入