Main Content

model.rtw ファイル内のデータ オブジェクト情報

ビルド フォルダーにある model.rtw ファイルにアクセスして生成コードに関するメタ情報を取得できます。

ビルド プロセス中、コード ジェネレーターは、Simulink® の信号とパラメーターのデータ オブジェクトに関する情報を model.rtw ファイルに書き込みます。特定の条件を満たすパラメーターまたは信号のそれぞれについて、CoderInfo プロパティ情報をもつ Object レコードが書き込まれます。これらの条件については、パラメーターのオブジェクト レコードおよび信号のオブジェクト レコードで説明しています。

Object レコードには、関連付けられたデータ オブジェクトに対応する情報が格納されます。Object レコードにアクセスするには、Target Language Compiler コードを記述する必要があります (Target Language Compiler (TLC) コードを使用したデータ オブジェクト情報へのアクセスを参照)。

データによっては、ストレージ クラスを定義すると便利な場合があります。詳細については、ストレージ クラスの TLC コードの記述によるデータ表現の詳細な制御を参照してください。Embedded Coder® が必要です。

メモ

以下の Object レコードの例は、モデル例 ConfigurationRapidPrototypingInterface から生成したものです。パラメーターと信号は ExportedGlobal ストレージ クラスを使用して個別に構成されています。

パラメーターのオブジェクト レコード

次の条件を満たす各パラメーターについて、model.rtw ファイルの ModelParameters セクションに CoderInfo プロパティ情報をもつ Object レコードが含まれます。

  • パラメーターが Simulink.Parameter データ オブジェクト、または Simulink.Parameter クラスから派生したクラスのパラメーター データ オブジェクトに関連付けられている。

  • パラメーター シンボルが生成コードで保持される。シンボルが保持されるのは、データ オブジェクトの CoderInfo.StorageClass プロパティが Auto に設定されていない場合と、コード マッピング エディターまたは coder.mapping.api.CodeMapping オブジェクトを使用して個々のパラメーターのストレージ クラスが設定されている場合です。

次の例は、パラメーターの Object レコードの一部を示しています。

