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 ブロックへのアクション信号を出力します。

次のモデルについて考えます。モデルを開くには、ex_if_block を参照してください。

このモデルでは、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 構造を含む次のようなモデルについて考えます。モデルを開くには、ex_switch_case_block を参照してください。

このモデルでは、Switch Case ブロックへの入力で、出力端子として表されたケースを選択するためのインデックス値を提供しています。各出力端子は、If Action Subsystem ブロックに割り当てられます。ケースが選択されると、対応する If 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 ステートメントのようにフォール スルーの動作にはなりません。

モデル例

参考

ブロック