Main Content

Variant Source

バリアントを使用した複数の入力間での経路指定

  • Variant Source block

ライブラリ:
Simulink / Signal Routing

説明

Variant Source ブロックでは、信号のソースのコンポーネントについて、その複数の実装を単一のレイヤーに含めることができます。

たとえば、自動車のワイパーの速度を制御するために、このモデルをさまざまなレイン センサーを使用してシミュレートするとします。Variant Source ブロックで、さまざまなレイン センサーに切り替えます。この情報を使用して、制御ロジックで Variant Sink ブロックに結果を出力します。その後、Variant Sink ブロックで、シミュレーション時にワイパーのモーター モデルを切り替え、コード生成時にコマンドをセンサーに切り替えます。バリアント ブロックでの選択の切り替えは、Types of Variant Control Modes in Variant Blocksの選択に基づいて行われます。詳細については、バリアント制御の紹介を参照してください。

メモ

Variant Source ブロックの入力端子に接続されたバリアントの選択のうち、最大で 1 つがシミュレーション時にアクティブになります。

Multiple implementations to control speed of car windshield using a Variant Source block

Variant Source ブロックには 1 つ以上の入力端子があり、出力端子は 1 つだけです。モデルの実行時に最大で 1 つの選択がアクティブになるように、ブロックの入力端子に可変の選択肢を接続できます。

Variant Source ブロックはバリアント制御モードバリアントのアクティベーションのタイミングに関連付けられています。バリアント制御モードによって、バリアント制御の指定方法が決まります。バリアントのアクティベーションのタイミングによって、選択をアクティブにするタイミングが決まります。さらに、生成されたコードに、アクティブな選択のみを含めるか、またはアクティブな選択と非アクティブな選択の両方を含めるかを決定します。シミュレーション中、Simulink® はアクティブな選択を Variant Source ブロックの出力端子に直接接続し、非アクティブな選択を無視します。

Variant Source ブロックを使用すると、次のことが可能です。

  • モデル全体にバリアント条件を伝播します。

  • バリアントの選択のすべての可能な実装をモデルの単一のレイヤーで可視化します。これにより、モデルの可読性が向上します。

  • Simulink により、非アクティブなブロックがモデル全体から排除されます。これにより、実行時のパフォーマンスが向上します。すべてのバリアントの選択が非アクティブな場合、そのバリアント領域全体が Simulink によってモデルから削除されます。

  • バリアント ソースとバリアント シンクは、バリアントの選択をすばやくモデル化するために使用できるバリアント コンポーネント インターフェイスを提供します。

ブロック アイコンのバリアント バッジの色とアイコンは、[バリアントのアクティベーションのタイミング] パラメーター、[バリアント制御モード] パラメーター、および [ゼロ アクティブ バリアント制御を許可] パラメーターの値に基づいて変化します。詳細については、バリアントのバッジを参照してください。

制限

Variant Source ブロックは、時間ベースの信号、関数呼び出し信号、およびアクション信号で動作します。SimEvents®Simscape™ Multibody™ またはその他の時間ベースでない信号はこれらのブロックで使用できません。

端子

入力

すべて展開する

最初のバリアント制御に関連付けられた入力端子。true と評価されるバリアント制御によって、アクティブになる入力端子が決まります。

Variant Source ブロックの入力端子は、ブロックの端にマウスを合わせるか、ブロック境界の近くに信号をドラッグして自動挿入できます。端子を削除するには、キーボードの Delete キーを押すか、マウスで削除ボタンをクリックします。

データ型: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus | image

N 番目のバリアント制御に関連付けられた入力端子。true と評価されるバリアント制御によって、アクティブになる入力端子が決まります。

データ型: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus | image

出力

すべて展開する

アクティブなバリアントからの出力信号。

Variant Source ブロックの出力端子は、ブロックの端にマウスを合わせるか、ブロック境界の近くに信号をドラッグして自動挿入できます。端子を削除するには、キーボードの Delete キーを押すか、マウスで削除ボタンをクリックします。

データ型: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus | image

パラメーター

すべて展開する

