ドキュメンテーション

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

並べ替え順序の制御と表示

並べ替え順序とは

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

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

メモ

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

並べ替え順序の表示

vdp モデルの並べ替え順序を表示するには、以下のようにします。

  1. 以下の van der Pol 方程式のモデルを開きます。

  2. モデル ウィンドウで、[情報表示][ブロック][ソートされた実行順序] を選択します。

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

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

モデルでは並べ替え順序設定を保存できます。モデルを再度開いたときに並べ替え順序を表示するには、[シミュレーション][ブロック線図の更新] を選択します。

並べ替え順序の注釈

並べ替え順序の注釈はブロック タイプによって異なります。次の表は、さまざまな並べ替え順序の注釈の形式を要約したものです。各形式の詳細は、表の後に続く以下の節で説明します。

ブロック タイプ並べ替え順序の注釈説明
非バーチャル ブロックs:b
  • s は、ブロックが存在するモデルまたはサブシステムのシステム インデックスです。ルートレベル モデルの場合、s は常に 0 です。

  • b は、指定の実行コンテキストの並べ替え順序内のブロック位置を指定します。

  • x,y は、実行がこのブロックによって制御されるサブシステムのシステム インデックスです。

s:b {x, y}
非バーチャル サブシステム (関数呼び出しおよびアクション サブシステムを含まない)s:b
  • s はモデルまたはサブシステムのシステム インデックスです。

  • b は、指定の実行コンテキストの並べ替え順序内のブロック位置を指定します。

バーチャル ブロックとサブシステム該当なしバーチャル ブロックは実行されません。
アクション サブシステムs:b'
  • s は、ブロックが存在するモデルまたはサブシステムのシステム インデックスです。ルートレベル モデルの場合、s は常に 0 です。

  • b' は、アクション ブロックのブロック インデックスです (ただし、アクション サブシステムのブロック インデックスではありません)。

Function-call Subsystem と関数呼び出しモデル

1 つの非接地イニシエーター:

s:bi

  • s は、ブロックが存在するモデルまたはサブシステムのシステム インデックスです。ルートレベル モデルの場合、s は常に 0 です。

  • bi は、サブシステムの階層にあるルート イニシエーターのブロック インデックスです。

2 つ以上のイニシエーター:

  • s:bi1, s:bi2, ..., s:bin。n は、非接地イニシエーターの数です。

  • s は、ブロックが存在するモデルまたはサブシステムのシステム インデックスです。ルートレベル モデルの場合、s は常に 0 です。

  • bin は、サブシステムの階層にある n 次ルート開始イニシエーターのブロック インデックスです。

イニシエーターは、Ground ブロックであるか、接続されていません。

  • s:G

  • s は、ブロックが存在するモデルまたはサブシステムのシステム インデックスです。ルートレベル モデルの場合、s は常に 0 です。

  • G は、すべての関数呼び出しイニシエーターが接地されていることを示します。

分岐された関数呼び出し信号s:bi[Bk]
  • s は、ブロックが存在するモデルまたはサブシステムのシステム インデックスです。ルートレベル モデルの場合、s は常に 0 です。

  • bi は、サブシステムの階層にあるルート イニシエーターのブロック インデックスです。

  • Bk は、分岐インデックス k をもつ分岐された Function-Call Subsystem であることを示します。

Function-Call Feedback Latch ブロックs:bi[Bm]
  • s は、ブロックが存在するモデルまたはサブシステムのシステム インデックスです。ルートレベル モデルの場合、s は常に 0 です。

  • bi は、サブシステムの階層にあるルート イニシエーターのブロック インデックスです。

  • Bm は、分岐インデックス m をもつ分岐されたサブシステムであることを示します。

非同期関数呼び出し入力を使用するモデル内のブロック関数呼び出しのルートレベルの Inport および Outport ブロック: Fi
  • F は、関数呼び出しコンテキストで実行されることを示します。

  • i は、関数呼び出しインデックスです。

ルートレベル データ Inport ブロック: これらのブロックが Function-Call Subsystem を駆動している場合は、サブシステムの関数呼び出しインデックスになります。

