メインコンテンツ

mdlUpdate

ブロックの状態の更新

必須

いいえ

言語

C、C++

構文

#define MDL_UPDATE
void mdlUpdate(SimStruct *S, int_T tid)

引数

S

S-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 より前に導入