Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

Variant Subsystem、Variant Model

バリアントの選択として Subsystem ブロック、Model ブロック、または Subsystem Reference ブロックが含まれているテンプレート サブシステム

  • ライブラリ:
  • Simulink / Ports & Subsystems

    HDL Coder / Ports & Subsystems

  • Variant Subsystem, Variant Model block

説明

Variant Subsystem ブロックでは、別の階層内におけるコンポーネントの複数の実装を含めることができます。

たとえば、次の 3 つのエンジンの構成を取りうる車両を表すモデルのシミュレーションを行うとします。4 気筒ガソリン、6 気筒ガソリン、8 気筒ガソリン。各エンジン モデルを Variant Subsystem 内の別個のサブシステムとして実装して、選択するTypes of Variant Control Modes in Variant Blocksに基づいてそれらのサブシステム間で切り替えを行うことができます。詳細については、バリアント制御の紹介を参照してください。

メモ

Variant Subsystem の 1 つの実装のみが、シミュレーション時にアクティブです。

Multiple models of an engine inside a Variant Subsystem block

Variant Subsystem ブロックは、バリアントの選択として使用するために 2 つ以上のブロックを含めるように事前構成されたテンプレートです。これらの選択肢は、システムの複数の実装を表します。モデルの実行時には、1 つの子ブロックのみがアクティブになります。アクティブな子ブロックは "アクティブなバリアント" と呼ばれます。

Variant Subsystem ブロック内の各バリアントの選択は、バリアント制御モード, Variant control modeバリアント制御モードVariant control modeおよびバリアントのアクティベーションのタイミング, Variant activation timeバリアントのアクティベーションのタイミングVariant activation timeに関連付けられます。バリアント制御モードによってアクティブなバリアントの選択方法が決まります。バリアントのアクティベーションのタイミングによって、選択をアクティブにするタイミングが決まります。さらに、生成されたコードに、アクティブな選択のみを含めるか、またはアクティブな選択と非アクティブな選択の両方を含めるかを決定します。

Variant Subsystem ブロックには、バリアントの選択として、Subsystem ブロック、Model ブロック、または Subsystem Reference ブロックを混在させることができます。Model ブロックを選択肢としてもつ Variant Subsystem ブロックは、Variant Model ブロックと呼ばれます。これらのブロックの詳細については、サブシステムの作成Model、およびサブシステム参照を参照してください。

バリアントの選択とは別に、Variant Subsystem ブロック内にはInportブロック、Outportブロック、およびConnection Port (Simscape)ブロックを含めることができます。Variant Subsystem ブロック内のブロック間には、接続が描かれません。Simulink® は、モデルのコンパイル中にアクティブなバリアントを Variant SubsystemInport ブロックおよび Outport ブロックに自動的に配線します。バリアントの選択を表すブロックは、親の Variant Subsystem ブロックの入力端子と出力端子とは数が異なる入力端子および出力端子をもつことができます。詳細については、Variant Subsystem でのバリアントの選択の入力端子と出力端子のマッピングを参照してください。

Variant Subsystem ブロックを使用して、次を実現できます。

  • Subsystem ブロック、Model ブロックおよび Subsystem Reference ブロックをバリアントの選択として混在させる。

  • 類似のインターフェイスをもたないコンポーネントをモデル化する。Variant Subsystem 内の複数のバリアント選択について、異なる数の入力端子と出力端子をもつことができます。

  • 階層的なブロック線図を作成し、Variant Subsystem ブロックを 1 つの層に、バリアント選択を別の層に配置する。

  • 機能的に関連したブロックを 1 つに集約する。

  • モデルの複雑度を低減させる。

  • モデルをコンパイルする際に、Simulink はモデル全体の非アクティブなブロックを排除するため、実行時のモデルのパフォーマンスが向上します。

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

端子

Simulink のシミュレーションの実行中は、Variant Subsystem ブロックの非アクティブな端子は無効になります。

入力

すべて展開する

Variant Subsystem 内に含まれる Subsystem ブロック、Model ブロック、または Subsystem Reference ブロックはそれぞれ、1 つのバリアント選択を表します。バリアントの選択は、Variant Subsystem コンテナー ブロックと同じ入力端子のセットまたはサブセットをもつことができます。

出力

すべて展開する