これらのブロックが非同期関数呼び出し入力で駆動されていないモデルの一部である場合、関数呼び出しインデックスは表示されません。

 

ルートレベルの関数呼び出しブロック: Fi

ルートレベルの分岐された関数呼び出しブロック: Fi[Bk]

  • F は、関数呼び出しコンテキストで実行されることを示します。

  • i は、関数呼び出しインデックスです。

エクスポート関数モデル内のブロック (ルートレベルの関数呼び出し Inport ブロックの実行順序を参照)関数呼び出しのルートレベルの Inport および Outport ブロック: Fi
  • F は、関数呼び出しブロックであることを示します。

  • i は、ノーマル シミュレーション モードでの関数呼び出しのルートレベル Inport または Outport ブロックの実行順序です。

ルートレベルの Function-Call Subsystem: Fi

ルートレベルの分岐された Function-Call Subsystem: Fi[Bk]

  • F は、関数呼び出しブロックであることを示します。

  • i は、ノーマル シミュレーション モードでの関数呼び出しのルートレベル Inport ブロックの実行順序です。

  • Bk は、インデックス k をもつ分岐された Function-Call Subsystem を示します。

Merge ブロックおよび Data Store Memory ブロック: Fi, Fj, ...
  • F は、関数呼び出しブロックであることを示します。

  • i は、ブロック実行インデックスです。

ルートレベル データ Inport および Outport ブロック: 接続先の Function-Call Subsystem と同じ実行順序です。 
バス対応ブロックs:B
  • s は、ブロックが存在するモデルまたはサブシステムのシステム インデックスです。ルートレベル モデルの場合、s は常に 0 です。

  • B はバス対応ブロックを示します。

非バーチャル ブロック

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

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

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

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

このモデルの Scope ブロックにも最も低い並べ替え順序が付いていますが、その入力は Car Dynamics Subsystem の出力により異なります。Car Dynamics Subsystem はバーチャルであるため、並べ替え順序をもっておらず、Atomic サブシステムとして実行されません。ただし、サブシステム内のブロックはルート レベルで実行されるため、Car Dynamics Subsystem の Integrator ブロックが最初に実行されます。Integrator ブロックはその出力をルートレベル モデル内の Scope ブロックに送信し、このブロックが 2 番目に実行されます。

Discrete Cruise Controller Subsystem の並べ替え順序は 0:5 です。

  • 0 は、この Atomic Subsystem が、一次システムと 2 つのサブシステムから構成される階層システムのルート レベルの一部であることを示します。

  • 5 は、この Atomic Subsystem が、ルート レベル内のブロックで Simulink が 6 番目に実行するブロックであることを示します。

Discrete Cruise Controller Subsystem 内の各ブロックの並べ替え順序は 1:b という形式になります。ここで、

  • 1 はそのサブシステムのシステム インデックスです。

  • b は実行順序のブロックの位置です。Discrete Cruise Controller Subsystem では、並べ替え順序の範囲は 08 です。

メモ

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

バーチャル ブロックとサブシステム

Mux ブロックなどのバーチャル ブロックは、グラフィックス上でのみ存在し、実行されることがありません。したがって、これらは並べ替え順序に含まれず、並べ替え順序の注釈も示されません。

バーチャル サブシステムは 1 単位として実行されず、したがってバーチャル ブロックのように並べ替え順序に含まれることがありません。バーチャル サブシステム内のブロックは、ルートレベル システムの並べ替え順序に含まれるため、システム インデックスを共有します。

非バーチャル サブシステムのモデルでは、バーチャル サブシステム Car Dynamics には並べ替え順序がありません。ただし、サブシステム内のブロックにはルートレベル モデルの実行コンテキストで並べ替え順序があります。ブロックにはルートレベル モデルと同じシステム インデックスがあります。Car Dynamics Subsystem 内の Integrator ブロックには 0:0 という並べ替え順序があります。これは、Integrator ブロックが最上位モデルのコンテキストで実行される最初のブロックであることを示します。

Function-call Subsystem