アクティブなバリアント選択を決定するバリアント制御は次の型のいずれかにすることができます。

  • [式] モードでは、Simulink はバリアント条件の評価に基づいてアクティブなバリアントを選択します。条件式が true と評価される場合、対応するバリアント選択がアクティブになります。条件式が false と評価される場合、対応するバリアント選択が非アクティブになります。Switch Between Choices Using Condition Expressions in Variant Blocksを参照してください。

  • ラベル[ラベル] モードでは、Simulink はバリアントの名前に基づいてアクティブなバリアントを選択します。バリアント制御は string であり、いずれのワークスペースでも、いずれの変数も作成する必要はありません。Switch Between Choices Using Labels in Variant Blocksを参照してください。

  • sim/codegen の切り替え — ワークスペース変数を作成せずに、シミュレーションのためのバリアントとコード生成ワークフローを自動的に切り替えるには、[sim/codegen の切り替え] モードを使用します。モデルをシミュレーションするときに、Simulink はアクティブな選択肢として sim 分岐を自動的に選択します。同様に、ソフトウェアインザループ (SIL) またはプロセッサインザループ (PIL) シミュレーションを実行したり、コードを生成したり、エクスターナル モードを使用したりするときに、Simulink は自動的に codegen 分岐を選択します。このモードは、ERT ベースのシステム ターゲット ファイルとサービス コード インターフェイスで構成されたモデルではサポートされません。Switch Between Choices for Simulation and Code Generation Workflows Without Using Control Variables in Variant Blocksを参照してください。

バリアント制御モードの詳細については、バリアント制御の紹介を参照してください。バリアント制御モードのさまざまな種類の比較については、Compare Different Types of Variant Control Modes in Variant Blocksを参照してください。

依存関係

使用できるさまざまなバリアントのアクティベーションのタイミングは、指定する [バリアント制御モード] の種類によって異なります。[バリアントのアクティベーションのタイミング] パラメーターに応じて、アクティブな選択肢が Simulink で設定されるタイミングが決まります。生成されたコードに含まれる変動性も、このパラメーターで決まります。次の表に、それぞれのバリアント制御モードでサポートされるバリアントのアクティベーションのタイミングを示します。

バリアントのアクティベーションのタイミング
バリアント制御モードブロック線図の更新ブロック線図の更新時にすべての選択肢を解析コードのコンパイル起動
ラベルxxx
sim/codegen の切り替えxx

プログラムでの使用

ブロック パラメーター: VariantControlMode
型: 文字ベクトル
値: | ラベル | sim/codegen の切り替え |
既定の設定:

このパラメーターはシミュレーションおよびコード生成のワークフローに含める変動性を決定します。詳細については、Activate Variant During Different Stages of Simulation and Code Generation Workflowを参照してください。

[バリアントのアクティベーションのタイミング] パラメーターは、次のように設定できます。

  • ブロック線図の更新 — モデルの実行時、シミュレーションおよびコード生成のワークフローにはアクティブな選択肢のみが含まれます。生成されたコードには、アクティブな選択肢のみが含まれます。

  • ブロック線図の更新時にすべての選択肢を解析 — モデルの実行時、アクティブな選択肢と非アクティブな選択肢の両方の一貫性がモデル全体で解析されます。ただし、シミュレーションおよびコード生成のワークフローにはアクティブな選択肢のみが含まれます。生成されたコードには、アクティブな選択肢のみが含まれます。

  • コードのコンパイル — モデルの実行時、アクティブな選択肢と非アクティブな選択肢の両方の一貫性がモデル全体で解析され、すべての選択肢がシミュレーションおよびコード生成のワークフローに含まれます。生成されたコードにはアクティブな選択肢と非アクティブな選択肢の両方が、プリプロセッサ条件 #if#elif に囲まれて含まれます。ただし、生成されたコードからビルドされる実行可能ファイルには、アクティブな選択肢のみが含まれます。

  • 起動 — モデルの実行時、アクティブな選択肢と非アクティブな選択肢の両方の一貫性がモデル全体で解析され、すべての選択肢がシミュレーションおよびコード生成のワークフローに含まれます。このオプションでは、高速リスタートを使用して対話型シミュレーションの速度を向上させることができます。詳細については、Run Iterative Simulations Without Recompiling Model for Variant Systems Using Fast Restartを参照してください。モデルから生成されたコードには、通常の if 条件で囲まれたアクティブな選択肢と非アクティブな選択肢の両方が含まれます。生成されたコードからビルドされる実行可能ファイルにも、アクティブな選択肢と非アクティブな選択肢の両方が含まれます。

  • Simulink.VariantControl から継承 — モデルの実行時、ブロックの Simulink.VariantControl 型のバリアント制御変数からアクティベーションのタイミングが継承されます。バリアント ブロックに Simulink.VariantControl 型のバリアント制御変数が複数ある場合、それらのすべての変数でアクティベーションのタイミングが同じでなければなりません。

依存関係

使用できるバリアントのアクティベーションのタイミングは、指定するバリアント制御モードの種類によって異なります。[バリアントのアクティベーションのタイミング] パラメーターに応じて、アクティブな選択肢が Simulink で設定されるタイミングが決まります。生成されたコードに含まれる変動性も、このパラメーターで決まります。次の表に、それぞれのバリアント制御モードでサポートされるバリアントのアクティベーションのタイミングを示します。

