Main Content

バリアントとは、およびどのような場合にそれを使用するか

バリアントとは

モデルベース デザイン ワークフローでは、さまざまな要件セットを満たすためにシステム コンポーネントに対して複数の設計バリエーションを作成することが重要です。これらの要件はさまざまな市場ニーズ、顧客の基本設定、地図機能に対応できます。要件から展開まで、開発ライフサイクル全体を通して、これらの設計の選択肢を切り替えなければならない場合があります。

Simulink® バリアント機能を使用することで、1 つのモデル内でシステムのすべての代替設計を表現できます。設計の選択肢はそれぞれバリアントの選択としてモデルに組み込まれます。このようなモデルには、共通の固定構造と、バリアントの選択に応じてアクティブになる可変コンポーネントの有限セットがあります。このモデルは Variant Source ブロックを使用してシステムへの入力信号に対するバリアントの選択を実装する方法を示します。非アクティブな選択肢は薄く表示されます。

例については、バリアントを使用した多くのシステムに対する 1 つのモデルの作成を参照してください。

Variable and fixed components in a model

バリアントを使用する利点

モデルベース デザインでバリアントを使用する場合、いくつかの利点が得られます。

  • バリアントを使用して多くのシステムに対して 1 つのモデルを設計できます。

  • モデルのセクションをコメントアウトせずに、設計の可能性をバリアントとしてすばやくプロトタイプを作成できます。

  • バリアントは、再利用とカスタマイズ用のモジュール設計プラットフォームの開発に役立ちます。このアプローチは、複雑さを低減してワークフローの速度を改善します。

  • モデルのコンポーネントにいくつかの代替設定がある場合、固定コンポーネントを変更することなく、代替設定を確認できます。

  • シミュレーションまたはコード生成用に、同一のモデルから異なるバリアント コンフィギュレーションを使用できます。

  • 特定のテスト スイート用に考えられるすべての設計のシミュレーションを実行できます。

  • 大規模な設計作業の場合、これらの設計をテストするプロセスを、マルチコア コンピューターのクラスターに分散できます。一方で、設計に固有なテストを効果的に管理するための代替設計用に、異なるテスト スイートをマッピングできます。

  • 多数のバリアントをもつモデルから、バリアント コンフィギュレーションのサブセットに対して削減されたモデルを生成できます。

どのような場合にバリアントを使用するか

以下にバリアントを使用できる 3 つのシナリオを示します。

複数のシミュレーション、コード生成、テスト ワークフローを表すモデル。

コンポーネント レベルで複数の設計の選択肢が含まれるモデル。

テスト モデルをデバッグ モデルと区別する場合など、大部分は類似していてもわずかな変動があるモデル。左側のテスト モデルは固定された設計です。右側の同じテスト モデルには、デバッグ目的で導入されたバリアントが含まれています。

Simulink のバリアントのタイプ

"バリアント ブロック" を使用することで、1 つのモデル内でシステム コンポーネントの複数の構造またはアルゴリズムの実装を表現し、要件に応じてそれらを切り替えられます。Simulink におけるバリアント ブロックのタイプの概要については、Simulink のバリアント ブロックを参照してください。

"バリアント パラメーター" を使用することで、ブロック パラメーターに対して変動する値が必要な設計バリエーションを実装できます。詳細については、バリアント パラメーターを使用した値が異なるブロック パラメーターの再利用を参照してください。

"バリアント遷移" では、同じ Stateflow® チャート内で複数の設計の設定に遷移できます。詳細については、バリアント条件を使用したインジケーター ランプ調光器の制御 (Stateflow)を参照してください。

"次元バリアント" では、バリアント条件に基づいて変動するシンボリック次元を指定できます。Implement Symbolic Dimensions for Array Sizes in Generated Code (Embedded Coder)を参照してください。

"AUTOSAR バリアント" では、バリアント ブロックを使用して変動点とともに AUTOSAR ソフトウェア コンポーネントを実装できます。AUTOSAR バリアントのモデル化 (AUTOSAR Blockset)を参照してください。

ヒント

Simulink におけるバリアントの機能を示す例のリストについては、V-Model for System Development with Simulink Variantsを参照してください。

バリアントで使用する重要な用語とパラメーターの定義を確認するには、バリアントの用語を参照してください。

バリアント コード生成機能を示す例については、バリアント システム (Embedded Coder)を参照してください。

