Main Content

生成コードに関するコード説明の取得

コード記述子 API を使用して、生成コードに関するメタ情報を取得できます。既定では、コード ジェネレーターはモデルの各ビルドに対して codedescriptor.dmr ファイルをビルド フォルダー内に作成します。アクセラレータ モードおよびラピッド アクセラレータ モードでモデルのシミュレーションを実行すると、codedescriptor.dmr は生成されません。

コードが生成されたら、コード記述子 API を使用できます。コード記述子 API を使用して、生成コード内の次の項目について記述します。

  • データ インターフェイス: 入力端子、出力端子、パラメーター、データ ストアおよび内部データ。

  • 関数インターフェイス: 初期化、出力、更新および終了。

  • データや関数インターフェイスの実行時の情報 (各インターフェイス エンティティのタイミング要件など)。

  • モデルの階層構造情報と参照モデルのコードの説明。

データ インターフェイス情報の取得

coder.descriptor.DataInterfaceオブジェクトは、生成されたコードの指定されたデータ インターフェイスのさまざまなプロパティを示します。モデル rtwdemo_comments には、4 つの入力端子、1 つの出力端子および調整可能な外部パラメーターがあります。モデル内のデータ インターフェイスの詳細については、coder.codedescriptor.CodeDescriptorオブジェクトとそのメソッドを使用してください。

1. ビルドと検査プロセス用に一時フォルダーを作成します。

currentDir = pwd;
[~,cgDir] = rtwdemodir();

2. モデルを開いて作成します。

open_system('rtwdemo_comments');
evalc('slbuild(''rtwdemo_comments'')');

3. 関数getCodeDescriptorを使用して、必要なモデルの coder.codedescriptor.CodeDescriptor オブジェクトを作成します。

codeDescriptor = coder.getCodeDescriptor('rtwdemo_comments');

4. 生成コード内のすべてのデータ インターフェイス タイプのリストを取得するには、getDataInterfaceTypesメソッドを使用します。

dataInterfaceTypes = codeDescriptor.getDataInterfaceTypes()
dataInterfaceTypes =

  5x1 cell array

    {'Inports'                 }
    {'Outports'                }
    {'Parameters'              }
    {'ExternalParameterObjects'}
    {'InternalData'            }

サポートされているすべてのデータ インターフェイスのリストを取得するには、getAllDataInterfaceTypesメソッドを使用します。

5. 特定のデータ インターフェイス タイプに関する詳細を取得するには、getDataInterfacesメソッドを使用します。

dataInterface = codeDescriptor.getDataInterfaces('Inports');

このメソッドによって、生成コード内の Inport ブロックのプロパティが返されます。

6. このモデルには 4 つの入力端子があるため、dataInterfacecoder.descriptor.DataInterface オブジェクトの配列です。配列の最初の位置にアクセスして、モデルの最初の入力端子の詳細を取得します。

dataInterface(1)
ans = 

  DataInterface with properties:
              Type: [1x1 coder.descriptor.types.Type]
               SID: 'rtwdemo_comments:99'
     GraphicalName: 'In1'
       VariantInfo: [1x0 coder.descriptor.VariantInfo]
    Implementation: [1x1 coder.descriptor.DataImplementation]
            Timing: [1x1 coder.descriptor.TimingInterface]
              Unit: ''
             Range: [1x0 coder.descriptor.Range]

関数インターフェイス情報の取得

関数インターフェイスは、生成されたコードのエントリポイント関数です。モデル rtwdemo_roll では、エントリポイント関数は model_initializemodel_step、および model_terminate です。モデル内の関数インターフェイスの詳細については、coder.descriptor.FunctionInterfaceオブジェクトを使用してください。

1. ビルドと検査プロセス用に一時フォルダーを作成します。

currentDir = pwd;
[~,cgDir] = rtwdemodir();

2. モデルを開いて作成します。

open_system('rtwdemo_roll');
evalc('slbuild(''rtwdemo_roll'')');

3. 関数getCodeDescriptorを使用して、必要なモデルの coder.codedescriptor.CodeDescriptor オブジェクトを作成します。

codeDescriptor = coder.getCodeDescriptor('rtwdemo_roll');

4. 生成コード内のすべての関数インターフェイス タイプのリストを取得するには、getFunctionInterfaceTypesメソッドを使用します。

functionInterfaceTypes = codeDescriptor.getFunctionInterfaceTypes()
functionInterfaceTypes =

  2x1 cell array

    {'Initialize'}
    {'Output'    }

サポートされているすべての関数インターフェイスのリストを取得するには、getAllFunctionInterfaceTypesメソッドを使用します。

5. 特定の関数インターフェイス タイプに関する詳細を取得するには、getFunctionInterfacesメソッドを使用します。

functionInterface = codeDescriptor.getFunctionInterfaces('Initialize')
functionInterface = 

  FunctionInterface with properties:
        Prototype: [1x1 coder.descriptor.types.Prototype]
     ActualReturn: [1x0 coder.descriptor.DataInterface]
      VariantInfo: [1x0 coder.descriptor.VariantInfo]
    FunctionOwner: [1x0 coder.descriptor.TypedRegion]
           Timing: [1x1 coder.descriptor.TimingInterface]
       ActualArgs: [1x0 coder.descriptor.DataInterface Sequence]

6. プロパティをさらに展開すると、詳細情報を取得できます。関数の戻り値、名前および引数を取得するには、以下を実行します。

functionInterface.Prototype
ans = 

  Prototype with properties:
          Name: 'rtwdemo_roll_initialize'
        Return: [1x0 coder.descriptor.types.Argument]
    HeaderFile: 'rtwdemo_roll.h'
    SourceFile: 'rtwdemo_roll.c'
     Arguments: [1x0 coder.descriptor.types.Argument Sequence]

モデルの階層構造情報の取得

coder.codedescriptor.CodeDescriptor オブジェクトを使用して、モデルの階層構造全体の情報を取得します。モデル rtwdemo_async_mdlreftop には参照モデルとしてモデル rtwdemo_async_mdlrefbot があります。

1. ビルドと検査プロセス用に一時フォルダーを作成します。

currentDir = pwd;
[~,cgDir] = rtwdemodir();

2. モデルを開いて作成します。

open_system('rtwdemo_async_mdlreftop');
evalc('slbuild(''rtwdemo_async_mdlreftop'')');

3. 関数getCodeDescriptorを使用して、必要なモデルの coder.codedescriptor.CodeDescriptor オブジェクトを作成します。

codeDescriptor = coder.getCodeDescriptor('rtwdemo_async_mdlreftop');

4. getReferencedModelNamesメソッドを使用して、すべての参照モデルのリストを取得します。

refModels = codeDescriptor.getReferencedModelNames()
refModels =

  1x1 cell array

    {'rtwdemo_async_mdlrefbot'}

5. 参照モデルの coder.codedescriptor.CodeDescriptor オブジェクトを取得するには、getReferencedModelCodeDescriptorメソッドを使用します。

refCodeDescriptor = codeDescriptor.getReferencedModelCodeDescriptor('rtwdemo_async_mdlrefbot');

これで、コード記述子 API で利用可能なすべてのメソッドを使用することで、refCodeDescriptor オブジェクトを使用して参照モデルに関する詳細を取得できます。

関連するトピック