Main Content

Variant Sink

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

  • Variant Sink block

ライブラリ:
Simulink / Signal Routing

説明

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

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

メモ

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

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

The Variant Sink block has only one input port and one or more output ports. You can connect the varying choices to the output port of the block so that, at most, one choice is active during model execution.

The Variant Sink block is associated with a バリアント制御モード and a バリアントのアクティベーションのタイミング. The variant control mode determines how to specify the variant control. The variant activation time determines a time to activate the choices and to decide whether to include only the active choice or both active and inactive choices in the generated code. During simulation, Simulink® connects the active choice directly to the input port of the Variant Sink block and ignores the inactive choices.

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

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

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

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

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

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

制限

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

端子

入力

すべて展開する

アクティブな出力端子に接続する入力信号。

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

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

出力

すべて展開する

最初のバリアントからの出力信号。true と評価されるバリアント制御によって、アクティブになる出力端子が決まります。

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

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

N 番目のバリアントからの出力信号。true と評価されるバリアント制御によって、アクティブになる出力端子が決まります。

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

パラメーター

すべて展開する

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

  • [式] モードでは、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 Sink ブロックの出力端子に接続されたバリアントの選択ごとに 1 つの行があります。バリアント選択が存在しない場合、テーブルは空になります。

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

目的クリックするボタン

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

the add a new output 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 Sink ブロックの上流で 1 つのバリアントの選択に接続されている出力端子の数。この値は読み取り専用です。

端子を追加するには the add a new output 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 Sink ブロックに接続されたバリアントの選択なしでモデルのシミュレーションを行います。Simulink は Variant Sink ブロックの入力ストリームと出力ストリームに接続されているすべてのブロックの接続を解除し、それによってモデルからバリアント領域を完全に削除します。

説明の節で示した自動車のワイパーの例で考えてみます。ここでは、バリアントの選択の wiper motorD/A のいずれかにワイパーの速度を渡さないとします。[ゼロ アクティブ バリアント制御を許可]on に設定してモデルをシミュレートすると、Variant Sink controlled by mode ブロックにアクティブなバリアントの選択がない場合、Simulink は Variant Sink controlled by mode ブロックとそれに接続されているすべてのブロックの接続を解除し、モデルからバリアント領域を完全に削除します。

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

[ゼロ アクティブ バリアント制御を許可] を使用しない生成コード[ゼロ アクティブ バリアント制御を許可] を使用した生成コード
/* If none of the conditions Mode == 1 or Mode == 2
 evaluate to true, the output of Gain remains unused which
resuls in an error.*/

/* logic for Gain; */

# if Mode == 1
  /* logic for wiper motor; */
# elif Mode == 2
  /* logic for digital to analog conversion; */
# endif
# if Mode == 1
  /* logic for wiper motor; */
# elif Mode == 2
  /* logic digital to analog conversion; */
# endif

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

# if (Mode == 1) ∥ (Mode == 2)
  /* logic for Gain; */
# endif

依存関係

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

プログラムでの使用

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

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

プログラムでの使用

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

ブロックの特性

データ型

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

直達

いいえ

多次元信号

いいえ

可変サイズの信号

いいえ

ゼロクロッシング検出

いいえ

拡張機能

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

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

バージョン履歴

R2016a で導入