Main Content

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

バリアント制御の紹介

バリアントを含む Simulink® モデルのコンポーネントは選択したバリアントの選択に基づいてアクティブ化または非アクティブ化されます。

モデル内のバリアントのそれぞれの選択は、"バリアント制御" に関連付けられます。バリアント制御は、どのバリアントの選択がアクティブであるかを決定します。バリアント制御の値を変更することによって、アクティブなバリアントの選択を切り替えることができます。

バリアントのそれぞれの選択がバリアント制御に関連付けられますが、1 つのバリアント制御のみが true として評価されます。バリアント制御が true に評価された場合、Simulink はそのバリアント制御に対応するバリアント選択を有効にします。

バリアント ブロックとバリアント パラメーターをモデル化するために、バリアント制御のタイプを [式][ラベル]、または [sim/codegen の切り替え] に指定できます。

バリアント制御モード

[バリアント制御モード] パラメーターは、次のように指定できます。

  • [式] モードでは、Simulink はバリアント条件の評価に基づいてアクティブなバリアントを選択します。条件式が true と評価される場合、対応するバリアント選択がアクティブになります。条件式が false と評価される場合、対応するバリアント選択が非アクティブになります。バリアント ブロックとバリアント パラメーターの条件式を使用した選択の切り替えを参照してください。

  • ラベル[ラベル] モードでは、Simulink はバリアントの名前に基づいてアクティブなバリアントを選択します。バリアント制御は string であり、いずれのワークスペースでも変数を作成する必要はありません。バリアント ブロックのラベルを使用した選択の切り替えを参照してください。

  • sim/codegen の切り替え — ワークスペース変数を作成せずに、シミュレーションのためのバリアントとコード生成ワークフローを自動的に切り替えるには、[sim/codegen の切り替え] モードを使用します。モデルをシミュレーションするときに、Simulink はアクティブな選択肢として sim 分岐を自動的に選択します。同様に、ソフトウェアインザループ (SIL) またはプロセッサインザループ (PIL) シミュレーションを実行したり、コードを生成したり、エクスターナル モードを使用したりするときに、Simulink は自動的に codegen 分岐を選択します。バリアント ブロック内でのシミュレーションおよびコード生成ワークフローに対する選択肢の切り替えを参照してください。

バリアント ブロックとバリアント パラメーターの条件式を使用した選択の切り替え

[式] モードでは、Simulink はバリアント条件の評価に基づいてアクティブなバリアントを選択します。条件式が true と評価される場合、対応するバリアント選択がアクティブになります。条件式が false と評価される場合、対応するバリアント選択が非アクティブになります。