Simulink のバリアント ブロック

以下のバリアント ブロックをモデル設計に応じて使用します。

  • モデル内の個別の階層内にコンポーネントの複数の実装を作成する "階層的バリアント ブロック"

  • モデル内の同じレベルにあるすべてのバリアント実装を表現する "インライン バリアント ブロック"

  • バリアントを使用してコンテキスト依存のシステム動作をモデル化する "イベントベースのバリアント"

バリアントのタイプバリアント ブロック用途
階層的バリアント ブロックVariant Subsystem

Variant Subsystem ブロックは、バリアントの選択肢を表現するために Subsystem ブロックで事前構成されたテンプレートです。

Variant Subsystem ブロックでは、バリアントの選択として、Subsystem ブロック、Model ブロック、または Subsystem Reference ブロックの組み合わせが許可されます。

Variant Model

Variant Model ブロックは、バリアントの選択を表現するために 2 つの Model ブロックで事前構成されたテンプレートです。

Variant Model ブロックでは、バリアントの選択として、Subsystem ブロック、Model ブロック、または Subsystem Reference ブロックの組み合わせが許可されます。

Variant Assembly Subsystem

Variant Assembly Subsystem ブロックでは、外部ファイルからバリアントの選択を追加または削除できます。

Variant Assembly Subsystem では、バリアントの選択として、Model ブロックまたは Subsystem Reference ブロックの組み合わせが許可されます。

インライン バリアント ブロックVariant SourceVariant Source ブロックではその各入力端子に接続されているブロック領域としてバリアントの選択を定義できます。ブロックは信号のソースに変化を提供します。
Variant SinkVariant Sink ブロックではその各出力端子に接続されているブロック領域としてバリアントの選択を定義できます。ブロックは信号の接続先に変化を提供します。
Manual Variant SourceManual Variant Source ブロックは、その入力端子で複数のバリアントの選択を定義できる切り替えスイッチです。
Manual Variant SinkManual Variant Sink ブロックは、その出力端子で複数のバリアントの選択を定義できる切り替えスイッチです。
Variant Connector (Simscape)Variant Connector ブロックでは物理ネットワークでバリアントの選択を定義できます。コンポーネントを物理的に取り外したりシミュレーションから除外したりせずに、シミュレーション中にネットワーク内でコンポーネントを切り替えることができます。
イベントベースのバリアントSimulink FunctionSimulink Function ブロック内のバリアント機能により、ブロックを条件付きで使用可能にできます。関数呼び出し端子ブロックにバリアント条件を指定するか、ブロックで対応する Function Caller ブロックから条件を継承できます。
Initialize Function ブロック、Reset Function ブロックおよび Terminate Function ブロックInitialize ブロック、Reset ブロック、および Terminate ブロック内のバリアント機能により、ブロックを条件付きで使用可能にできます。Event Listener ブロックにバリアント条件を指定できます。

バリアント ブロックの比較

次の表に、階層的バリアント ブロックとインライン バリアント ブロックの比較を示します。

機能

Variant Source ブロックと Variant Sink ブロック

Variant Subsystem ブロックと Variant Model ブロック

バリアントの選択の表現

端子数

Subsystem ブロック、Model ブロック、または Subsystem Reference ブロック

別の階層にバリアントの選択を実装できる

なし

あり

バリアントの選択における入力端子と出力端子のフレキシブルな数のサポート (選択に類似のインターフェイスなし)

なし

[Variant Subsystem の外部に条件を伝播する] パラメーターが on に設定されている場合、あり。

既定のバリアントを指定するオプション

あり

あり

制御端子のサポート

なし

あり

スタンドアロン ファイルとして保存できる

なし

なし

物理接続ラインのモデル化に使用される Connection Port のサポート

なし

[バリアントのアクティベーションのタイミング] パラメーターが update diagram に設定されている場合のみ。

バリアントの選択のコメント ([ブロック パラメーター] ダイアログ ボックスでバリアント制御の前に % 記号を追加することにより)

なし

あり

バリアントを使用した多くのシステムに対する 1 つのモデルの作成

次の例は、Simulink モデル内のバリアントの設計を示しています。複数のコンフィギュレーションのある自動車を表すシステムをモデル化する場合の要件について検討します。これらのコンフィギュレーションには多くの類似点がある一方、燃料消費、モーター タイプ、排気規制などのプロパティが異なる可能性があります。

