メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

生成されたコードにおけるデータ構造体

R2026a

コード ジェネレーターは、モデルで使用されるデータをデータ構造体で整理します。各モデルに対して、コード ジェネレーターは信号や状態などのデータをグローバル構造体に保存します。この構造体は標準のデータ構造体とも呼ばれます。これらのデータ構造体を使用して、生成されたコードのデータにアクセスします。

リアルタイム モデル (rtModel) のデータ構造体はインスタンス固有のデータを含む最上位レベルのデータ構造体で、モデルはこれを再利用可能な関数に使用します。コード ジェネレーターは、このデータ構造体をマルチインスタンス コード ジェネレーションのみに使用します。

標準のデータ構造体

モデルにおけるルートレベルの Inport ブロックと Outport ブロックは、ブロック アルゴリズムの基本入力と基本出力を表します。既定では、コード ジェネレーターは、これらのブロックを入出力データを保存する標準の構造体に集約します。

信号線、ブロック パラメーター、状態、およびその他のモデル データが、生成コードに標準の構造体のフィールドとして表示されます。一般的な情報については、生成されたコードによる内部信号、状態、パラメーター データの保存方法を参照してください。

次の表に、生成されたコードの一般的なデータ構造体をいくつか示します。構造体型の名前、および該当する場合は、モデルから生成したコード内の構造体変数はモデル設定によって異なります。この設定に関係なく、コードの構造体型の名前には、表の「構造体型の短縮名」列に示されている短縮名が含まれます。

モデルに対して生成されるデータ構造体

構造体型の短縮名構造体で表されるデータ
ExtU

ルート Inport ブロックからのデータ

ExtY

ルート Outport ブロックからのデータ

B

ブロックの出力信号

ConstB

インライン化できなかった定数値のブロック出力

P

ブロック パラメーター

ConstP

インライン化できなかった定数値のパラメーター

DW

ブロックの離散状態

XDis

Enabled Subsystem のステータス

InstP

パラメーター引数

SharedDSMShared local data stores

以下を使用して、これらの構造体にデータが表示されないように指定できます。

  • ストレージ クラスの直接適用。たとえば、ストレージ クラスを使用して、信号、調整可能なパラメーター、状態を個別のグローバル変数として表すことができます。詳細については、C Data Code Interface Configuration for Model Interface Elementsを参照してください。

  • [コンフィギュレーション パラメーター] ダイアログ ボックスの [最適化] ペインにあるパラメーターなどのコンフィギュレーション パラメーター。これらのコンフィギュレーション パラメーターを調整して、既定のデータ表現を制御できます。詳細については、モデル コンフィギュレーション パラメーター: コード生成の最適化を参照してください。

リアルタイム モデル データ構造体

Simulink® ソフトウェアには、S-Function のシミュレーション データ構造体 (SimStruct) のフィールドにアクセスするための一連の関数が用意されています。コード ジェネレーターは、SimStruct を最適化されたリアルタイム モデル (rtModel) データ構造体に置き換えます。

GRT および ERT システム ターゲット ファイルを使用したコード生成では、リアルタイム モデル データ構造体 (rtModel) が使用されます。この構造体は、シミュレーション構造体 SimStruct よりずっとコンパクトな形式でモデル固有の情報をカプセル化します。モデルによっては、モデル固有の情報には再利用可能な関数の内部データやエラー状態などのデータが含まれます。

[コード インターフェイスのパッケージ化] モデル コンフィギュレーション パラメーターを [再利用可能な関数] に設定した場合、コード ジェネレーターはモデル データ (ブロック I/O、Dwork、パラメーターなど) をリアルタイム モデル データ構造体にパッケージ化します。モデルに絶対時間または経過時間に依存するブロックが含まれている場合、コード ジェネレーターは、[コード インターフェイスのパッケージ化] パラメーターの設定に関係なく、タイマー サービス コードをリアルタイムのモデル データ構造体にパッケージ化します。コード ジェネレーターは、リアルタイム モデル データ構造体を生成されたモデルのエントリポイント関数に、参照によって渡します。[ルートレベル I/O を以下として渡す] を [モデル データ構造体の一部] に設定した場合、コード ジェネレーターはルートレベルのモデルの入力と出力をリアルタイム モデル データ構造体にパッケージ化します。

