ドキュメンテーション

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

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

バリアントとは

Simulink® では、バリアント ブロックを使用して複数のバリアント要件に対応する 1 つのモデルを作成できます。このようなモデルには共通の固定構造と可変コンポーネントの有限セットがあります。可変コンポーネントは選択したバリアントの選択に応じてアクティブになります。したがって、結果としてアクティブになるモデルは、固定構造とバリアントの選択に基づいた可変コンポーネントの組み合わせになります。

バリアント ブロックをモデル内で使用すると、バリアントの選択と呼ばれるさまざまな条件式でのモデルの再利用性に役立てることができます。このアプローチによって、用途、コストまたは操作上の考慮事項により決定する多様な顧客要件を満たすことができます。

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

  • Variant Subsystem: 階層モデル構造用。ブロックはバリアント システムとして使用する 2 つの Subsystem ブロックをもつテンプレートです。バリアントに Subsystem ブロックと Model ブロックを追加できます。

  • Variant Model: 階層モデル構造用。ブロックはバリアント システムとして使用する 2 つの Model ブロックをもつテンプレートです。バリアントに Model ブロックと Subsystem ブロックを追加できます。

  • インライン バリアント: フラットなモデル構造用。

メモ

単一入力の Variant Source / Variant Sink ブロックのサンプル時間は、複数入力の Variant Source / Variant Sink ブロックとは異なる場合があります。サンプル時間の詳細については、サンプル時間とは を参照してください。

Variant Subsystem ブロックを使用すると、次のようなメリットがあります。

  • Model ブロックと Subsystem ブロックをバリアント システムとして混在させることができる

  • 柔軟な I/O をサポートし、すべてのバリアントで入力端子と出力端子を同じ数にする必要がない

バリアント モデルを含む Model ブロックを、バリアント モデルを参照する Model ブロックを含む Variant Subsystem ブロックに変換するには、Model ブロックを右クリックし、[サブシステムとモデル参照][変換][Variant Subsystem] を選択します。代わりに、関数 Simulink.VariantManager.convertToVariant を使用することもできます。Model ブロックの名前またはブロック ハンドルを指定します。変換されたモデルでは、元のモデルと同じ結果が生成されます。

複数のコンフィギュレーションのある自動車を表すモデルのシミュレーションを行う場合、これらのコンフィギュレーションには多くの類似点がある一方、燃料消費、エンジンのサイズ、排気規制などのプロパティが異なる可能性があります。考えられるすべてのコンフィギュレーションを共に表す複数のモデルを設計するのではなく、バリアントを使用して変動するコンフィギュレーションのみをモデル化できます。このアプローチでは、共通のコンポーネントは固定されます。

このモデルには、単一の Variant Subsystem ブロック内に 2 つのバリアントの選択が含まれます。バリアントの選択には、モデルの 2 つ以上のコンポーネントのコンフィギュレーションがあります。

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

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

  • バリアントは多くのシステム用の 1 つのモデルを設計する方法を提供します。

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

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

  • モデルのコンポーネントにいくつかの代替設定がある場合、固定コンポーネントや不変コンポーネントを変更することなく、これらの可変の代替設定を効率的に調べることができます。

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

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

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

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

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

バリアントは、単一の統合されたブロック線図で 1 つのモデルの複数の実装を指定するのに役立ちます。以下にバリアントを使用できる 3 つのシナリオを示します。

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

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

    バリアントの選択を表す Subsystem ブロックは、親の Variant Subsystem ブロックとは数が異なる入力端子および出力端子をもつことができます。バリアントの選択の入力端子と出力端子のマッピングを参照してください。

  • テスト モデルをデバッグ モデルと区別する場合など、大部分は類似していてもわずかな変動があるモデル。

    左側のテスト モデルは固定された設計です。右側の同じテスト モデルには、デバッグ目的で導入されたバリアントが含まれています。

Simulink はブロック線図の更新時とコードのコンパイル時にアクティブなバリアントを選択します。

Simulink におけるバリアントの表現のオプション

次のブロック内で、1 つ以上のバリアントをバリアントの選択として表現できます。

 

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

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

バリアントの選択の表現

端子数

Subsystem または Model ブロック

選択肢の階層を許可

なし

あり

バリアントの選択の間で入力端子と出力端子の数が一致しない

Simulink は非アクティブな端子を無効にする

Simulink は非アクティブな端子を無効にする

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

あり

あり

制御端子のサポート

なし

あり

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

なし

なし

物理モデリングの接続端子をサポートする

なし

部分的

コメントの選択 (%)

なし

なし

さらに、Variant Source ブロックおよび Variant Sink ブロックを使用してバリアントの選択を表現できます。これらのブロックにより、モデル全体でバリアント条件の伝播が可能になり、モデル参照階層を通じて条件を伝播できます。