バリアントのアクティベーションのタイミング
バリアント制御モード ブロック線図の更新ブロック線図の更新時にすべての選択肢を解析コードのコンパイル起動
ラベルxxx
sim/codegen の切り替えxx

プログラムでの使用

ブロック パラメーター: VariantActivationTime
型: 文字ベクトル
値: [ブロック線図の更新] | [ブロック線図の更新時にすべての選択肢を解析] | [コードのコンパイル] | [起動]
既定の設定: [ブロック線図の更新]

テーブルには、Variant Source ブロックの入力端子に接続されたバリアントの選択ごとに 1 つの行があります。バリアント選択が存在しない場合、テーブルは空になります。

[端子および関連付けられている条件] テーブルの左にあるボタンを使用して、テーブルの要素を変更できます。

目的クリックするボタン

新しい入力端子を追加します: 新しい入力端子をバリアントの選択として作成し、その新しい選択肢のエントリをテーブルに追加します。

the add a new input port button

選択した端子を削除します: 選択したバリアントの選択をブロックから削除し、そのエントリをテーブルから削除します。

the delete selected port button

選択されている Variant オブジェクトを作成/編集: 選択したバリアントの選択の Simulink.VariantExpression オブジェクトをグローバル ワークスペースで作成または編集し、Simulink.VariantExpression オブジェクトのパラメーター ダイアログ ボックスを使用してバリアント条件を指定します。

メモ

ベース ワークスペースを使用するモデルの場合、この操作によって Simulink.VariantExpression オブジェクトがベース ワークスペースに作成されます。このオブジェクトは現在の MATLAB セッションに対してのみ使用できます。データを永続的に保存するには、オブジェクトを MAT ファイルまたは MATLAB スクリプトに保存します。

the Create or Edit selected variant object button

Variant Source ブロックの上流で 1 つのバリアントの選択に接続されている入力端子の数。この値は読み取り専用です。

端子を追加するには the add a new input port button をクリックし、既存の端子を削除するには the delete selected port button をクリックします。

選択肢の名前。string として指定されます。

依存関係

このパラメーターを有効にするには、[バリアント制御モード][ラベル] に設定します。

アクティブな選択肢を決定する条件式を指定します。条件式が true と評価される場合、Simulink は対応するバリアント選択をアクティブにします。条件式が false と評価される場合、Simulink は対応するバリアント選択を非アクティブにします。

バリアント制御は、次のいずれかにすることができます。

ここで A および B"バリアント制御変数" と呼ばれるオペランドです。==~=、および && は、条件式の演算子です。条件式には、そのようなバリアント制御変数と演算子を 1 つ以上含めることができます。バリアント制御変数のサポートされる型と保存場所の詳細については、Types of Variant Control Variables (Operands) in Variant BlocksおよびStorage Locations for Variant Control Variables (Operands) in Variant Blocksを参照してください。演算子の詳細については、Types of Operators in Variant Blocks for Different Activation Timesを参照してください。

詳細については、Switch Between Choices Using Condition Expressions in Variant Blocksを参照してください。

メモ

Variant Assembly Subsystem ブロックでは、このパラメーターは左辺を [バリアント制御変数] とする自動生成された boolean 式のリストであり、式の右辺には [バリアント選択肢列挙] のメンバーが入ります。式の両辺は == で接続されます。このパラメーターは読み取り専用です。

プログラムでの使用

構造体フィールド: Variant パラメーター構造体の読み取り専用 variant.Name フィールドによって表現されます
型: 文字ベクトル
値: バリアントの選択に関連付けられたバリアント制御
既定の設定: 'variant'

この パラメーター は読み取り専用です。

このパラメーターには、Simulink.VariantExpression オブジェクトとして指定されている条件式が表示されます。条件式を変更または編集するには、ワークスペースでオブジェクトをダブルクリックすると表示される Simulink.VariantExpression パラメーター ダイアログ ボックスを使用します。

メモ

Simulink.VariantExpression の条件式で指定するオペランドは、ベース ワークスペースまたはデータ ディクショナリで定義されていなければなりません。マスクまたはモデル ワークスペースで定義されているオペランドの指定はサポートされません。

このリストには、バリアントの選択すべてのラベルが含まれています。アクティブな選択肢を設定するには、リストからラベルを選択します。対応する選択肢がアクティブになります。または、Set Active Choices Using Variant Control Labelsで説明している方法に従って、ラベル モードのアクティブな選択肢を変更できます。

依存関係

このパラメーターを有効にするには、[バリアント制御モード] パラメーターを [ラベル] に設定します。

プログラムでの使用