生成コードの効率的な機能は、SimStruct よりも rtModel の生成に依存します。これには次が含まれます。

  • 整数の絶対値および経過時間サービス

  • 非同期のタスク用の独立タイマー

  • 信号、状態、およびパラメーターの監視用の改善された C API コードの生成

  • サイズを最小化するためのデータ構造体の枝刈り (ERT から派生したシステム ターゲット ファイルのみ)

リアルタイム モデル データ構造体は、モデルをビルドするときに生成される main.c または main.cpp ファイルで定義されます。ERT モデルの場合、モデル コンフィギュレーション パラメーター [メイン プログラム例の生成] をオフにすると、rtmodel.h ファイルが生成されます。rtmodel.h ファイルには、rt_main.c または rt_cppclass_main.cpp の静的なメイン プログラム モジュールに必要な #include 命令が含まれます。rt_main.c または rt_cppclass_main.cpp には、モデル固有のデータ構造体とエントリ ポイントにアクセスするための rtmodel.h が含まれています。静的なメイン プログラム モジュールはコード生成時に作成されないためです。

コード ジェネレーターは、rtModel データ構造体にアクセスするための一連のマクロ (C) またはメソッド (C++) を提供します。これらのマクロまたはメソッドは、S-Function が SimStruct データ (コード ジェネレーターがコンパイルするインラインでない S-Function を含む) にアクセスするために使用する ssSetxxx および ssGetxxx の各マクロと類似しています。

一連のマクロ (rtmGetxxx と rtmSetxxx) またはメソッド (getxxx と getxxx) を使用して、リアルタイム モデル データ構造体にアクセスします。これらのマクロまたはメソッドはそれぞれ、外部コードの main.c または main.cpp モジュールだけでなく、生成コード内でも使用されます。main.c または main.cpp (静的ファイルまたは生成ファイル) をカスタマイズする場合は、ssSetxxx および ssGetxxx マクロの代わりに、rtmGetxxx および rtmSetxxx マクロまたは getxxx および setxxx メソッドを使用します。

rtmGetxxx および rtmSetxxx マクロ、または getxxx および setxxx メソッドは、ssSetxxx と ssGetxxx を使用する場合と同じ方法で使用します。ただし、SimStruct S をリアルタイム モデル データ構造体 rtM で置き換えます。rt_main.c で使用される rtmGetxxx および rtmSetxxx マクロと、rt_main.cpp で使用される getxxx および setxxx メソッドを次の表に示します。ここで、rtm はリアルタイム モデル データ構造体へのポインターです。

リアルタイム モデル データ構造体にアクセスするためのマクロおよびメソッド

rtm マクロ構文

rtm メソッド構文

説明

rtmGetdX(rtm)

rtm->getdX()

ブロックの連続状態の導関数を取得します

rtmGetOffsetTimePtr(rtm)

rtm->getOffsetTimePtr()

rtM に関連するモデルのサンプル時間オフセットを格納するベクトルへのポインターを返します

rtmGetNumSampleTimes(rtm)

rtm->getNumSampleTimes()

ブロックのサンプル時間の数を取得します

rtmGetPerTaskSampleHitsPtr(rtm)

rtm->getPerTaskSampleHitsPtr()

NumSampleTime 行 NumSampleTime 列への行列のポインターを返します

rtmGetRTWExtModeInfo(rtm)

rtm->getRTWExtModeInfo()

モデルのエクスターナル モード情報のデータ構造体を返します (コード ジェネレーターでエクスターナル モードにのみ使用)

rtmGetRTWLogInfo(rtm)

rtm->getRTWLogInfo()

コード ジェネレーターによるログの記録で使用されるデータ構造体を返します (コード ジェネレーターでのみ使用)

rtmGetRTWRTModelMethodsInfo(rtm)

rtm->getRTWRTModelMethodsInfo()

リアルタイム モデル メソッド情報のデータ構造体を返します (コード ジェネレーターでのみ使用)

rtmGetRTWSolverInfo(rtm)

rtm->getRTWSolverInfo()

モデル ソルバー情報を含むデータ構造体を返します (コード ジェネレーターでのみ使用)

rtmGetSampleHitPtr(rtm)

rtm->getSampleHitPtr()

サンプル ヒット フラグ ベクトルへのポインターを返します

rtmGetSampleTime(rtm,TID)

rtm->getSampleTime(int TID)

タスクのサンプル時間を取得します

rtmGetSampleTimePtr(rtm)

rtm->getSampleTimePtr()

タスクのサンプル時間へのポインターを取得します

rtmGetSampleTimeTaskIDPtr(rtm)

rtm->getSampleTimeTaskIDPtr()