モデルの階層構造内の複数のレベルでバリアントを作成できます。

バリアントの選択の入力端子と出力端子のマッピング

Variant SubsystemSubsystem ブロックまたは Model ブロックとして表されるバリアントの選択のコンテナーです。Variant Subsystem ブロックが上流のモデル コンポーネントから受信する入力は、バリアントの選択の入力端子および出力端子にマッピングします。

バリアントの選択を表す Subsystem ブロックおよび Model ブロックは、親の Variant Subsystem ブロックとは数が異なる入力端子および出力端子をもつことができます。ただし、次の条件を満たさなければなりません。

  • バリアントの選択の入力端子名が親の Variant Subsystem で使用される入力端子名のサブセットである。

  • バリアントの選択の出力端子名が親の Variant Subsystem で使用される出力端子名のサブセットである。

  • バリアントの選択が制御端子をもつ場合、データ入力端子の名前は制御端子の名前と一致しなければならない。

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

バリアントのバッジ

各バリアント ブロックには、そのブロックに関連付けられたバッジがあります。バリアント バッジの色とアイコンは、バリアント ブロックのステータスを示しています。また、一部のバリアント コマンドへの迅速なアクセスも提供します。これらのコマンドにアクセスするには、バリアント バッジを右クリックします。

バリアントのバッジ

バリアント ソース

バリアント シンク

バリアント サブシステム

オプションが選択されていない場合の既定のバリアント バッジ。

[バリアント制御モード][ラベル] が選択され、[ラベル モードのアクティブな選択肢] オプションからアクティブなバリアント選択が選択されているバリアント ブロック。

[ゼロ アクティブ バリアント制御を許可] オプションが選択されているバリアント ブロック。

[ブロック線図の更新中にすべての選択肢を解析し、プリプロセッサの条件を生成する] オプションが選択されているバリアント ブロック。

[Variant Subsystem の外部に条件を伝播する] オプションが選択されているバリアント ブロック。

なし

なし

[ブロック線図の更新中にすべての選択肢を解析し、プリプロセッサの条件を生成する] オプションと [ゼロ アクティブ バリアント制御を許可] オプションが選択されているバリアント ブロック。

[ブロック線図の更新中にすべての選択肢を解析し、プリプロセッサの条件を生成する] オプションと [Variant Subsystem の外部に条件を伝播する] オプションが選択されているバリアント ブロック。

なし

なし

[ゼロ アクティブ バリアント制御を許可] オプションと [Variant Subsystem の外部に条件を伝播する] オプションが選択されているバリアント ブロック。

なし

なし

コメント アウトとコメント スルー

ブロックの一部をシミュレーションから除外し、そのブロックをモデルから物理的に削除することなく、Simulink モデルをシミュレートする場合について考えます。Simulink の [コメント アウト] コマンドと [コメント スルー] コマンドを使用すると、ブロックをシミュレーションから除外することができます。モデル化要件に応じて、次のオプションを使用できます。

  • コメント アウト: 選択されたブロックをシミュレーションから除外します。信号は終了し、接地します。

  • コメント スルー: 選択されたブロックをシミュレーションから除外します。信号は通過します。ブロックをコメント スルーするには、ブロックの入力端子と出力端子の数が同じでなければなりません。

[コメント アウト] オプションまたは [コメント スルー] オプションにアクセスするには、ブロックを右クリックして、コンテキスト メニューでモデル化要件に基づいて [コメント アウト] または [コメント スルー] のいずれかを選択します。

あるいは、ブロックを選択して、Ctrl + Shift + X を押してコメント アウトするか、Ctrl + Shift + Y を押してコメント スルーすることもできます。

get_param コマンドおよび set_param コマンドを使用することで、コメント化されたブロックの状態をプログラムによって表示または変更できます。たとえば、以下のようになります。

  • get_param(gcb,'commented'); % To view the commented state of the block

  • set_param(gcb,'commented','on'); % To comment out a block

  • set_param(gcb,'commented','through'); % To comment through a block

  • set_param(gcb,'commented','off'); % To uncomment a block

ブロックをコメント アウトすると、ブロックの出力端子の信号名は無視されます。シミュレーション中にこうした信号を含めるには、信号名をブロックの入力端子に追加しなければなりません。

[コメント アウト][コメント スルー] は、次のブロックではサポートされていません。Inport ブロック、Outport ブロック、Duplicate Port ブロック、Connection ports ブロック、Argument Inport ブロック、Argument Outport ブロック、Data Store Memory ブロック、Signal Generator ブロック、Goto Tag Visibility ブロック、For ブロックおよび While ブロック。

関連する例

詳細