単一のイニシエーター-  イニシエーターが Function-Call Subsystem (またはモデル) を呼び出したときに、Function-Call Subsystem (またはモデル) が実行されます。そのため、Function-Call Subsystem (またはモデル) には、イニシエーターから独立している並べ替えられた順序がありません。特に、1 つのイニシエーターに接続するサブシステムの場合、Simulink は s:bi という注釈を使用します。ここで s はイニシエーターを含むシステムのインデックスで、bi はサブシステム階層内のルート イニシエーターのブロック インデックスです。

たとえば、ルート イニシエーター Chart の並べ替え順序が 0:0 であるため、サブシステム f と g の並べ替え順序は 0:0 になります。

複数のイニシエーター-  1 つを超えるイニシエーターに接続している Function-Call Subsystem の場合、並べ替え順序の表記は s:bi1, s:bi2, ..., s:bin です。ここで n は非接地イニシエーターの数、s はブロックが存在するモデルまたはサブシステムのシステム インデックス、bin はサブシステムの階層にある n 番目のルート イニシエーターのブロック インデックスです。

たとえば、sl_subsys_fcncall6 モデルを開きます。f サブシステムには、サブシステムの階層内の同じレベルに存在する 3 つのイニシエーターがあります。2 つは Chart1 という Stateflow® チャートから、もう 1 つは Chart という Stateflow チャートからのものです。

Chart1 の並べ替え順序は 0:2 で Chart の並べ替え順序は 0:4 であるため、Function-Call Subsystem f の並べ替え順序の表記は 0:2,0:4 となります。

分岐された関数呼び出し信号

関数呼び出しイニシエーターが Function-Call Split ブロックによって分岐している場合、Simulink は、分岐に接続されているサブシステムまたはモデルをどの順番で実行するかを表示します。Simulink は、s:bi[Bk] という表記を使用してこの順序を示します。s はブロックが存在するモデルまたはサブシステムのシステム インデックス、bi はサブシステムの階層にあるルート イニシエーターのブロック インデックス、Bk は分岐インデックス k をもつ分岐された Function-Call Subsystem であることを示します。

次の例の並べ替え順序は、分岐インデックス 0 をもつサブシステム f が分岐インデックス 1 をもつサブシステム g の前に実行されることを示しています。

バス対応ブロック

バーチャル バス入力をもつバス対応ブロックは、1 単位として実行されないため、一意の並べ替え順序がありません。このようなブロックには、s:B という並べ替え順序が表示されます。ここで、B は「バス」を表します。

たとえば、バーチャル バス入力をもつこの Unit Delay ブロックの並べ替え順序は 0:B です。

バス対応ブロックのリストについては、バス対応ブロックを参照してください。

Simulink の並べ替え順序の判定方法

直達端子の並べ替え順序への影響

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

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

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

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

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

ブロック並べ替えルール

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

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

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

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

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

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

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

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

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

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

ブロックの優先順位の割り当て

非バーチャル ブロックまたはサブシステム全体に優先順位を割り当てることができます。並べ替え順序で優先順位の高いブロックは、優先順位の低いブロックの前に示されます。番号が小さいほど、優先順位は高くなります。ブロックの優先順位は、[ブロック プロパティ] ダイアログの [一般] タブで設定します。

ブロック優先順位のルール

Simulink は、データ依存性に違反しない限り、指定したブロック優先順位を守ります。(ブロック優先順位違反 では、ブロック優先順位の違反を引き起こす状況について説明します)。

Simulink は、優先順位の割り当てを評価するときに、ルートレベル システム内または非バーチャル サブシステム内の個々のブロックに設定した優先順位が互いに対して相対的に維持されるように並べ替え順序を作成しようとします。

優先順位に関する 3 つのルールを示します。

優先順序は相対的

ブロックの優先順位は、同じシステムまたはサブシステム内の他のブロックの優先順位に相対的なものです。

たとえば、非バーチャル サブシステムのモデルにある Discrete Cruise Controller Subsystem で次の優先順位を設定すると仮定します。