タスクの ID へのポインターを取得します

rtmGetSimTimeStep(rtm)

rtm->getSimTimeStep()

シミュレーション ステップ型 ID を返します (MINOR_TIME_STEP、MAJOR_TIME_STEP)

rtmGetStepSize(rtm)

rtm->getStepSize()

モデルの基本ステップ サイズを返します

rtmGetT(rtm)

rtm->getT()

現在のシミュレーション時間を取得します

rtmSetT(rtm,t)

rtm->setT(time_T t)

次のサンプル ヒットの時間を設定します

rtmGetTaskTime(rtm,tid)

rtm->getTaskTime(int tid)

現在のタスク用の現在の時間を取得します

rtmGetTFinal(rtm)

rtm->getTFinal()

シミュレーション終了時間を取得します

rtmSetTFinal(rtm,finalT)

rtm->setTFinal(time_T aTFinal)

シミュレーション終了時間を設定します

rtmGetTimingData(rtm)

rtm->getTimingData()

モデルのタイミング エンジンが使用するデータ構造体を返します (コード ジェネレーターでのみ使用)

rtmGetTPtr(rtm)

rtm->getTPtr()

現在の時間へのポインターを返します

rtmGetTStart(rtm)

rtm->getTStart()

シミュレーション開始時間を取得します

rtmIsContinuousTask(rtm)

rtm->isContinuousTask()

タスクが連続するかどうかを決定します

rtmIsMajorTimeStep(rtm)

rtm->isMajorTimeStep()

シミュレーションがメジャー ステップ内にあるかどうかを決定します

rtmIsSampleHit(rtm,tid)

rtm->isSampleHit(int tid)

サンプル時間がヒットするかどうかを決定します

rtmGetErrorStatus(rtm)rtm->getErrorStatus()

現在のエラー ステータスを取得します

rtmSetErrorStatus(rtm,val)rtm->setErrorStatus(const char_T* const aErrorStatus)

現在のエラー ステータスを設定します

rtmGetErrorStatusPointer(rtm)rtm->getErrorStatusPtr()

現在のエラー ステータスへのポインターを返します

rtmGetStopRequested(rtm)rtm->getStopRequested()

停止が要求されたかどうかを返します

rtmSetStopRequested(rtm,val)rtm->setStopRequested(int val)停止要求フラグを設定します
rtmGetBlockIO(rtm)rtm->getBlockIO()

ブロック I/O データ構造体を取得します

rtmSetBlockIO(rtm,val)rtm->setBlockIO(B_modelName_T* aBlockIO)

ブロック I/O データ構造体を設定します

rtmGetContStates(rtm)rtm->getContStates()

連続状態データ構造体を取得します

rtmSetContStates(rtm,val)rtm->setContStates(X_modelName_T* aContStates)

連続状態データ構造体を設定します

rtmGetDefaultParam(rtm)rtm->getDefaultParam()

既定のパラメーター データ構造体を取得します

rtmSetDefaultParam(rtm,val)rtm->setDefaultParam(P_modelName_T* aDefaultParam)

既定のパラメーター データ構造体を設定します

rtmGetPrevZCSigState(rtm)rtm->getPrevZCSigState()

以前のゼロクロッシング信号状態のデータ構造体を取得します

rtmSetPrevZCSigState(rtm,val)rtm->setPrevZCSigState(PrevZCSigStates_modelName_T* aPrevZCSigState)

以前のゼロクロッシング信号状態のデータ構造体を設定します

rtmGetRootDWork(rtm)rtm->getRootDWork()

DWork データ構造体を取得します

rtmSetRootDWork(rtm,val)rtm->setRootDWork(DW_modelName_T* aRootDWork)

DWork データ構造体を設定します

rtmGetU(rtm)rtm->getU()

ルート入力データ構造体を取得します (ルート入力がモデル データ構造体の一部として渡された場合)

rtmSetU(rtm,val)rtm->setU(ExtU_modelName_T* aU)

ルート入力データ構造体を設定します (ルート入力がモデル データ構造体の一部として渡された場合)

rtmGetY(rtm)rtm->getY()

ルート出力データ構造体を取得します (ルート出力がモデル データ構造体の一部として渡された場合)

rtmSetY(rtm,val)rtm->setY(ExtY_modelName_T* aY)

ルート出力データ構造体を設定します (ルート出力がモデル データ構造体の一部として渡された場合)

詳細については、S-Function SimStruct Functionsを参照してください。

参考

トピック