生成されたコードにおけるデータ構造体
コード ジェネレーターは、モデルで使用されるデータをデータ構造体で整理します。各モデルに対して、コード ジェネレーターは信号や状態などのデータをグローバル構造体に保存します。この構造体は標準のデータ構造体とも呼ばれます。これらのデータ構造体を使用して、生成されたコードのデータにアクセスします。
リアルタイム モデル (rtModel
) のデータ構造体はインスタンス固有のデータを含む最上位レベルのデータ構造体で、モデルはこれを再利用可能な関数に使用します。コード ジェネレーターは、このデータ構造体をマルチインスタンス コード ジェネレーションのみに使用します。
標準のデータ構造体
モデルにおけるルートレベルの Inport ブロックと Outport ブロックは、ブロック アルゴリズムの基本入力と基本出力を表します。既定では、コード ジェネレーターは、これらのブロックを入出力データを保存する標準の構造体に集約します。
信号線、ブロック パラメーター、状態、およびその他のモデル データが、生成コードに標準の構造体のフィールドとして表示されます。一般的な情報については、生成されたコードによる内部信号、状態、パラメーター データの保存方法を参照してください。
次の表に、生成されたコードの一般的なデータ構造体をいくつか示します。構造体型の名前、および該当する場合は、モデルから生成したコード内の構造体変数はモデル設定によって異なります。この設定に関係なく、コードの構造体型の名前には、表の「構造体型の短縮名」列に示されている短縮名が含まれます。
モデルに対して生成されるデータ構造体
構造体型の短縮名 | 構造体で表されるデータ |
---|---|
ExtU | ルート Inport ブロックからのデータ |
ExtY | ルート Outport ブロックからのデータ |
B | ブロックの出力信号 |
ConstB | インライン化できなかった定数値のブロック出力 |
P | ブロック パラメーター |
ConstP | インライン化できなかった定数値のパラメーター |
DW | ブロックの離散状態 |
XDis | Enabled Subsystem のステータス |
InstP | パラメーター引数 |
SharedDSM | Shared 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 メソッド構文 | 説明 |
---|---|---|
|
| ブロックの連続状態の導関数を取得します |
|
| rtM に関連するモデルのサンプル時間オフセットを格納するベクトルへのポインターを返します |
|
| ブロックのサンプル時間の数を取得します |
|
|
|
|
| モデルのエクスターナル モード情報のデータ構造体を返します (コード ジェネレーターでエクスターナル モードにのみ使用) |
|
| コード ジェネレーターによるログの記録で使用されるデータ構造体を返します (コード ジェネレーターでのみ使用) |
|
| リアルタイム モデル メソッド情報のデータ構造体を返します (コード ジェネレーターでのみ使用) |
|
| モデル ソルバー情報を含むデータ構造体を返します (コード ジェネレーターでのみ使用) |
|
| サンプル ヒット フラグ ベクトルへのポインターを返します |
|
| タスクのサンプル時間を取得します |
|
| タスクのサンプル時間へのポインターを取得します |
|
| タスクの ID へのポインターを取得します |
|
| シミュレーション ステップ型 ID を返します ( |
|
| モデルの基本ステップ サイズを返します |
|
| 現在のシミュレーション時間を取得します |
|
| 次のサンプル ヒットの時間を設定します |
|
| 現在のタスク用の現在の時間を取得します |
|
| シミュレーション終了時間を取得します |
|
| シミュレーション終了時間を設定します |
|
| モデルのタイミング エンジンが使用するデータ構造体を返します (コード ジェネレーターでのみ使用) |
|
| 現在の時間へのポインターを返します |
|
| シミュレーション開始時間を取得します |
|
| タスクが連続するかどうかを決定します |
|
| シミュレーションがメジャー ステップ内にあるかどうかを決定します |
|
| サンプル時間がヒットするかどうかを決定します |
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を参照してください。