Variant Subsystem 内に含まれる Subsystem ブロック、Model ブロック、または Subsystem Reference ブロックはそれぞれ、1 つのバリアント選択を表します。バリアントの選択は、Variant Subsystem コンテナー ブロックと同じ出力端子のセットまたはサブセットをもつか、コンテナー ブロックの端子のサブセットとなる可能性があります。

メモ

Variant Subsystem の接続されていない出力端子 (非アクティブな出力端子) はグラウンド値を出力します。グラウンド以外の値を出力するには、Outport ブロックの [ソース非接続時に出力を指定] パラメーターを選択して値を指定します。

パラメーター

すべて展開する

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

  • [式] モードでは、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 分岐を選択します。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

このパラメーターはシミュレーションおよびコード生成のワークフローに含める変動性を決定します。詳細については、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 で設定されるタイミングが決まります。生成されたコードに含まれる変動性も、このパラメーターで決まります。次の表に、それぞれのバリアント制御モードでサポートされるバリアントのアクティベーションのタイミングを示します。

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

プログラムでの使用

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

テーブルには、Variant Subsystem に含まれる各バリアント選択の行があります。バリアント選択が存在しない場合、テーブルは空になります。

[バリアントの選択] テーブルの左にあるボタンを使用して、テーブルの要素を変更できます。

目的...クリックするボタン
新しいサブシステムの選択を作成して追加:新規の Subsystem ブロックをバリアント選択として作成し、その新規の選択肢のエントリをテーブルに追加します。the Create and add a new subsystem choice button
新しいモデル バリアントの選択を作成して追加します: 新規の Model ブロックをバリアント選択として作成し、その新規の選択肢のエントリをテーブルに追加します。the Create and add a new model variant choice button

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

メモ

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

the Create or Edit selected variant object button
選択されているバリアントの選択ブロックを開きます: 選択した行の Subsystem ブロックを開きます。the Open selected variant choice block button
Variant Subsystem の内容のダイアログ情報を更新:バリアント選択およびグローバル ワークスペースのバリアント制御の値に応じて [バリアントの選択] テーブルを更新します。the Refresh dialog information from Variant Subsystem contents button

この読み取り専用のフィールドには、Variant Subsystem に含まれるブロックの名前が表示されます。

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

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

メモ

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

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

依存関係

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

プログラムでの使用

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

  • on — このオプションを選択し、アクティブなバリアントの選択がない場合、Simulink は Variant Subsystem 内のアクティブなバリアント選択なしでモデルのシミュレーションを行います。Simulink は Variant Subsystem ブロックの入力ストリームと出力ストリームに接続されているすべてのブロックの接続を解除し、それによってモデルからバリアント領域を完全に削除します。Subsystem の非アクティブな出力端子はグラウンド値を出力します。グラウンド以外の値を出力するには、Outport ブロックの [ソース非接続時に出力を指定] パラメーターを選択し、選択する値を指定します。

依存関係

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

プログラムでの使用

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

[Variant Subsystem の外部に条件を伝播する] パラメーターを選択すると、Simulink は、基となるブロックのバリアント条件を Variant Subsystem コンテナー ブロックに伝播して、サブシステムがそのインターフェイスを基となるブロックの状態に適応できるようにします。アクティブな選択肢の端子にマッピングされた端子がアクティブになります。非アクティブな選択肢の端子にマッピングされていない端子が非アクティブになります。このオプションを選択すると、Variant Subsystem の外部のコンポーネントが Variant Subsystem ブロック内のブロックのアクティブな状態と非アクティブな状態を確実に認識します。詳細については、Variant Subsystem の外部へのバリアント条件の伝播およびUse Variant Subsystem Blocks with Conditionally Executed Subsystemsを参照してください。

メモ

ブロック内のすべてのバリアント選択が同じインターフェイスをもつ場合、バリアント条件は Variant Subsystem ブロックの外部に伝播しません。

プログラムでの使用

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

ブロックの特性

データ型

Booleana | busa | doublea | enumerateda | fixed pointa | halfa | integera | singlea | stringa

直達

いいえ

多次元信号

限定的a

可変サイズの信号

限定的a

ゼロクロッシング検出

いいえ

a 実際のデータ型または機能のサポートは、ブロックの実装に依存します。

拡張機能

バージョン履歴

R2010b で導入