明示的にスケジュールされたモデル コンポーネントの並べ替えルール
Simulink® により、モデル コンポーネント (つまりサブシステムと参照モデル) の実行順序が決定します。
エクスポート関数モデル
エクスポート関数モデルには、Function-Call Subsystem ブロック、関数呼び出しの Model ブロック、ルート レベルの Simulink Function ブロック、および関数呼び出しのルートの Inport ブロックで呼び出される S-Function ブロックが含まれます。
ルートの関数呼び出しの Inport ブロックは、次のルールで並べ替えられます。
最初にブロックの優先順位が比較されます。優先順位が最も高い (値が最も小さい) ブロックが先に並べられます。
ブロックの優先順位が同じ場合、サンプル時間が比較されます。レートが速い (サンプル時間の値が小さい) ブロックが先に並べられます。
サンプル時間が同じ場合、入力端子の番号が比較されます。端子番号が小さいブロックが先に並べられます。
OrderFunctionsByDependency
パラメーターが'on'
に設定されている場合は、各ブロックが接続されている関数の相対的なデータ依存性に基づいて、同じサンプル時間をもつブロックがさらに並べ替えられます。ルートレベルの関数呼び出し Inport ブロックの実行順序を参照してください。
ルートの Simulink Function ブロックは、ルートの関数呼び出しの Inport ブロックの後に並べられます。
厳密なスケジューリングを使用したエクスポート関数モデルのテスト ハーネス
テスト ハーネスでエクスポート関数モデルを参照し、Function Generator ブロックに端子を接続します。
コンフィギュレーション パラメーター [参照モデルの厳密なスケジューリング チェックを有効にする] のチェック ボックスをオンにすると、コンパイル時と実行時の両方のチェックにより、イニシエーターによる関数呼び出しが事前定義されたスケジューリング順序に従って実行されるようになります。イニシエーターはサンプル時間の優先順位に基づいて並べ替えられます。この例では、スケジューリング順序とサンプル時間の優先順位が一致していません。モデル mHarness_ExpFcnMdl
でエラーが表示されます。
厳密なスケジューリングなしのエクスポート関数モデルのテスト ハーネス
テスト ハーネスでエクスポート関数モデルを参照し、Function-Call Generator ブロックに端子を接続します。
コンフィギュレーション パラメーター [参照モデルの厳密なスケジューリング チェックを有効にする] のチェック ボックスをオフにすると、テスト ハーネス モデルがシングル タスク モードの場合、関数呼び出しイニシエーターはサンプル時間の優先順位に基づいて並べ替えられます。この例では、実行順序は FcnCallGen0p1
、FcnCallGen0p2
、FcnCallGen0p3
、FcnCallGen0p1
になります。
データの並べ替えルールによるデータ依存性エラー
ある関数呼び出しイニシエーターの出力が、別の関数呼び出しイニシエーターの入力となるモデルについて考えてみます。
関数呼び出しイニシエーター FcnCallGen0p3
は、サンプル時間に基づくと FcnCallGen0p4
より先に実行されます。ただし、FcnCallGen0p4
は FcnCallGen0p3
のソースでもあるため、データ依存性の問題が発生して 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
ResetGen1
とResetGen2
、A10aGen
とA10bGen
、A[]Gen
とA20Gen
などの相対的な順序は入れ替わることがある。
マルチタスク モデルでは、同じ色のイニシエーターが同じタスクに含まれます。
InitGen > D1Gen > D2Gen
A10aGen または A10bGen > A20Gen