Main Content

明示的にスケジュールされたモデル コンポーネントの並べ替えルール

Simulink® により、モデル コンポーネント (つまりサブシステムと参照モデル) の実行順序が決定します。

エクスポート関数モデル

エクスポート関数モデルには、Function-Call Subsystem ブロック、関数呼び出しの Model ブロック、ルート レベルの Simulink Function ブロック、および関数呼び出しのルートの Inport ブロックで呼び出される S-Function ブロックが含まれます。

ルートの関数呼び出しの Inport ブロックは、次のルールで並べ替えられます。

  • 最初にブロックの優先順位が比較されます。優先順位が最も高い (値が最も小さい) ブロックが先に並べられます。

  • ブロックの優先順位が同じ場合、サンプル時間が比較されます。レートが速い (サンプル時間の値が小さい) ブロックが先に並べられます。

  • サンプル時間が同じ場合、入力端子の番号が比較されます。端子番号が小さいブロックが先に並べられます。

  • OrderFunctionsByDependency パラメーターが 'on' に設定されている場合は、各ブロックが接続されている関数の相対的なデータ依存性に基づいて、同じサンプル時間をもつブロックがさらに並べ替えられます。ルートレベルの関数呼び出し Inport ブロックの実行順序を参照してください。

ルートの Simulink Function ブロックは、ルートの関数呼び出しの Inport ブロックの後に並べられます。

厳密なスケジューリングを使用したエクスポート関数モデルのテスト ハーネス

テスト ハーネスでエクスポート関数モデルを参照し、Function Generator ブロックに端子を接続します。

コンフィギュレーション パラメーター [参照モデルの厳密なスケジューリング チェックを有効にする] のチェック ボックスをオンにすると、コンパイル時と実行時の両方のチェックにより、イニシエーターによる関数呼び出しが事前定義されたスケジューリング順序に従って実行されるようになります。イニシエーターはサンプル時間の優先順位に基づいて並べ替えられます。この例では、スケジューリング順序とサンプル時間の優先順位が一致していません。モデル mHarness_ExpFcnMdl でエラーが表示されます。

厳密なスケジューリングなしのエクスポート関数モデルのテスト ハーネス

テスト ハーネスでエクスポート関数モデルを参照し、Function-Call Generator ブロックに端子を接続します。

コンフィギュレーション パラメーター [参照モデルの厳密なスケジューリング チェックを有効にする] のチェック ボックスをオフにすると、テスト ハーネス モデルがシングル タスク モードの場合、関数呼び出しイニシエーターはサンプル時間の優先順位に基づいて並べ替えられます。この例では、実行順序は FcnCallGen0p1FcnCallGen0p2FcnCallGen0p3FcnCallGen0p1 になります。

データの並べ替えルールによるデータ依存性エラー

ある関数呼び出しイニシエーターの出力が、別の関数呼び出しイニシエーターの入力となるモデルについて考えてみます。

関数呼び出しイニシエーター FcnCallGen0p3 は、サンプル時間に基づくと FcnCallGen0p4 より先に実行されます。ただし、FcnCallGen0p4FcnCallGen0p3 のソースでもあるため、データ依存性の問題が発生して Simulink でエラーが表示されます。

Initialize Function ブロック、Reset Function ブロック、Terminate Function ブロックを含むモデルのテスト ハーネス

初期化端子、リセット端子、終了端子を含むモデルを Model ブロックで参照している場合、それらの端子に接続された関数呼び出しイニシエーターは他の関数呼び出し入力端子よりも優先順位が高くなります。たとえば、エクスポート関数モデル、レートベース モデル、JMAAB-B (Simulink Coder) モデルは他の関数呼び出し入力端子をもつことができます。Simulink では関数呼び出しイニシエーターが次の順序で並べ替えられます。

  • 初期化端子、リセット端子、終了端子。

  • リセット端子が複数ある場合、それらのリセット端子に対するイニシエーターは並べ替えられません。たとえば、ブロック A で駆動される 1 つの初期化端子、B ブロックと C ブロックで駆動される 2 つのリセット端子、ブロック D で駆動される 1 つの終了端子があるモデルの場合、Simulink での並べ替え順序は A、B または C、D の順になります。B と C は一般的な並べ替えルールを使用して並べ替えられます。

テスト ハーネス内の Model ブロックのイニシエーター

Model ブロックの [レートのスケジュール] パラメーターを選択して、レートベース モデルまたは JMAAB-B モデルを参照するテスト ハーネス内の Model ブロックに関数呼び出しイベント端子を追加します。

シングル タスク モデルでは、すべての離散レートが同じタスクに含まれます。マルチタスク モデルでは、同じ値の離散レートが同じタスクで実行されます。Simulink では、テスト ハーネスの同じタスクのイニシエーターが次の順序で並べ替えられます。

  • 初期化端子、リセット端子、終了端子。

  • 非同期関数呼び出しのルートの Inport ブロックにマッピングされた関数呼び出し入力端子 (適応モデルが JMAAB-B モデルの場合)。それらの "非同期" 関数呼び出し入力端子の比較には、参照モデル内の関数呼び出しのルートの Inport ブロックに接続された Asynchronous Task Specification ブロックで指定されるタスクの優先順位が使用されます。次の場合は端子の比較は行われません。

    • 2 つの "非同期" 関数呼び出し入力端子のタスクの優先順位が同じ場合。

    • "非同期" 関数呼び出し入力端子のタスクの優先順位が空 (未指定) の場合。

  • 離散レートにマッピングされた周期的関数呼び出しイベント入力端子。比較にはレート モノトニック スケジューリング (RMS) のルールが使用されます。

シングル タスク モデルでは、すべてのイニシエーターが同じタスクに含まれます。

  • InitGen > ResetGen1 または ResetGen2 > TermGen > A10aGen または A10bGen または A[]Gen > D1Gen > D2Gen

  • A10aGen または A10bGen > A20Gen

  • ResetGen1ResetGen2A10aGenA10bGenA[]GenA20Gen などの相対的な順序は入れ替わることがある。

マルチタスク モデルでは、同じ色のイニシエーターが同じタスクに含まれます。

  • InitGen > D1Gen > D2Gen

  • A10aGen または A10bGen > A20Gen