バリアント ブロックとバリアント パラメーターでバリアント制御の [式] タイプを使用できます。

  • バリアント ブロックでバリアント条件式を指定するには、次のようにします。

    • バリアント ブロックのバッジを右クリックし、[ブロック パラメーター] を選択してから、[ブロック パラメーター] ダイアログ ボックスの [バリアント制御式] パラメーターでバリアント制御式を指定します。

       バリアント制御モード: 式

    • 次のコマンドを使用して、プログラムで実行します。

      set_param('set_param('choiceName', 'VariantControl', 'A == 1')
      ここで、choiceName はバリアントの選択の絶対パスです。A == 1 はバリアントの選択に関連付けられた式です。

  • バリアント パラメーターでバリアント条件式を指定するには、Simulink.VariantVariableオブジェクトを使用します。詳細については、単純なバリアント パラメーター モデルの作成を参照してください。

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

ここで A および B"バリアント制御変数" と呼ばれるオペランドです。+==、および && は、条件式の演算子です。条件式には、そのようなバリアント制御変数と演算子を 1 つ以上含めることができます。バリアント制御変数のサポートされる型と保存場所の詳細については、バリアント条件式におけるバリアント制御変数 (オペランド) の型およびバリアント条件式におけるバリアント制御変数 (オペランド) のストレージの場所を参照してください。演算子の詳細については、バリアント条件式の演算子を参照してください。

メモ

[バリアント制御モード][式] モードに設定されているバリアント ブロックを含むモデルをシミュレートして、コードを生成できます。

バリアント条件式におけるバリアント制御変数 (オペランド) の型

[式] モードでは、プロトタイプを作成するときに使用するオプションから、モデルからコードを生成するために必要なオプションまで、いずれかの型としてバリアント制御変数を指定できます。

指定目的
Simulink.VariantControlバリアントのアクティベーションのタイミングの関連付けA == 1。ここで ASimulink.VariantControl オブジェクトです。バリアント ブロックでアクティベーションのタイミングを関連付けるバリアント制御変数オブジェクトおよびバリアント パラメーターのラピッド プロトタイピングに対するスカラー値を参照してください。
スカラー変数ラピッド プロトタイピング

A == 1。ここで A はスカラー変数です。バリアント ブロックでのラピッド プロトタイピングのためのスカラー変数を参照してください。

メモ

バリアント制御変数としてのスカラー変数はバリアント パラメーターでサポートされません。

Simulink.Parameter オブジェクトコード生成用のプリプロセッサ条件の生成Vssmode == 1。ここで VssmodeSimulink.Parameter オブジェクトです。バリアント ブロックでのコード生成用の整数をもつ Simulink.Parameter オブジェクトおよびバリアント パラメーターのコード生成のための Simulink.Parameter オブジェクトを参照してください。
Simulink 列挙型条件値が整数ではなく意味のある名前として表されるため、コードの可読性が向上LEVEL == Level.Advanced。ここで Level は整数ベースの列挙型クラスであり、Advanced は列挙値です。バリアント ブロックのコードの可読性を高めるための列挙型およびバリアント パラメーターのコードの可読性を高めるための列挙型を参照してください。
Simulink.Variant オブジェクトバリアント条件の再利用LinearController == 1。ここで LinearController は条件式 FUEL==2 && EMIS==1 をカプセル化する Simulink.Variant オブジェクトです。バリアント ブロックにおけるバリアント条件の再利用のための Simulink.Variant オブジェクトおよびバリアント パラメーターのバリアント条件の再利用のための Simulink.Variant オブジェクトを参照してください。

バリアント条件式におけるバリアント制御変数 (オペランド) のストレージの場所

要件に基づいて、さまざまなストレージの場所のバリアント制御変数を定義できます。

メモ

バリアント ブロックまたはバリアント パラメーター内のすべてのバリアント制御変数は同じストレージの場所から生じなければなりません。

次のようにバリアント制御変数を定義します。

場所目的サポートされているバリアント制御変数の型 (バリアント条件式におけるバリアント制御変数 (オペランド) の型を参照)詳細
ベース ワークスペース一時的なモデルで実験する間、変数を保存します。スカラー変数、Simulink.VariantControlSimulink.VariantSimulink.Parameter、および列挙型一時データ: ベース ワークスペース
マスク ワークスペースブロックのマスクのローカルなデータを永続的に保存します。スカラー変数、Simulink.VariantControl、および列挙型マスク ワークスペースまたはモデル ワークスペースを使用してバリアント ブロックのアクティブなバリアントの選択肢を制御する方法
モデル ワークスペースモデルのローカルなデータを永続的に保存します。スカラー変数、Simulink.VariantControl、および列挙型マスク ワークスペースまたはモデル ワークスペースを使用してバリアント ブロックのアクティブなバリアントの選択肢を制御する方法
データ ディクショナリグローバル データの永続的な保存、モデル間のデータ共有、データに対して行われた変更の追跡を行います。スカラー変数、Simulink.VariantControlSimulink.VariantSimulink.Parameter、および列挙型データ ディクショナリとは

各ストレージの場所の機能と長所の詳細については、Simulink モデルの変数とオブジェクトの保存場所の決定を参照してください。

バリアント条件式の演算子

式がブール値を評価する場合、バリアント条件式には MATLAB® 演算子を含めることができます。

 バリアント ブロックでサポートされる演算子

 バリアント パラメーターでサポートされる演算子

さまざまなバリアントのアクティベーションのタイミングにおけるバリアント条件式の評価

[式] モードは [ブロック線図の更新][ブロック線図の更新時にすべての選択肢を解析][コードのコンパイル]、および [起動] のアクティベーションのタイミングをサポートします。バリアントのアクティベーションのタイミングの詳細については、Activate Variant During Different Stages of Simulation and Code Generation Workflowを参照してください。

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

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

バリアント条件の凡例を使用してバリアントの各選択を有効にする伝播されたバリアント条件を可視化できます。それらにバリアント条件がある場合、Simulink はモデル コンポーネントに注釈を付け、バリアント条件の凡例には、各注釈に対応する条件が表示されます。

詳細については、Variant Condition Propagation Overviewを参照してください。

バリアント ブロックのラベルを使用した選択の切り替え

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

バリアント ブロックの選択に対してラベルを指定するには、バリアント ブロックのバッジを右クリックし、[ブロック パラメーター] を選択してから、[ブロック パラメーター] ダイアログ ボックスの [バリアント制御ラベル] パラメーターでラベルを指定します。

 バリアント制御モード: ラベル

メモ

バリアント制御の [ラベル] タイプをバリアント パラメーターに関連付けることはできません。

[ラベル] モードでは、バリアント ブロックのアクティベーションのタイミングは既定の設定で [ブロック線図の更新] に設定されます。つまり、モデルのシミュレーションの実行時に、Simulink はモデルのコンパイルの段階でアクティブな選択肢を決定し、その選択肢に対してのみコードを生成します。Activate Variant During Different Stages of Simulation and Code Generation Workflowを参照してください。

[バリアント制御モード][ラベル] モードに設定されているバリアント ブロックを含むモデルのみをシミュレートできます。コード生成はサポートされていません。

バリアント制御ラベルを使用してアクティブな選択肢を設定する方法

次のいずれかの方法を使用して、[ラベル] モードでアクティブな選択肢を設定できます。

  • [バリアント ブロック] ダイアログ ボックスの [バリアント制御ラベル] パラメーターで各バリアントの選択に対する名前を指定します。指定する名前はすべて [ラベル モードのアクティブな選択肢] ドロップダウンにリストされます。リストから選択したラベルがアクティブな選択肢になります。

  • バリアント ブロックのバッジを右クリックして [ラベル モードのアクティブな選択肢] を選択します。

  • 初期化コードを使用して、バリアント ブロックのマスク ワークスペースから行います。マスク初期化コードで指定するアクティブな選択肢は、[ラベル モードのアクティブな選択肢] ドロップダウンまたは [ラベル モードのアクティブな選択肢] メニュー項目を使用して指定するアクティブな選択肢をオーバーライドします。詳細については、バリアント サブシステムのマスクを参照してください。

  • 次のコマンドを使用して、プログラムで実行します。

    set_param(blockName,'LabelModeActiveChoice', 'variantChoiceLabel')
    ここで、blockName はバリアント ブロックの名前であり、variantChoiceLabel はバリアントの選択に関連付けられています。

バリアント ブロック内でのシミュレーションおよびコード生成ワークフローに対する選択肢の切り替え

ワークスペース変数を作成せずに、シミュレーションおよびコード生成ワークフローの選択肢を自動的に切り替えるには、[sim/codegen の切り替え] バリアント制御モードを使用します。

バリアントの選択に対するシミュレーションとコード生成の分岐を指定するには、バリアント ブロックのバッジを右クリックし、[ブロック パラメーター] を選択してから、[ブロック パラメーター] ダイアログ ボックスの [バリアント制御スイッチ] パラメーターで (sim) および (codegen) のキーワードを指定します。

モデルをシミュレーションするときに (ノーマル、アクセラレータ、ラピッド アクセラレータ)、Simulink はアクティブな選択肢として (sim) 分岐を自動的に選択します。同様に、ソフトウェアインザループ (SIL)、プロセッサインザループ (PIL) シミュレーションを実行したり、コードを生成したり、エクスターナル モードを使用するときに、Simulink は自動的に (codegen) 分岐を選択します。アクティブな選択肢についてのみコードが生成されます。非アクティブな選択肢は生成されたコードに含まれません。このモードでは、バリアント ブロックに最大で 2 つだけ選択肢を含めることができます。

 バリアント制御モード: sim/codegen の切り替え

メモ

バリアント制御の [sim/codegen の切り替え] タイプをバリアント パラメーターに関連付けることはできません。

[sim/codegen の切り替え] モードでは、[ブロック線図の更新][ブロック線図の更新時にすべての選択肢を解析] のアクティベーションのタイミングのみがサポートされます。つまり、モデルのシミュレーションの実行時またはコードの生成時に、Simulink はモデルのコンパイルの段階でアクティブな選択肢を決定し、その選択肢に対してのみコードを生成します。Activate Variant During Different Stages of Simulation and Code Generation Workflowを参照してください。

バリアント制御モードのさまざまな種類の比較

次の表では、要件に対応するモードを選択しやすくするために、さまざまなバリアント制御モードの機能について説明します。

バリアント制御モード機能

— Simulink はバリアント条件の評価に基づいてアクティブなバリアントを選択します。条件式が true と評価される場合、対応するバリアント選択がアクティブになります。条件式が false と評価される場合、対応するバリアント選択が非アクティブになります。

[式] モードを使用して、次を実行します。

ラベル — Simulink はバリアントの名前に基づいてアクティブなバリアントを選択します。バリアント制御は string であり、いずれのワークスペースでも変数を作成する必要はありません。

[ラベル] モードを使用して、次を実行します。

  • モデルのみをシミュレーションします。モデルからコードを生成する必要はありません。

  • ワークスペース変数を作成せずに、アクティブな選択肢を制御します。

sim/codegen の切り替え — モデルをシミュレーションするときに (ノーマル、アクセラレータ、ラピッド アクセラレータ)、Simulink はアクティブな選択肢として sim 分岐を自動的に選択します。同様に、ソフトウェアインザループ (SIL)、プロセッサインザループ (PIL) シミュレーションを実行したり、コードを生成したり、エクスターナル モードを使用するときに、Simulink は自動的に codegen 分岐を選択します。

[sim/codegen の切り替え] の切り替えモードを使用して、次を実行します。

  • ワークスペース変数を作成せずに、シミュレーションおよびコード生成ワークフローに対する選択肢を自動的に切り替えます。

  • モデルのアクティブな選択肢に対してのみコードを生成します。

さまざまなバリアント制御モードに対するバリアントのアクティベーションのタイミング

使用できるさまざまなバリアントのアクティベーションのタイミングは、指定する [バリアント制御モード] の種類によって異なります。[バリアントのアクティベーションのタイミング] に応じて、Simulink でアクティブな選択肢が設定されるタイミングが決まります。生成されたコードに含まれる変動性も、[バリアントのアクティベーションのタイミング] で決まります。バリアントのアクティベーションのタイミングの詳細については、Activate Variant During Different Stages of Simulation and Code Generation Workflowを参照してください。

次の表に、それぞれのバリアント制御モードでサポートされるバリアントのアクティベーションのタイミングを示します。

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

バリアント制御変数を指定する方法

この節では、バリアント条件式でさまざまなバリアント制御変数の型を使用する方法について説明します。

バリアント ブロックでアクティベーションのタイミングを関連付けるバリアント制御変数オブジェクト

Simulink.VariantControl オブジェクトでは、バリアントのアクティベーションのタイミングをバリアント制御関数に関連付けることができます。バリアント条件式におけるバリアント制御変数 (オペランド) のストレージの場所にリストされるストレージの場所に制御変数の Simulink.VariantControl 型を定義できます。

2 つのバリアントの選択 Linear Controller および Variant Subsystem サブシステムをもつ NonLinear Controller ブロックを含むモデルについて考えます。

  1. Variant Subsystem ブロックの [ブロック パラメーター] ダイアログ ボックスで、バリアント制御 V ==1 および V==2 を指定します。

  2. ベース ワークスペースで、Simulink.VariantControl を使用してバリアント制御変数オブジェクト V を定義し、その値を 1 に設定してからモデルをシミュレートします。シミュレーション中、Linear Controller のバリアントの選択がアクティブになります。

    V = Simulink.VariantControl('Value', 1, ActivationTime, 'update diagram analyze all choices')

    メモ

    [ブロック パラメーター] ダイアログ ボックスで指定する [バリアントのアクティベーションのタイミング] は、Simulink.VariantControl オブジェクトで指定する ActivationTime をオーバーライドします。

    同様に V の値を 2 に変更すると、Nonlinear Controller のバリアントの選択がアクティブになります。

    V.Value = 2;

バリアント ブロックでのラピッド プロトタイピングのためのスカラー変数

スカラーの MATLAB バリアント制御変数は、まだモデルを作成しているときに、バリアントの選択のプロトタイプをすばやく作成できるようにします。これにより、バリアントの選択を有効にする式の開発よりも、バリアントの選択の作成により集中できます。バリアント条件式におけるバリアント制御変数 (オペランド) のストレージの場所にリストされるストレージの場所にスカラー制御変数を定義できます。

2 つのバリアントの選択 Linear Controller および Variant Subsystem サブシステムをもつ NonLinear Controller ブロックを含むモデルについて考えます。

  1. Variant Subsystem ブロックの [ブロック パラメーター] ダイアログ ボックスで、バリアント制御を最も単純な形式であるスカラー変数 V ==1 および V==2 で指定します。

  2. ベース ワークスペースで、バリアント制御変数 V を定義し、その値を 1 に設定してからモデルをシミュレートします。シミュレーション中、Linear Controller のバリアントの選択がアクティブになります。

    V = 1;

    同様に V の値を 2 に変更すると、Nonlinear Controller のバリアントの選択がアクティブになります。

    V = 2;

バリアント ブロックでのコード生成用の整数をもつ Simulink.Parameter オブジェクト

バリアント選択を含むモデル用のコードを生成する場合、バリアント制御変数を Simulink.Parameter オブジェクトとして指定します。Simulink.Parameter オブジェクトによって、コード生成に必要な他の属性 (データ型など) を指定できます。

メモ

Simulink.Parameter 型のバリアント制御変数はベース ワークスペースまたはデータ ディクショナリでのみ定義できます。マスクまたはモデル ワークスペースでの Simulink.Parameter 型のバリアント制御変数の定義はサポートされません。バリアント制御変数に対するストレージの場所の詳細については、バリアント条件式におけるバリアント制御変数 (オペランド) のストレージの場所を参照してください。

Simulink.Bus オブジェクト以外のデータ型をもつ構造体内の Simulink.Parameter オブジェクトはサポートされていません。

2 つのバリアントの選択 Linear Controller および Variant Subsystem サブシステムをもつ NonLinear Controller ブロックを含むモデルについて考えます。

  1. ベース ワークスペースで、Simulink.Parameter オブジェクト VssMode を定義します。

    VssMode = Simulink.Parameter;
    VssMode.Value = 1;
    VssMode.DataType = 'int32';
    VssMode.CoderInfo.StorageClass = 'Custom';
    VssMode.CoderInfo.CustomStorageClass = 'ImportedDefine';
    VssMode.CoderInfo.CustomAttributes.HeaderFile ='rtwdemo_importedmacros.h';

    Simulink.Parameter オブジェクトとして定義されたバリアント制御変数は、次のいずれかのストレージ クラスをもつことができます。

    • ヘッダー ファイルが指定された Define または ImportedDefine

    • CompilerFlag

    • SystemConstant (AUTOSAR)

    • データをマクロとして定義する独自のストレージ クラス

    これらのストレージ クラスの詳細については、生成されたコードでのデータ表示を制御するストレージ クラスの選択 (Simulink Coder)を参照してください。

    スカラーのバリアント制御変数を Simulink.Parameter オブジェクトに変換することもできます。詳細については、バリアント制御変数の Simulink.Parameter オブジェクトへの変換を参照してください。

  2. Variant Subsystem ブロックの [ブロック パラメーター] ダイアログ ボックスで、Simulink.Parameter オブジェクトをバリアント制御変数として指定してから、モデルをシミュレートします。シミュレーション中、Linear Controller のバリアントの選択がアクティブになります。

バリアント ブロックのコードの可読性を高めるための列挙型

列挙型を使用し、バリアント制御値として使う整数に意味のある名前を与えます。バリアント条件式におけるバリアント制御変数 (オペランド) のストレージの場所にリストされるストレージの場所に列挙型のバリアント制御変数を定義できます。

2 つのバリアントの選択 Linear Controller および Variant Subsystem サブシステムをもつ NonLinear Controller ブロックを含むモデルについて考えます。

  1. ベース ワークスペースで、列挙型の値を意味のある名前にマップするクラスを定義します。

    ここで、sldemo_mrv_CONTROLLER_TYPE は、組み込みデータ型 int32 から派生する整数ベースの列挙型クラスです。クラスには Linear NonLinear の 2 つの列挙値があります。これらの列挙値には基となる整数値 01 が含まれています。

    classdef sldemo_mrv_CONTROLLER_TYPE < Simulink.IntEnumType
            enumeration
            Linear (1)
            NonLinear (2)
            end
    end
    
  2. Variant Subsystem ブロックの [ブロック パラメーター] ダイアログ ボックスで、名前をバリアント制御変数として指定します。

  3. Simulink.VariantControl オブジェクト E_Ctrl をベース ワークスペースで定義し、その値を 1 として指定してからモデルをシミュレートします。シミュレーション中、Linear Controller のバリアントの選択がアクティブになります。

    E_Ctrl.Value=1

バリアント ブロックにおけるバリアント条件の再利用のための Simulink.Variant オブジェクト

モデルが必要とするバリアントの選択を特定した後で、バリアント条件を Simulink.Variant オブジェクトとして定義することにより、バリアントの選択のアクティブ化を制御するために複雑なバリアント条件を構築できます。Simulink.Variant オブジェクトは、共通のバリアント条件をモデル間で再利用できるようにし、複雑なバリアント条件式のカプセル化にも役立ちます。

バリアント条件式の全体または Simulink.Variant 型の条件式内のバリアント制御変数のみを指定できます。

メモ

Simulink.Variant 型のバリアント制御変数はベース ワークスペースまたはデータ ディクショナリでのみ定義できます。マスクまたはモデル ワークスペースでの Simulink.Variant 型のバリアント制御変数の定義はサポートされません。バリアント制御変数に対するストレージの場所の詳細については、バリアント条件式におけるバリアント制御変数 (オペランド) のストレージの場所を参照してください。

構造体内の Simulink.Variant はサポートされません。

2 つのバリアントの選択 Linear Controller および Variant Subsystem サブシステムをもつ NonLinear Controller ブロックを含むモデルについて考えます。

  1. ベース ワークスペースで、バリアント制御式を Simulink.Variant オブジェクトとしてカプセル化します。

    Linear=Simulink.Variant('V==1');
    NonLinear=Simulink.Variant('V==2');
  2. Variant Subsystem ブロックの [ブロック パラメーター] ダイアログ ボックスで、Simulink.Variant オブジェクトをバリアント制御変数として指定します。

    [条件 (読み取り専用)] パラメーターにカプセル化されたバリアント条件が表示されます。

  3. Simulink.VariantControl オブジェクト V をベース ワークスペースで定義し、その値を 1 として指定してからモデルをシミュレートします。シミュレーション中、Linear Controller のバリアントの選択がアクティブになります。

    V.Value = 1;

この方法を使用すると、再利用可能な複雑なバリアント条件式を開発できます。

バリアント パラメーターのラピッド プロトタイピングに対するスカラー値

スカラーの MATLAB® 変数は、まだモデルを作成しているときに、バリアント値のプロトタイプをすばやく作成できるようにします。これにより、バリアントの選択を有効にする式の開発よりも、バリアント値の作成により集中できます。

バリアント条件式におけるバリアント制御変数 (オペランド) のストレージの場所にリストされる場所にスカラー制御変数を定義できます。

MATLAB エディターで、Simulink.VariantVariable オブジェクト内でバリアントの選択を最も単純な形式であるスカラー変数として指定できます。

vpObj = Simulink.VariantVariable('Choices',{'VCtrl==1', 1000, 'VCtrl==2', 2000})
vpObj = 
VariantVariable with 2 choices:

 Condition 	Value
__________	_____
VCtrl == 1	1000
VCtrl == 2	2000

Specification: ''

Use getChoice, setChoice, addChoice, removeChoice to access, modify, add or
remove choices

制御変数 VCtrl を定義し、Simulink.VariantControl オブジェクト内でその値を 1 に設定することによって、バリアント値の 1 つを有効にできます。この条件は、値 1000 を有効にして、この値を vpObj に代入します。

VCtrl = Simulink.VariantControl('Value', 1, 'ActivationTime', 'update diagram')
VCtrl = 
  VariantControl with properties:

             Value: 1
    ActivationTime: 'update diagram'

VCtrl の値を 2 に変更すると、Simulink® は vpObj の値を 2000 に設定します。

VCtrl.Value = 2;

バリアント パラメーターのコード生成のための Simulink.Parameter オブジェクト

バリアント パラメーター値を含むモデル用のコードを生成する場合、バリアント制御変数を MATLAB® 変数または Simulink.Parameter オブジェクトとして指定します。Simulink.Parameter オブジェクトによって、コード生成に必要な他の属性 (データ型など) を指定できます。

メモ:

  • Simulink.Parameter 型のバリアント制御変数はベース ワークスペースまたはデータ ディクショナリでのみ定義できます。マスクまたはモデル ワークスペースでのバリアント制御変数の Simulink.Parameter 型の定義はサポートされません。バリアント制御変数に対するストレージの場所の詳細については、バリアント条件式におけるバリアント制御変数 (オペランド) のストレージの場所を参照してください。

  • Simulink.Bus オブジェクト以外のデータ型をもつ構造体内の Simulink.Parameter オブジェクトはサポートされていません。

MATLAB エディターで、Simulink.Parameter オブジェクトを定義します。

VSSMODE = Simulink.Parameter;
VSSMODE.Value = 1;
VSSMODE.DataType = 'int32';
VSSMODE.CoderInfo.StorageClass = 'Custom';
VSSMODE.CoderInfo.CustomStorageClass = 'ImportedDefine';
VSSMODE.CoderInfo.CustomAttributes.HeaderFile ='rtwdemo_importedmacros.h';

Simulink.Parameter オブジェクトとして定義されたバリアント制御変数は、次のいずれかのストレージ クラスをもつことができます。

  • ヘッダー ファイルが指定された Define or ImportedDefine

  • CompilerFlag

  • SystemConstant (AUTOSAR)

  • データをマクロとして定義する独自のストレージ クラス

スカラーのバリアント制御変数を Simulink.Parameter オブジェクトに変換することもできます。詳細については、バリアント制御変数の Simulink.Parameter オブジェクトへの変換を参照してください。

Simulink.VariantVariable オブジェクトを使用してオブジェクトをバリアント制御として指定します。

vpObj = Simulink.VariantVariable('Choices', {'VCtrl == 1',1000,'VCtrl == 2',2000});

制御変数 VCtrl を定義し、Simulink.VariantControl オブジェクト内でその値を VSSMODE に設定することによって、バリアント値の 1 つを有効にできます。この条件は、値 1000 を有効にして、この値を vpObj に代入します。

VCtrl = Simulink.VariantControl('Value',VSSMODE,'ActivationTime','code compile')
VCtrl = 
  VariantControl with properties:

             Value: [1x1 Simulink.Parameter]
    ActivationTime: 'code compile'

バリアント パラメーターのコードの可読性を高めるための列挙型

列挙型を使用し、バリアント制御値として使う整数に意味のある名前を与えます。

バリアント条件式におけるバリアント制御変数 (オペランド) のストレージの場所にリストされるストレージの場所に列挙型のバリアント制御変数を定義できます。

MATLAB® エディターで、列挙型の値を意味のある名前にマップするクラスを定義します。

ここで、EngType は、組み込みデータ型 int32 から派生する整数ベースの列挙型クラスです。クラスには SmallBig の 2 つの列挙値があります。これらの列挙値には基となる整数値 12 が含まれています。

type EngType.m
classdef EngType < Simulink.IntEnumType
        enumeration
        Small (1)
        Big (2)
        end
end

Simulink.VariantVariable オブジェクト内で名前をバリアントの選択として指定します。

vpObj = Simulink.VariantVariable('Choices', {'VCtrl == EngType.Small',3.5,'VCtrl == EngType.Big',8.5})
vpObj = 
VariantVariable with 2 choices:

       Condition       	Value
______________________	_____
VCtrl == EngType.Big  	8.5000
VCtrl == EngType.Small	3.5000

Specification: ''

Use getChoice, setChoice, addChoice, removeChoice to access, modify, add or
remove choices

制御変数 VCtrl を定義し、Simulink.VariantControl オブジェクト内でその値を EngType.Small に設定することによって、バリアント値の 1 つを有効にできます。この条件は、値 3.5 を有効にして、この値を vpObj に代入します。

メモ: アクティベーションのタイミングが startup' であるバリアント制御変数オブジェクトの場合、列挙型の値の指定はサポートされていません。

VCtrl = Simulink.VariantControl('Value',EngType.Small,'ActivationTime','code compile')
VCtrl = 
  VariantControl with properties:

             Value: Small
    ActivationTime: 'code compile'

列挙型を使用すると、整数ではなく値の名前が使用されるので、生成されたコードがわかりやすくなります。

バリアント パラメーターのバリアント条件の再利用のための Simulink.Variant オブジェクト

モデルが必要とするバリアント値を特定した後で、バリアント条件を Simulink.Variant オブジェクトとして定義することにより、バリアント パラメーター値のアクティブ化を制御するために複雑なバリアント条件を構築できます。Simulink.Variant オブジェクトは、共通のバリアント条件をモデル間で再利用できるようにし、複雑なバリアント条件式のカプセル化にも役立ちます。

メモ:

  • Simulink.Variant 型のバリアント制御変数はベース ワークスペースまたはデータ ディクショナリでのみ定義できます。マスクまたはモデル ワークスペースでのバリアント制御変数の Simulink.Variant 型の定義はサポートされません。バリアント制御変数に対するストレージの場所の詳細については、バリアント条件式におけるバリアント制御変数 (オペランド) のストレージの場所を参照してください。

  • 構造体内の Simulink.Variant はサポートされません。

MATLAB® エディターで、バリアント制御式を Simulink.Variant オブジェクトとしてカプセル化します。

LinearController=Simulink.Variant('VCtrl==1');
NonLinearController=Simulink.Variant('VCtrl==2');

Simulink.Variant オブジェクトを Simulink.VariantVariable オブジェクト内のバリアント制御として指定します。

vpObj = Simulink.VariantVariable('Choices',{'LinearController',1000,'NonLinearController',2000})
vpObj = 
VariantVariable with 2 choices:

     Condition     	Value
___________________	_____
LinearController   	1000
NonLinearController	2000

Specification: ''

Use getChoice, setChoice, addChoice, removeChoice to access, modify, add or
remove choices

制御変数 VCtrl を定義し、Simulink.VariantControl オブジェクト内でその値を LinearController に設定することによって、バリアント値の 1 つを有効にできます。この条件は、値 1000 を有効にして、この値を vpObj に代入します。

VCtrl = Simulink.VariantControl('Value',1,'ActivationTime','update diagram')
VCtrl = 
  VariantControl with properties:

             Value: 1
    ActivationTime: 'update diagram'

この方法を使用すると、再利用可能な複雑なバリアント条件式を開発できます。

関連する例

詳細