パラメーター: LabelModeActivechoice
型: 文字ベクトル
値: ラベル モードのアクティブな選択肢が指定されない場合、値は空です。ラベル モードのアクティブな選択肢が指定される場合、値はラベル モードのアクティブな選択肢の名前です。
既定の設定: ''
  • off — アクティブなバリアントの選択がないと、Simulink でエラーが発生します。

  • on — このパラメーターを選択すると、アクティブなバリアントの選択がない場合に、Simulink は Variant Source ブロックに接続されたバリアントの選択なしでモデルのシミュレーションを行います。Simulink は Variant Source ブロックの入力ストリームと出力ストリームに接続されているすべてのブロックの接続を解除し、それによってモデルからバリアント領域を完全に削除します。

    生成コードでは、Variant Source ブロックの入力ストリームと出力ストリームに接続されたすべてのブロックが条件付きになります。

説明の節で示した自動車のワイパーの例で考えてみます。ここでは、自動車のワイパーの手動操作のみをシミュレートするとします。そのため、モデルのレイン センサーの設定は必要ありません。[ゼロ アクティブ バリアント制御を許可]on に設定すると、Rain Sensor Variant Source ブロックにアクティブなバリアントの選択がない場合、Simulink は Rain Sensor Variant Source ブロックとそれに接続されているすべてのブロックの接続を解除し、モデルからバリアント領域を完全に削除します。

次の表に、アクティベーションのタイミングが [コードのコンパイル] のコードの生成について、[ゼロ アクティブ バリアント制御を許可] パラメーターを使用する場合と使用しない場合のコードを示します。[ゼロ アクティブ バリアント制御を許可]off に設定した生成コードでは、バリアントの選択の Rain Sensor Model 1Rain Sensor Model 2 が条件付きになります。F1 ブロックは無条件であるため、選択肢のいずれかに対して実行されます。このコードは、選択肢のいずれかが true と評価されるシナリオのみをサポートします。true と評価される選択肢がない場合は、両方の選択肢がコンパイルから削除されます。F1 ブロックが無効な入力を受信するためエラーになります。[ゼロ アクティブ バリアント制御を許可]on に設定した生成コードでは、バリアントの選択の Rain Sensor Model 1Rain Sensor Model 2、および接続された F1 ブロックが条件付きになります。そのため、true と評価される選択肢がない場合は、F1 ブロックも削除されるため、そのバリアント領域をコードのコンパイルから完全に削除できます。

[ゼロ アクティブ バリアント制御を許可] を使用しない生成コード[ゼロ アクティブ バリアント制御を許可] を使用した生成コード
# if R == 1
  /* logic for Rain Sensor Model 1; */
# elif R == 2
  /* logic for Rain Sensor Model 2; */
# endif

/* If none of the conditions R == 1 or R == 2 evaluate to true, 
the filter F1 receives an invalid input which
resuls in an error.*/

/* logic for filter F1; */
# if R == 1
  /* logic for Rain Sensor Model 1; */
# elif R == 2
  /* logic for Rain Sensor Model 2; */
# endif

/* The logic for filter F1 is executed only if 
either of the conditions evaluate to true. 
F1 is removed from code compilation if none of the
condition evaluates to true. */

# if (R == 1) ∥ (R == 2)
  /* logic for filter F1; */ 
# endif

依存関係

このパラメーターは、[バリアント制御モード][式] に設定する場合にのみ使用できます。

プログラムでの使用

ブロック パラメーター: AllowZeroVariantControls
型: 文字ベクトル
値: 'off' | 'on'
既定の設定: 'off'

このパラメーターを選択すると、Simulink において、Variant Source ブロックの入力端子で関数呼び出し信号を受け取り、その信号を出力端子で条件付きでマージできるようになります。詳細については、Variant Signals from Variant Source Outport to Function-Call Subsystemを参照してください。

プログラムでの使用

ブロック パラメーター: OutputFunctionCall
型: 文字ベクトル
値: 'off' | 'on'
既定の設定: 'off'

このオプションを選択すると、Simulink で Variant Source ブロックの各端子のバリアント条件式に注釈が付けられます。

プログラムでの使用

ブロック パラメーター: ShowConditionOnBlock
型: 文字ベクトル
値: 'off' | 'on'
既定の設定: 'off'

ブロックの特性

データ型

Boolean | bus | double | enumerated | fixed point | half | integer | single | string

直達

いいえ

多次元信号

いいえ

可変サイズの信号

いいえ

ゼロクロッシング検出

いいえ

拡張機能

C/C++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。

固定小数点の変換
Fixed-Point Designer™ を使用して固定小数点システムの設計とシミュレーションを行います。

バージョン履歴

R2016a で導入