Automobile configurations with different properties

コンフィギュレーションごとに個別のモデルを設計する代わりに、1 つのモデル内でバリアントの選択としてコンフィギュレーションを表現できます。要件に応じて有効にするバリアントの選択をいずれか 1 つ選択できます。このアプローチでは、共通のコンポーネントは固定されます。

このモデルには、車両のモーターを表す Variant Subsystem ブロック Motor Variant Subsystem が含まれています。モーターには Variant Subsystem ブロック内のバリアントの選択として表される、2 つの考えられるコンフィギュレーション GasElectric があります。Variant Subsystem ブロックは基礎となるブロックの状態に従ってそのインターフェイスを適応します。ここでは、Electric モーターに exhaust temperature 入力はありません。Electric バリアントを有効にすると、Simulink は Motor Variant Subsystem で対応する端子と、その入力に関連付けられているその他のコンポーネントを自動的に無効にします。

このモデルの exhaust temperature センサーに対して、2 つのベンダーから提供されている異なる 5 つのセンサーを切り替える必要について検討します。Variant Source ブロックを使用すれば、同じモデル内のすべての選択を表現し、一度に 1 つの選択のみを有効にできます。

Variant Source blocks used to select a sensor

バリアントの取り扱い

バリアント モデルの視覚要素

視覚要素用途
バリアント条件の凡例

[バリアント条件の凡例] ダイアログ ボックスを使用して、モデルに適用されたバリアント条件を可視化できます。Simulink はバリアント条件をもつモデル コンポーネントに注釈を付け、[バリアント条件の凡例] に各注釈の条件が表示されます。Visualize Propagated Variant Conditions in Variant Conditions Legendを参照してください。

variant condition legend

バリアントのバッジ

各バリアント ブロックにはブロックに設定されたさまざまなパラメーター値によって変化するバッジが表示されます。バリアントのバッジを参照してください。

variant badge on variant block

バリアント フェージングと信号の強調表示

非アクティブなバリアント選択の色は既定で薄くなります。Simulink エディターの [デバッグ] タブにある [情報のオーバーレイ] メニューで [バリアント フェージング] オプションを使用することで、退色効果を無効にすることを選択できます。

バリアント ブロックを通過する信号を強調表示すると、アクティブなバリアント選択のパスが強調表示されます。バリアント システムでの信号の強調表示を参照してください。

Signal highlighting in variant model

バリアントのバッジ

各バリアント ブロックにバッジが表示されます。バリアントのバッジの色とアイコンは、そのブロックに設定されている以下のパラメーターの値に基づいて変化します。

  • バリアントのアクティベーションのタイミング

  • バリアント制御モード

  • ゼロ アクティブ バリアント制御を許可 (Variant Source ブロックと Variant Sink ブロックの場合)

  • バリアント サブシステムの外部に条件を伝播する (Variant Subsystem ブロックの場合)

バリアントのバッジは一部のバリアント コマンドへの迅速なアクセスも提供します。これらのコマンドにアクセスするには、バリアントのバッジを右クリックします。

メモ

バリアントのバッジの [ブロックの更新 (Ctrl+K)] オプションでは、バリアント ブロックのマスク ワークスペースで定義された変数は再評価されません。たとえば、ブロックのマスク ワークスペースで定義されたバリアント制御変数をもつマスクされた Variant Subsystem ブロックについて考えます。ブロックのアクティブな選択肢を変更するには、バリアント制御変数の値を変更します。[ブロックの更新 (Ctrl+K)] オプションをクリックしても、バリアント制御変数は再評価されないため、ブロックのアクティブな選択肢は更新されません。最新のアクティブな選択肢を反映するには、マスク ダイアログの [適用] をクリックするか、ブロック線図を更新する必要があります。

 バリアント ブロックのさまざまな設定に対するバリアントのバッジ アイコン

バリアントの選択の定義と制御

モデル内の各バリアントの選択は、その選択がアクティブか非アクティブかを決定するために使用される "バリアント制御" に関連付ける必要があります。バリアント ブロックの場合、[バリアント制御モード] パラメーターを使用してバリアント制御を指定するモードを選択できます。詳細については、バリアント制御の紹介を参照してください。

Variant control mode and variant activation time in the block parameters dialog box

