mdlUpdate
ブロックの状態の更新
必須
いいえ
言語
C、C++
構文
#define MDL_UPDATE
void mdlUpdate(SimStruct *S, int_T tid)
引数
SS-Function ブロックを表す SimStruct。
tidタスク ID。
説明
Simulink® エンジンは、シミュレーションの各メジャー タイム ステップでこのオプションのメソッドを呼び出します。このメソッドは、現在のタイム ステップでの S-Function の状態を計算し、その状態を S-Function の状態ベクトルに保存する必要があります。また、このメソッドは、S-Function が各メジャー タイム ステップで実行する必要があるその他のタスクを実行できます。
このコードは、S-Function が 1 つ以上の離散状態をもつ場合、または直達を "もたない" 場合に使用します。
C MEX S-Function で mdlUpdate ルーチンが呼び出される必要があり、上記の 2 つの条件がどちらも満たされていない場合は、mdlInitializeSizes 関数で ssSetNumDiscStates マクロを使用して、この S-Function が離散状態をもつように指定します。
C MEX S-Function の tid (タスク ID) 引数は、mdlOutputs ルーチンの呼び出し時に実行されているタスクを指定します。この引数をマルチレート S-Function ブロックの mdlUpdate ルーチンで使用して、タスク固有のコード ブロックをカプセル化できます (Multirate S-Function Blocksを参照)。
C MEX S-Function にタスク固有のコード ブロックが含まれていない場合は、UNUSED_ARG マクロを使用して、tid 入力引数は必須であるが、コールバックの本体では使用されないことを示します。このために、次の行を挿入します。
UNUSED_ARG(tid)
上記を mdlUpdate での宣言の後に挿入します。
メモ
Simulink Coder™ を所有している場合、このメソッドを含むインラインでない C MEX S-Function のコードを生成する際は、メソッドが #if defined(MATLAB_MEX_FILE) ステートメントでラップされていないことを確認してください。以下に例を示します。
#define MDL_UPDATE
#if defined(MDL_UPDATE) && defined(MATLAB_MEX_FILE)
static void mdlUpdate(SimStruct *S, int_T tid)
{
/* Add mdlUpdate code here */
}
#endif define ステートメントでは、mdlUpdate メソッドを MATLAB® MEX ファイルでのみ使用できるようにします。S-Function がインライン化されていない場合、Simulink Coder はこのメソッドを使用できず、リンク エラーまたはランタイム エラーが発生します。
例
この関数を使用して離散状態を更新する例については、dsfunc.c を参照してください。この関数を使用して、時変連続伝達関数の伝達関数係数を更新する例については、stvctf.c を参照してください。
バージョン履歴
R2006a より前に導入