最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

実行順序の制御と表示

実行順序とは

シミュレーションの更新段階で、Simulink® はシミュレーション中にブロック メソッドを呼び出す順序を判断します。このブロックの呼び出し順序が "実行順序" です。

この順序を設定することはできませんが、非バーチャル ブロックに優先順位を割り当て、Simulink にその他のブロックに対する相対的な実行順序を指示することができます。Simulink は、データの依存関係と競合がない限り、ブロック優先順位の設定を守ろうとします。設定した優先順位の結果を確認するか、モデルをデバッグするには、非バーチャル ブロックとサブシステムの実行順序を表示して確認することができます。

メモ

ブロック メソッドと実行の詳細は、以下を参照してください。

実行順序の表示

vdp モデルの実行順序を表示するには、以下のようにします。

  1. vdp モデルを開きます。

  2. [デバッグ] タブの [診断] セクションで、[情報のオーバーレイ] ドロップダウン矢印を選択します。ダイアログの [ブロック] セクションで、[実行順序] を選択します。実行順序ビューアーが Simulink エディターの右側にあるペインで開きます。

Simulink では、各非バーチャル ブロックと各非バーチャル サブシステムの右上に数字が表示されます。これらの番号はブロックが実行される順序を示します。最初に実行されるブロックの実行順序は 1 です。

たとえば、van der Pol 方程式のモデルでは、実行順序が 1 の Integrator ブロックが最初に実行されます。実行順序が 2 の Out1 ブロックが 2 番目に実行されます。同様に、残りのブロックが 3 から 9 まで番号順に実行されます。

実行順序の注釈

非バーチャル ブロック

van der Pol 方程式のモデルでは、モデル内のすべての非バーチャル ブロックに実行順序が含まれています。最上位モデルのシステム インデックスは 0 で、ブロックの実行順序の範囲は 08 です。

非バーチャル サブシステムおよびバーチャル サブシステム

次のモデルには、「Discrete Cruise Controller」という名前の Atomic 非バーチャル サブシステムと「Car Dynamics」という名前のバーチャル サブシステムが含まれています。

ルートレベルのシステムの実行順序の表示を有効にすると、Simulink にブロックの実行順序が表示されます。

バーチャル サブシステム ブロックはグラフィックス上でのみ存在し、実行されることがありません。したがって、これらは実行順序に含まれません。バーチャル サブシステム内のブロックの実行順序は、ルートレベル モデルのコンテキスト内で決定されます。その順序はバーチャル サブシステム ブロック上に、中かっこで囲まれたリストとして表示されます。

ただし、サブシステム内のブロックにはルートレベル モデルの実行コンテキストで実行順序があります。

Car Dynamics サブシステムはバーチャル サブシステムです。これには実行順序が 1 つも設定されていません。ブロックはルート レベルで実行され、Integrator ブロックが最初に実行されます。Integrator ブロックはその出力をルートレベル モデル内の Scope ブロックに送信し、このブロックが 2 番目に実行されます。

Discrete Cruise Controller サブシステムは Atomic Subsystem です。

  • 実行順序 5 は、サブシステムとその中のブロックがルート レベルのブロックに対して 5 番目に実行されることを示します。

  • Atomic Subsystem 内のブロックには独自の実行順序があり、その順序で実行されます。

メモ

モデル コンフィギュレーションによっては、Simulink は非表示の非バーチャル サブシステムをモデルに挿入できます。結果として、非表示のサブシステム ブロック内部の表示ブロックには、現在のシステム インデックスとは異なるシステム インデックスを指定できます。たとえば、[条件付き入力分岐実行] を選択すると、Simulink で作成される非表示で非バーチャルのサブシステムが、並べ替えられた実行順序に影響を与えます。

Simulink の実行順序の判定方法

直達端子による実行順序への影響

実行順序がブロック間のデータの従属関係を確実に反映するように、Simulink は、ブロック出力端子のブロック入力端子に対する従属関係に従って、ブロック入力端子を分類します。その現在値により 1 つのブロック出力の現在値が判定される入力端子は、直達端子呼ばれます。直達端子をもつブロックの例は以下のとおりです。

直達入力をもたないブロックの例は以下のとおりです。

  • Integrator — 出力値はその状態の関数に該当します。

  • Constant — 入力値をもちません。

  • Memory — 出力値は前のタイム ステップからの入力値に依存します。

ブロック並べ替えルール

ブロックを並べ替えるには、Simulink は次のルールを使用します。

  • ブロックが別のブロックの直達端子に接続されている場合、実行順序内でそれが接続されるブロックの前になければなりません。

    このルールにより、Simulink が現在の入力を要求するブロック メソッドを呼び出すときに、ブロックへの直達入力が確実に有効になります。

  • 直達入力をもたないブロックは、それが接続される直達入力をもつブロックの前にある限り、実行順序のどこにあってもかまいません。

    直達端子をもたないすべてのブロックを実行順序の先頭に置くことで、このルールを満たすことができます。これにより Simulink は、並べ替えプロセスでこれらのブロックを無視することができます。

これらのルールを適用すると、実行順序が作成されます。直達端子をもたないブロックは任意の順序でリストの先頭にあります。その次に直達端子をもつブロックが、それらが接続するブロックに有効な入力を指定するために必要な順番で続きます。

非バーチャル サブシステムおよびバーチャル サブシステムに示す以下のモデルはこの結果を説明します。次のブロックには直達がないため、ルートレベル システムの実行順序の最初に示されます。

  • Car Dynamics バーチャル サブシステムの Integrator ブロック

  • ルートレベル モデルの Speed ブロック

Discrete Cruise Controller Subsystem にある直達端子をもつすべての Gain ブロックは、それらが接続する Sum ブロックより前に実行されます。

関連するトピック