Using Simulink    

ブロックのアップデート順の決定

シミュレーション中に、Simulinkは、モデルのブロックの状態と出力を時間ステップ毎に1回アップデートします。そのため、ブロックがアップデートされる順番は、結果の正当性にとって重要です。特に、カレントの時間ステップでブロックの出力が入力の関数である場合、ブロックは、入力が接続しているブロックの後にアップデートされなければなりません。そうでない場合は、ブロックの出力は不正になります。ブロックがモデルファイルに格納される順番は、必ずしもシミュレーション中にアップデートされる必要がある順番ではありません。その結果、Simulinkはモデルの初期化フェーズ中にブロックを正しい順番に並べ替えます。

Direct Feedthroughブロック

有効なアップデートの順番を作成するために、Simulinkは、出力と入力との関係にしたがって、ブロックをカテゴリ分けします。カレントの出力がカレントの入力に依存するブロックは、direct feedthrough ブロックと呼ばれます。それ以外のすべてのブロックは、nondirect-feedthrough ブロックと呼ばれます。direct-feedthrough ブロックの例には、Gain, Product, Sumブロックが含まれます。nondirect-feedthrough ブロックの例には、Integratorブロック(出力は純粋に状態の関数です)、Constantブロック(入力をもちません)、Memoryブロック(出力が前の時間ステップの入力に依存します)が含まれます。

ブロックの並べ替えの規則

Simulinkは、つぎの基本的なアップデートの規則を使って、ブロックを並べ替えます。

これらの規則の適用の結果は、nondirect-feedthroughブロックが順番を特定せずにリストの先頭にあり、そのつぎにdirect-feedthroughブロックが接続するブロックに対して有効な入力を与えるような順番で現れるアップデートリストとなります。

並べ替え処理中に、Simulinkは代数ループ、つまり、direct-feedthroughブロックの出力が直接または間接的に入力と接続される信号ループの発生をチェックしてフラグを付けます。 そのようなループは、Simulinkは出力を計算するためにdirect-feedthroughブロックの入力を必要とするため、外見ではdeadlock condition を作成します。しかし、代数ループは、ブロックの入力と出力が未知である連立代数方程式を表わすことができます。さらに、これらの方程式は、各時間ステップで有効な解をもつことができます。従って、Simulinkは、実際にdirect-feedthroughブロックを含むループが代数方程式を表わすと仮定し、ブロックがシミュレーション中のアップデートされるたびに方程式を解こうとします。 詳細は、代数ループを参照してください。


 時間ステップ毎の処理 Atomicサブシステムと仮想サブシステム