ドキュメンテーション

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

Switch Case

C ライクな switch 制御フロー文の実現

ライブラリ

Ports & Subsystems

説明

Switch Case ブロックは 1 つの入力を受け取ります。各出力端子は、Switch Case Action Subsystem に接続されています。データ出力は、Action Port ブロックとサブシステムを使って作成された Switch Case Action サブシステムへのアクション信号です。

Switch Case ブロックは入力値を使用して実行するサブシステムを判定するケース条件を選択します。これらのケースは、最初のケースから始めて上から下に評価されます。かっこ内のケース値が入力の値に対応する場合、その Switch Case Action Subsystem が実行されます。

default のケースが存在し、その他のケースが実行されない場合は、そのケースが実行されます。他のケース条件が考えられるすべての値を使い果たした場合でも、default のケースは必ずしも提供する必要はありません。下図は、完成した Simulink® switch 制御フロー ステートメントを示しています。

Switch Case Action サブシステムが実行された後、Switch Case ブロックのケースは暗黙のブレークを含みます。そのため、標準 C の switch 文で見られるように、Simulink switch 制御フロー文で不完全な動作が発生することはありません。次の疑似コードは、上記の switch 制御例によって生成されたコードを表しています。

switch (u1) {
	case [u1=1]:
		body_1;
		break;
	case [u1=2 or u1=3]:
		body_23;
		break;
	default:
		body_default;
}

上記の例に示した Simulink switch 制御フロー文を作成するには、以下に従います。

  1. Switch Case ブロックを現在のシステムに配置し、評価中のデータ ソースに u1 というラベルが付いた入力端子を追加します。

  2. [Switch Case ブロック] ダイアログ ボックスを開き、パラメーターを更新します。

    1. 個々のケースを [Case 条件] フィールドに入力します。

    2. default ケースを表示するには、[default ケースを表示] チェック ボックスを選択します。

  3. Switch Case ブロックに追加した case 端子ごとに、Switch Case Action Subsystem を作成します。

    これらのサブシステムは、内部に Action Port ブロックを含むサブシステムで構成されています。サブシステム内に Action Port ブロックを配置すると、サブシステムは「アクション」というラベルが付いた入力端子をもつ Atomic Subsystem になります。

  4. Switch Case ブロックの各ケース出力端子と既定の出力端子を Action サブシステムの Action 端子に接続します。

    接続された各サブシステムはケース ボディになります。これは、 Switch Case Action Subsystem ブロックのラベルの変更と内部の Action Port ブロックが名前 case{} に変わることで示されます。

    switch 制御フロー文のシミュレーションの間、Switch Case ブロックから各 Switch Case Action Subsystem への Action 信号はハイフンなしからダッシュ付きに変わります。

  5. Switch Case Action Subsystem で、Simulink が処理するケースに適したロジックを入力します。

列挙型信号を使用したアルゴリズムの実行の制御

この例では、列挙データ型の信号を使用してブロック アルゴリズムの実行を制御する方法を示します。モデルでの列挙データ型の使用に関する基本情報については、「Simulink モデルでの列挙型データの使用」を参照してください。

Switch Case ブロックで列挙データ型を使用する場合は、次のベスト プラクティスに従います。

  • 入力 u1 およびすべての Case 条件値に同じ列挙型を使用する。

  • [Case 条件] ボックスで指定した列挙型ごとに異なる基本の整数値を使用する。

列挙型の定義

列挙型定義 ex_SwitchCase_MyColors を現在のフォルダーのスクリプト ファイルにコピーします。

classdef ex_SwitchCase_MyColors < Simulink.IntEnumType
  enumeration
    Red(0)
    Yellow(1)
    Blue(2)
    Mauve(3)
  end
end

または、関数 Simulink.defineIntEnumType を使用して型を定義します。

 Simulink.defineIntEnumType('ex_SwitchCase_MyColors',...
 {'Red','Yellow','Blue','Mauve'},[0;1;2;3])

モデル例の確認

  1. モデル例 ex_enum_switch_case を開きます。

  2. Enumerated Constant ブロックのダイアログ ボックスを開きます。定数出力値は ex_SwitchCase_MyColors.Blue です。

  3. Switch Case ブロックのダイアログ ボックスを開きます。[Case 条件] ボックスは、4 つの指定可能な列挙型メンバーのうちの 3 つを含むセル配列に設定されます。ブロックには、指定した 3 つの列挙型メンバーと default ケースに対応する 4 つの出力が含まれます。

  4. Switch Case Action Subsystem ブロックを開きます。各サブシステムには、一意の定数値を使用する Constant ブロックが含まれます。

シミュレーション中の実行の制御

  1. Simulink エディターでシミュレーション停止時間を Inf に設定します。

  2. モデルのシミュレーションを実行します。Display ブロックには、ケース ex_SwitchCase_MyColors.Blue に対応する値 5 が表示されます。

  3. Enumerated Constant ブロックのダイアログ ボックスで、[値]ex_SwitchCase_MyColors.Red に設定し、[適用] をクリックします。Display ブロックには 19 が示されます。

  4. [値]ex_SwitchCase_MyColors.Mauve に設定し、[適用] をクリックします。Display ブロックには、default ケースに対応する 3 が表示されます。

サポートするデータ型

Switch Case ブロックの u1 というラベルの付いた端子への入力は以下のいずれかになります。

  • Simulink がサポートする組み込みデータ型のスカラー値。ブロックは、Boolean または固定小数点データ型をサポートせず、数値入力を打ち切って 32 ビット符号付き整数にします。

  • 列挙型信号を使用したアルゴリズムの実行の制御で説明されている列挙型データのスカラー値。

詳細は、Simulink ドキュメンテーションの「Simulink でサポートされているデータ型」を参照してください。

パラメーターとダイアログ ボックス

Case 条件

ケース条件の指定には MATLAB®の セル表記法を使用します。たとえば、{1,[7,9,4]} を入力して、入力値が 1 のときに出力端子 case[1] が実行されることと、入力値が 79、または4 のときに出力端子 case[7 9 4] が実行されることを指定しています。

コロン表記法を使って、整数のケース条件の範囲を指定できます。たとえば、「{[1:5]}」と入力すると、入力値が 1234、または 5 のときに出力端子 case[1 2 3 4 5] が実行されます。

ブロックのサイズに応じて、条件の長いリストを含むケースは、終了反復記号 (...) を使って Switch Case ブロックで短縮された形式で表示されます。

関数 enumeration を使用して、列挙型の各値に対するケースを含んだケース条件を指定できます。

default ケースを表示

このチェック ボックスをオンにすると、既定の出力端子は Switch Case ブロックの最後のケースとして表示され、default ケースを指定できます。このケースは、入力値が [Case 条件] フィールドで指定されたケース値と一致しない場合に実行されます。[default ケースの表示] が選択されている場合は、前述のケースが入力値として考えられるすべての値を使い果たした場合でも、既定の出力端子が常に表示されます。

ゼロクロッシング検出を有効にする

ゼロクロッシング検出を有効にする場合は選択します。詳細は、「ゼロクロッシング検出」を参照してください。

サンプル時間

特性

データ型

double | single | 整数 | 列挙型

サンプル時間

駆動ブロックから継承

直接フィードスルー

あり

多次元信号

なし

可変サイズの信号

なし

ゼロクロッシング検出

有効な場合、あり

コード生成

あり

R2006a より前に導入

この情報は役に立ちましたか?