ModelParameters {
  NumParameters     10
  ...
    Parameter {
      Identifier	      "K1"
      LogicalSrc	      P7    
      WorkspaceVarName	      "K1"
      Protected		      no
      Tunable		      yes
      StorageClass	      "ExportedGlobal"
      Value		      [2]
      OriginalDataTypeIdx     2
      CGTypeIdx		      36
      ContainerCGTypeIdx      42
      IsPublic		      1
      ReferencedBy	      Matrix(1,4)
[[1, 0, 4, 2];]
      GraphicalRef	      Matrix(1,2)
[[0, 10];]
      GraphicalSource	      [-1, -1]
      OwnerSysIdx	      [1, -1]
      HasObject		      1
      Object {
        Package			Simulink
        Class			Parameter
        ObjectProperties {
          Value			  2.0
          CoderInfo {
            Object {
            Package		      Simulink
            Class		      CoderInfo
            ObjectProperties {
              HasCoderInfo		1
              StorageClass		"ExportedGlobal"
              TypeQualifier		""
              Alias			""
              Alignment		-1
              IsCSCPackageOverridden	0
              CSCPackageName		"Simulink"
              ParameterOrSignal	"Parameter"
              CustomStorageClass	"Default"
              CustomAttributes {
                Object {
                  Package		    SimulinkCSC
                  Class		    AttribClass_Simulink_Default
                  ObjectProperties {
		     }
		 }
	      }
	     }
	    }
	   }
  ...
}

信号のオブジェクト レコード

シンボルが生成コードで保持される各信号 (ルートレベルの Inport ブロックと Outport ブロックを含む) について、model.rtw ファイルの ExternalOutputsExternalInputs、または BlockOutputs のいずれかのセクションに CoderInfo プロパティ情報をもつ Object レコードが含まれます。シンボルが保持されるのは、信号で Auto 以外のストレージ クラスを使用し、個別にマッピングされている場合です。

信号シンボルが生成コードで保持され、次の条件を満たす各信号について、model.rtw ファイルに CoderInfo プロパティ情報をもつ Object レコードが含まれます。

  • データ オブジェクトの CoderInfo.StorageClass プロパティが Auto に設定されていない。

  • コード マッピング エディターまたは coder.mapping.api.CodeMapping オブジェクトを使用して、データ オブジェクトが事前定義済みストレージ クラスに個別にマッピングされている。

生成コードで構造化されていないグローバル変数にするように信号を構成すると、その有効性と一意性が確保され、シンボルが保持されます。

次の例は、ルートレベルの Outport ブロックの Object レコードの一部を示しています。

ExternalOutputs {
  ...
  NumExternalOutputs	    1
  ...
    ExternalOutput {
      ArgSrc		      Y0
      Block		      [1,3]
      BlockName		      "<Root>/Out1"
      GrSrc		      [0, 4]
      Identifier	      "output"
      StorageClass	      "ExportedGlobal"
      HasObject		      1
      Object {
        Package			Simulink
        Class			Signal
        ObjectProperties {
          CoderInfo {
            Object {
              Package		      Simulink
              Class		      CoderInfo
              ObjectProperties {
                HasCoderInfo		1
                StorageClass		"ExportedGlobal"
                TypeQualifier		""
                Alias			"output"
                Alignment		-1
                IsCSCPackageOverridden	0
                CSCPackageName		"Simulink"
                ParameterOrSignal	"Signal"
                CustomStorageClass	"Default"
                CustomAttributes {
                  Object {
                    Package		    SimulinkCSC
                    Class		    AttribClass_Simulink_Default
                    ObjectProperties {
                    }
                  }
                }
              }
            }
          }
  ...
}

Target Language Compiler (TLC) コードを使用したデータ オブジェクト情報へのアクセス

ここでは、TLC コードを使用して model.rtw ファイル内のデータ オブジェクト情報にアクセスする方法をサンプル コードで示します。

パラメーター オブジェクト レコードへのアクセス

次のコード フラグメントは、model.rtw ファイルの ModelParameters セクションにある Parameter 構造体を反復処理します。このコードはパラメーターの Object レコードから情報を抽出します。

%with CompiledModel.ModelParameters
  %foreach modelParamIdx = NumParameters
    %assign thisModelParam = Parameter[modelParamIdx]
    %assign paramName = thisModelParam.Identifier
    %if EXISTS("thisModelParam.Object.ObjectProperties")
      %with thisModelParam.Object.ObjectProperties
        %assign valueInObject = Value
        %with CoderInfo.Object.ObjectProperties
          %assign storageClassInObject  = StorageClass
        %endwith
        %% ***********************************
        %% Access user-defined properties here
        %% ***********************************
        %if EXISTS("MY_PROPERTY_NAME")
          %assign userDefinedPropertyName = MY_PROPERTY_NAME
        %endif
        %% ***********************************
      %endwith
    %endif
  %endforeach
%endwith

信号オブジェクト レコードへのアクセス

次のコード フラグメントは、model.rtw ファイルの BlockOutputs セクションにある ExternalBlockOutput 構造体を反復処理します。このコードは信号の Object レコードから情報を抽出します。

%with CompiledModel.BlockOutputs
  %foreach blockOutputIdx = NumExternalBlockOutputs
    %assign thisBlockOutput = ExternalBlockOutput[blockOutputIdx]
    %assign signalName = thisBlockOutput.Identifier
    %if EXISTS("thisBlockOutput.Object.ObjectProperties")
      %with thisBlockOutput.Object.ObjectProperties
        %with CoderInfo.Object.ObjectProperties
          %assign storageClassInObject  = StorageClass
        %endwith \
        %% ***********************************\
        %% Access user-defined properties here\
        %% ***********************************
        %if EXISTS("MY_PROPERTY_NAME")
          %assign userDefinedPropertyName = MY_PROPERTY_NAME
        %endif
        %% ***********************************
      %endwith
    %endif
  %endforeach
%endwith

関連するトピック