Main Content

選択サブシステムの実行

"論理的に実行されるサブシステム" ブロックは、"制御ブロック" によってイネーブルにされたときに現在のタイム ステップで 1 回以上実行されます。制御ブロックは、プログラミング言語のステートメント (if-then、switch、while、for など) によって表現されるのと同様の制御ロジックを実装します。

セレクター サブシステムは、論理的に実行されるサブシステムの 1 つで、サブシステムの外部に配置された制御ブロックからのアクション信号に応じてタイム ステップ中に 1 回実行されます。Simulink® では、if-else と switch-case の 2 つのセレクター サブシステム構造がサポートされます。

If-Else 構造を含むモデル

If Action Subsystem ブロックは、実行が If ブロックでイネーブルにされるサブシステムを作成するときの開始点として事前構成されている Subsystem ブロックです。

実行は外部の If ブロックで制御されます。If ブロックは論理式を評価し、その評価結果に応じてアクション信号を If Action Subsystem ブロックに出力します。

If Action Subsystem ブロックからの信号のマージ

モデル例 ex_if_block は、If ブロックで制御される信号をマージする方法を示します。

If ブロックは一連のサブシステムから If Action Subsystem ブロックの実行を選択します。If ブロックが選択するサブシステムに関係なく、Mergeブロックを使用して 1 つの出力信号を作成できます。

If Action Subsystem ブロック内のすべてのブロックは駆動側の If ブロックと同じレートで実行されなければなりません。この要件を満たすには、各ブロックのサンプル時間パラメーターを継承 (-1) または If ブロックのサンプル時間と同じ値のいずれかに設定します。

If ブロックへの入力で、出力端子として表された論理式に対するオペランド値を提供します。各出力端子は、If Action Subsystem ブロックに接続されます。If ブロックの式は、if 式から順番に上から下に評価されます。式が true と評価されると、対応する If Action Subsystem が実行され、残りの式は評価されません。

このモデルの "if-else" 構造は、次のような疑似コードで表すことができます。

IF u1 > 0 THEN
    Subsystem 1
ELSEIF u2 > 0
    Subsystem 2
ELSE
    Subsystem 3
END IF

If-Else 構造を含むモデルの作成

このモデル例を作成するには、次の手順を使用します。

  1. Simulink エディターで If ブロックを配置します。ブロックをダブルクリックしてブロック パラメーター ダイアログ ボックスを開きます。

  2. [入力数] ボックスに 2 と入力します。

    ブロックに入力端子が 2 つ追加されます。入力端子はオペランド値を含む信号用であり、その数がオペランドの数である必要はありません。入力信号はベクトルにすることができます。たとえば、ベクトル u の 5 番目の要素を式で指定するときは u(5) > 0 のように指定できます。

  3. [If 式] テキスト ボックスに「u1 > 0」と入力します。

    if(u1 > 0) というラベルが付いた出力端子がブロックに追加されます。この端子は If ブロックで必要になる唯一の出力です。

  4. [Elseif 式] テキスト ボックスに「u2 > 0」と入力します。

    elseif 式はコンマで区切って複数入力できます。それぞれの式について、elseif(expression) という形式のラベルが付いた出力端子が If ブロックに追加されます。

  5. [else 条件の表示] チェック ボックスをオンにします。

    else というラベルが付いた出力端子がブロックに追加されます。

  6. If Action Subsystem ブロックを 3 つ追加します。

    これらのブロックは Action Port ブロックを含む Subsystem ブロックです。サブシステム内に Action Port ブロックを置くと、Action という名前の入力端子がブロックに追加されます。

  7. If ブロックからの出力端子を If Action Subsystem ブロックのアクション端子にそれぞれ接続します。

    接続すると、If Action Subsystem ブロックのアイコンの名前が接続した式のタイプに変わります。

  8. それぞれの If Action Subsystem ブロックで、処理する条件に応じて実行する Simulink ブロックを入力します。

  9. If Action Subsystem ブロックからの出力を Merge ブロックに接続します。

  10. シミュレーションを実行します。

    If ブロックと If Action Subsystem ブロックの間のアクション信号の信号線が実線から破線に変わります。

メモ

If ブロックによって駆動される If Action Subsystem ブロック内のブロックは、いずれも駆動側のブロックと同じレートで実行しなければなりません。

Switch Case 構造を含むモデル

Switch Case Action Subsystem ブロックは、実行が Switch Case ブロックでイネーブルにされるサブシステムを作成するときの開始点として事前構成されている Subsystem ブロックです。

実行は外部の Switch Case ブロックで制御されます。Switch Case ブロックは、ケース インデックスを評価し、選択されたケースに応じて Switch Case Action Subsystem ブロックへのアクション信号を出力します。

Switch Case Action Subsystem ブロックからの信号のマージ

モデル例 ex_switch_case_block は、複数のサブシステム出力信号から 1 つの信号を作成する方法を示します。

Switch Case ブロックは一連のサブシステムから 1 つの Switch Case Action Subsystem ブロックの実行を選択します。Switch Case ブロックが選択するサブシステムに関係なく、Mergeブロックを使用して結果として 1 つの信号を作成できます。

Switch Case ブロックへの入力で、出力端子として表されたケースを選択するためのインデックス値を提供します。各出力端子は、Switch Case Action Subsystem ブロックに接続されます。ケースが選択されると、対応する Switch Case Action Subsystem ブロックが実行されます。

このモデルの "switch" 構造は、次のような疑似コードで表すことができます。

CASE u1
    u1 = 1:
        subsystem_1
        break
    u1 = 2 or 3:
        subsystem_2_3
        break
    u1 = OTHER VALUES:
        subsystem_default
        break
END CASE

Switch Case 構造を含むモデルの作成

このモデル例を作成するには、次の手順を使用します。

  1. Simulink エディターで Switch Case ブロックを配置します。ブロックをダブルクリックしてブロック パラメーター ダイアログ ボックスを開きます。

  2. [Case 条件] ボックスに「{1, [2,3]}」と入力します。

    ケースが 2 つ定義されます。1 つ目は入力値が 1 の場合のケースで、2 つ目は入力値が 2 または 3 の場合のケースです。ケースは単一値にも複数値にもすることができ、Switch Case ブロックに出力端子として表示されます。入力値が整数でない場合は整数部までで切り捨てられます。

  3. [default ケースを表示] チェック ボックスをオンにします。

    default: というラベルが付いた出力端子がブロックに追加されます。この端子からは他のケースが選択されなかった場合にアクション信号が送信されます。

  4. Switch Case Action Subsystem ブロックを 3 つ追加します。

    これらのブロックは Action Port ブロックを含む Subsystem ブロックです。サブシステム内に Action Port ブロックを置くと、Action という名前の入力端子がブロックに追加されます。

  5. Switch Case ブロックからの出力端子を Switch Case Action Subsystem ブロックのアクション端子にそれぞれ接続します。

    接続すると、Switch Case Action Subsystem ブロックのアイコンの名前が接続した式のタイプに変わります。

  6. それぞれの Switch Case Action Subsystem ブロックで、処理するケースに応じて実行する Simulink ブロックを入力します。

  7. シミュレーションを実行します。

    Switch Case ブロックと Switch Case Action Subsystem ブロックの間のアクション信号の信号線が実線から破線に変わります。

メモ

特定のケースに対応するサブシステムが実行された後、暗黙のブレークによって Switch Case ブロックの実行が終了されます。Simulink の Switch Case ブロックは、C の switch ステートメントのようにフォール スルーの動作にはなりません。

参考

| | | | |

関連するトピック