Real-Time Workshop User's Guide | ![]() ![]() |
model_step
呼び出しインタフェース.. MODEL_STEP
マクロは、モデルの生成したステップ関数を呼び出すための標準的な方法です。
シングルレートモデルでは、マクロは、以下のプロトタイプをもつ関数呼び出しに展開されます。
voidmodel
_
step(void);
マルチレートモデルでは、マクロは、以下のプロトタイプをもつ関数呼び出しに展開されます。
voidmodel
_
step(int_Ttid
);
ここで、tid
はタスク識別子です。tid
は、rt_OneStep
内のロジックにより決定されます(rt_OneStepを参照)
操作. model
_
step
は、モデルアップデート関数と出力関数を単一のルーチンに結合させます。model
_
stepは、rt_OneStep
からの割り込みレベルで呼び出されるように設計され、タイマISRとして呼ばれることを仮定します。
シングルレート操作. シングルレートモデルでは、model
_
stepは、サンプルヒットするすべてのブロックのカレント値を計算します。ロギングが可能な場合は、model
_
stepはロギング変数をアップデートします。モデルの終了時間が有限の場合は、model
_
stepはカレントの時間が終了時間と等しいときに、実行の終了の信号を送ります。
マルチレート操作. マルチレートモデルでは、model
_step
の実行は、タスク識別子(tid
)引数の利用を除いて、シングルレートの実行とほとんど同じです。
呼び出し側(rt_OneStep
)は、各ブロックにtid
を割り当てます(rt_OneStepを参照)。 model
_step
はtid
引数を使って、どのブロックがサンプルヒットするかを決定します。
model_initialize
呼び出しインタフェース. MODEL_INITIALIZE
マクロは、モデルの生成した初期化コードを呼び出すための標準的な方法です。マクロは、つぎのプロトタイプをもつ関数呼び出しに展開されます。
voidmodel
_
initialize(boolean_T firstTime);
操作. 第1タイムステップが1(TRUE
)と等しい場合、model
_initialize
はモデルに固有のなリアルタイムオブジェクトとその他のデータ構造体を初期化します。第1タイムステップが0(FALSE
)と等しい場合、model
_initialize
はモデルの状態をリセットします。
第1タイムステップが1
(TRUE
)として渡されるmodel
_initialize
の1回の呼び出しが生成されます。
model_terminate
呼び出しインタフェース. MODEL_TERMINATE
は、モデルの生成した終了コードを呼び出すための標準的な方法です。マクロは、つぎのプロトタイプをもつ関数呼び出しに展開されます。
voidmodel
_
terminate(void);
操作. model
_terminate
が呼び出されるとき、終了関数をもつブロックは、その終了コードを実行します。ロギングが可能な場合は、model
_terminate
はデータロギングを終了します。model
_terminate
は、1回だけ呼び出されます。
エントリポイントを直接呼び出す方法
生成したマクロ呼び出しを、エントリポイントの直接呼び出しと置き換えることが可能です。これは、ユーザコードと、複数のモデルから生成されたコードとのインタフェースをとるときに必要です。その場合、マクロ呼び出しは、不明瞭になります。つぎのコードのように、エントリポイントを参照できるようにするためにmodel_
export
.h をユーザコードにインクルードします。
#include "modelA
_Export.h" /* Make model A entry points visible */ #include "modelB
_Export.h" /* Make model B entry points visible */ void myHandWrittenFunction(void) { const char_T *errStatus; modelA_initialize(1); /* Call model A initializer */ modelB_initialize(1); /* Call model B initializer */ /* Refer to model A's real-time Object */ errStatus = ssGetErrorStatus(modelA_rtO); /* Refer to model B's real-time Object */ errStatus = ssGetErrorStatus(modelB_rtO); }
注意
マルチレートrt_OneStep においてmodel _step 呼び出しを変更している場合、正しいtid 引数を渡すように注意してください。ベースサンプルレートに対して処理する最初の呼び出しは、常にtid 0を渡します。サブレートループで行われる呼び出しは、常にループ変数i を渡します。 |
![]() | rt_OneStep | ERTを使った自動S-ファンクションラッパーの生成 | ![]() |