バリアント条件の伝播を使用したバリアント領域の自動識別

Simulink は "バリアント条件の伝播" のプロセスによるシミュレーション中にアクティブなモデル コンポーネントを決定します。このプロセスは、バリアント ブロックで指定されたバリアント制御を評価し、接続しているブロックにバリアント条件を自動的に伝播します。バリアント条件は、信号線、バス、関数呼び出しを通して伝播できます。この処理は、非アクティブな選択肢に関連付けられているモデル コンポーネントのアクティベーションを停止します。これらはシミュレーションに含まれません。条件伝播を停止してモデルのバリアント領域を定義できます。Propagate Variant Conditions to Define Variant Regions with Variant Blocksを参照してください。

Variant condition propagation

バリアントのアクティベーションのタイミングの選択

[バリアントのアクティベーションのタイミング] パラメーターを使用して、アクティブなバリアント選択が決定されるタイミングも選択できます。このパラメーターはアクティブな選択肢と非アクティブな選択肢がどのようにシミュレーションおよびコード生成のワークフローに含まれるのかについても決定します。Activate Variant During Different Stages of Simulation and Code Generation Workflowを参照してください。

メモ

[バリアント制御モード]expression に設定されている場合にのみ、バリアント ブロックに対するバリアントのアクティベーションのタイミングを選択できます。

Manual Variant Source ブロックと Manual Variant Sink ブロックは、バリアント制御とバリアントのアクティベーションのタイミングをサポートしていません。これらは、アクティブな入力端子と出力端子に基づいて、それぞれアクティブなバリアント選択を決定します。

Variant Connector ブロックでは、バリアントのアクティベーションのタイミングはサポートされません。

バリアント マネージャーを使用したすべてのバリアントの管理

バリアント マネージャーは、モデルの階層構造を可視化し、階層全体でのバリアント要素の使用を一元管理できるツールです。

このツールは Variant Manager for Simulink というサポート パッケージとして提供されています。主な機能は次のとおりです。

  • バリアント マネージャー — モデルの階層構造を可視化し、階層全体でのバリアント要素の使用を管理し、バリアント コンフィギュレーションを作成および管理する。

  • バリアント リデューサー — 選択されたバリアント コンフィギュレーションのみを含む削減されたモデルを生成する。

  • バリアント アナライザー — バリアント コンフィギュレーションを比較対比してエラーや不整合を特定する。

バリアント コンフィギュレーションの作成および有効化:

モデルの階層構造にはいくつかのバリアント ブロックが含まれていることがあり、それぞれに多くのバリアントの選択があります。これらのバリアント選択の組み合わせはシステムの特定のコンフィギュレーションに対応しています。これらのコンフィギュレーションの切り替えと、それらの手動での検証は複雑であり、誤りが発生することがあります。バリアント マネージャーを使用して、モデルのバリアント コンフィギュレーションを作成および保存し、任意のコンフィギュレーションでモデルを実行できます。一連の制約に対してコンフィギュレーションを検証することもできます。

バリアント コンフィギュレーションの解析および削減:

バリアント マネージャーのバリアント アナライザー ツールを使用すると、モデルのバリアント コンフィギュレーションを比較して、各コンフィギュレーションで使用されるブロックを特定できます。このツールはモデル内の未使用の領域を識別できるため、モデル検証と妥当性確認ワークフローに役立ちます。

バリアント マネージャーのバリアント リデューサー ツールを使用して、バリアント コンフィギュレーションのサブセットに対する削減されたモデルを自動的に生成し、削減されたモデルを詳細レポートで解析できます。この削減プロセスにより、指定したバリアント コンフィギュレーションの非アクティブなコンポーネントが削除されます。バリアント リデューサーはモデル内の関連付けられているモデル参照、サブシステム参照、およびライブラリを削減します。このツールは MAT または .sldd ファイルなどの依存アーティファクトも削減し、削減されたすべてのアーティファクトを指定した出力フォルダーにパッケージ化します。

Variant Manager

Variant Manager for Simulinkを参照してください。

バリアント モデルからのコードの生成

Simulink Coder™ または Embedded Coder® を使用してバリアント モデルからコードを生成できます。コード生成用のバリアントが含まれるモデルの準備を参照してください。

バリアント コード生成機能を示す例については、バリアント システム (Embedded Coder)を参照してください。

関連する例

詳細