ブロック優先順位
Gain3
Gain12
Gain21

ブロック線図を更新した後、Gain ブロックの並べ替え順序は以下のようになります。

GainGain1、および Gain2 ブロックの並べ替え順序値は、それぞれに割り当てられた優先順位を反映しています。Gain2 は最も優先順位が高く、Gain1 と Gain より先に実行されます。2 番目に優先順位が高いのは Gain1 で、Gain2 の後に実行されます。Gain は Gain1 の後に実行されます。Simulink は、そのサブシステム内の他のブロックに関連付けられて割り当てられた優先順位を考慮します。

Gain ブロックは、実行される最初のブロック、2 番目のブロック、3 番目のブロックではなく、連続した並べ替え順序があるわけでもありません。並べ替え順序値は優先順位値と一致するわけではありません。Simulink はお互いに対する相対性を維持した優先順位となるようにブロックを配置します。

優先順位は階層的

Car Dynamics バーチャル サブシステムで、以下のように Gain ブロックの優先順位を設定すると仮定します。

ブロック優先順位
Gain2
Gain11

ブロック線図を更新した後、Gain ブロックの並べ替え順序は以下のようになります。これらの優先順位では、Gain1 が常に Gain より先に実行されます。

モデル内のサブシステムの階層特性により、2 つの各サブシステムで 1 つのブロックに優先順位 1 を設定することができます。Simulink は、1 つのサブシステムのブロックの優先順位を他のサブシステムのブロックの優先順位と比較することはありません。

たとえば、このモデルをもう一度考えてみましょう。

Car Dynamics バーチャル サブシステム内のブロックはルートレベル システム階層の一部を構成するため、ルートレベルの並べ替え順序に含まれます。Discrete Cruise Controller Subsystem には、1:0 から 1:7 まで順番に配置されたブロックの独立した並べ替え順序があります。

優先順位が割り当てられていなくても優先順位が低くなるわけではない

優先順位が割り当てられていなくても、特定のブロックの優先順位が高くなる (並べ替え順序で優先される) わけではない。直達端子をもたないブロックは、優先順位に関係なく、直達端子をもつブロックより先に実行されます。

モデルに 2 つの Atomic Subsystem A と B がある場合、A と B にそれぞれ 12 の優先順位を割り当て、A のすべてのブロックが B のブロックの前に実行されるようにすることができます。Atomic Subsystem のブロックは 1 単位として実行されるため、サブシステムには独自のシステム インデックスと独自の並べ替え順序があります。

ブロック優先順位違反

Simulink ソフトウェアは、データ依存性に違反しない限り、指定したブロック優先順位を守ります。Simulink がブロック優先順位を守れない場合は、Block Priority Violation 診断メッセージを表示します。

例:

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

    Memory ブロックの出力が Coefficient of Restitution Gain ブロックの入力を与えることに注目してください。

  2. Coefficient of Restitution ブロックの優先順位を 1 に設定し、Memory ブロックの優先順位を 2 に設定します。

    これらの優先順位を設定すると、Coefficient of Restitution ブロックが Memory ブロックより前に実行されます。ただし、Coefficient of Restitution ブロックは Memory ブロックの出力に依存するため、設定した優先順位はデータ依存性に違反します。

  3. モデル ウィンドウで並べ替え順序を有効にするには、[情報表示][ブロック][ソートされた実行順序] を選択します。

  4. [シミュレーション][ブロック線図の更新] を選択します。

    ブロック優先順位違反を示す警告が [診断ビューアー] に表示されます。[診断ビューアー] ウィンドウを開くには、[ツール表示][診断ビューアー] をクリックします。警告には個々のブロックの優先順位が含まれています。

    警告: ユーザー指定の優先順位を利用できません。'sldemo_bounce/Memory' (pri=[2]) は、データの依存関係を満たすために 'sldemo_bounce/Coefficient of Restitution' (pri=[1]) の前に実行すべきです 
  5. Coefficient of Restitution ブロックと Memory ブロックから優先順位を削除しモデルを再度更新すると、正しい並べ替え順序が表示されます。

関連するトピック