| 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-ファンクションラッパーの生成 | ![]() |