model
.rtw
ファイル内のデータ オブジェクト情報
model
.rtwビルド フォルダーにある
ファイルにアクセスして生成コードに関するメタ情報を取得できます。model
.rtw
ビルド プロセス中、コード ジェネレーターは、Simulink® の信号とパラメーターのデータ オブジェクトに関する情報を
ファイルに書き込みます。特定の条件を満たすパラメーターまたは信号のそれぞれについて、model
.rtwCoderInfo
プロパティ情報をもつ Object
レコードが書き込まれます。これらの条件については、パラメーターのオブジェクト レコードおよび信号のオブジェクト レコードで説明しています。
Object
レコードには、関連付けられたデータ オブジェクトに対応する情報が格納されます。Object
レコードにアクセスするには、Target Language Compiler コードを記述する必要があります (Target Language Compiler (TLC) コードを使用したデータ オブジェクト情報へのアクセスを参照)。
データによっては、ストレージ クラスを定義すると便利な場合があります。詳細については、ストレージ クラスの TLC コードの記述によるデータ表現の詳細な制御を参照してください。Embedded Coder® が必要です。
メモ
以下の Object
レコードの例は、モデル例 rtwdemo_configrpinterface
から生成したものです。パラメーターと信号は ExportedGlobal
ストレージ クラスを使用して個別に構成されています。
パラメーターのオブジェクト レコード
次の条件を満たす各パラメーターについて、
ファイルの model
.rtwModelParameters
セクションに 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
.rtwExternalOutputs
、ExternalInputs
、または BlockOutputs
のいずれかのセクションに CoderInfo
プロパティ情報をもつ Object
レコードが含まれます。シンボルが保持されるのは、信号で Auto
以外のストレージ クラスを使用し、個別にマッピングされている場合です。
信号シンボルが生成コードで保持され、次の条件を満たす各信号について、
ファイルに model
.rtwCoderInfo
プロパティ情報をもつ 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
.rtwModelParameters
セクションにある 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
.rtwBlockOutputs
セクションにある 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