このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
バリアント条件を使用したインジケーター ランプ調光器の制御
この例では、バリアント遷移を使用して、単一の Stateflow® チャート内で複数の設計をモデル化する方法を説明します。各バリアント遷移は、システムのバリアント コンフィギュレーションを表す 1 つのステートにつながります。チャートからコードを生成する際に、使用するバリアント コンフィギュレーションを選択できます。既定では、生成コードには、選択したバリアント コンフィギュレーションの実行に必要なコードとデータのみが含まれます。
ランプ制御システムのバリアント コンフィギュレーション
この例では、Stateflow チャートはランプの制御システムをモデル化します。このチャートではバリアント コンフィギュレーションを使用して、3 つの可能なランプ設計を組み合わせます。
最も単純な設計は、単一のオンとオフのスイッチをもつ 1 つのランプで構成されます。この設計をモデル化するには、2 つのステート Off
と On
をもつ Stateflow チャートを作成します。これらのステートは、チャート出力 light
の値をそれぞれ 0
または 100
に設定します。チャートは、入力イベント SWITCH_ON
と SWITCH_OFF
を受け取ったときに、これらのステート間で遷移します。
より高度なランプ設計には、高と低の 2 つの設定をもつ調光器が含まれます。このランプ設計をモデル化するには、ステート On
に 2 つのサブステートを追加できます。ランプがオンになると、サブステート High
および Low
はチャート出力 light
の値をそれぞれ 100
または 50
に設定します。入力イベント DIM
により、これらのサブステート間の遷移がトリガーされます。
最後に、3 つ目の設計では、高、中、低の 3 つの設定をもつ調光器を使用します。この設計をモデル化するチャートでは、ステート On
に 3 つのサブステートが含まれ、それぞれがチャート出力 light
の値を 100
、75
、または 50
に設定します。入力イベント DIM
により、High
から Medium
、Medium
から Low
、および Low
から High
への遷移がトリガーされます。
この例では、これらの設計を組み合わせて 1 つの Stateflow チャートを作成します。ステート On
において、サブステート Dimmer1
、Dimmer2
、および NoDimmer
はシステムのバリアント コンフィギュレーションを表します。バリアント遷移のペアはパラメーター HAS_DIMMER1
および HAS_DIMMER2
を評価し、これらの各サブステートへのエントリをガードします。
モデルのシミュレーション、コンパイル、またはモデルからのコード生成を行うと、バリアント遷移の条件によってアクティブなバリアント コンフィギュレーションが特定されます。非アクティブなバリアント コンフィギュレーションに対応するチャートの部分は、Stateflow キャンバスでグレー表示されます。たとえば、次のチャートでは、3 つの調光設定をもつバリアント コンフィギュレーションがアクティブになっています。
現在アクティブなバリアント コンフィギュレーションを変更するには、ベース ワークスペースでガード用のパラメーターを変更し、モデルを更新します。
バリアント コンフィギュレーション用のコードの生成
Stateflow チャートからコードを生成するには、Simulink Coder™ または Embedded Coder® がなければなりません。既定では、生成コードには、アクティブなバリアント コンフィギュレーションのコードとデータのみが含まれます。たとえば、3 つの調光設定をもつバリアント コンフィギュレーションを選択すると、生成コードでは以下の定数が定義されます。
/* Named constants for Chart: '<Root>/Lamp' */ #define sfVariantLam_IN_NO_ACTIVE_CHILD ((uint8_T)0U) #define sfVariantLampE_event_SWITCH_OFF (1) #define sfVariantLampEx_event_SWITCH_ON (2) #define sfVariantLampExample_IN_High ((uint8_T)1U) #define sfVariantLampExample_IN_Low ((uint8_T)2U) #define sfVariantLampExample_IN_Medium ((uint8_T)3U) #define sfVariantLampExample_IN_Off ((uint8_T)1U) #define sfVariantLampExample_IN_On ((uint8_T)2U) #define sfVariantLampExample_event_DIM (0)
Embedded Coder を使用している場合、Stateflow チャートのプロパティの指定で説明されているように、チャートのプロパティ [バリアントのアクティベーションのタイミング] を有効にすることで、生成コードにプリプロセッサ条件 #if
ステートメントを含めることができます。たとえば、このチャート プロパティを有効にした場合、生成コードでは、どのバリアント コンフィギュレーションがアクティブかに関係なく、以下の定数が定義されます。
/* Named constants for Chart: '<Root>/Lamp' */ #if HAS_DIMMER1 == 1 || HAS_DIMMER2 == 1 #define sfVariantLam_IN_NO_ACTIVE_CHILD ((uint8_T)0U) #endif
#define sfVariantLampE_event_SWITCH_OFF (1) #define sfVariantLampEx_event_SWITCH_ON (2) #if HAS_DIMMER1 == 1 || HAS_DIMMER2 == 1 #define sfVariantLampExample_IN_High ((uint8_T)1U) #endif
#if HAS_DIMMER1 == 1 || HAS_DIMMER2 == 1 #define sfVariantLampExample_IN_Low ((uint8_T)2U) #endif
#if HAS_DIMMER1 == 1 #define sfVariantLampExample_IN_Medium ((uint8_T)3U) #endif
#define sfVariantLampExample_IN_Off ((uint8_T)1U) #define sfVariantLampExample_IN_On ((uint8_T)2U) #define sfVariantLampExample_event_DIM (0)
コードの生成の詳細については、Simulink Coder を使用したコード生成 (Simulink Coder)およびEmbedded Coder を使用したコード生成 (Embedded Coder)を参照してください。
バリアント マネージャーによるバリアント コンフィギュレーションの管理
バリアント マネージャーを使用して、モデル内のバリアント コンフィギュレーションを管理できます。バリアント マネージャーを開くには、[モデル化] タブにある [データの設計] で、[バリアント マネージャー] を選択します。
バリアント マネージャーの使用方法の詳細については、Variant Manager for Simulink (Simulink)を参照してください。
バリアント遷移の使用に関するガイドライン
複数のシステム設計を単一のチャートでモデル化するには、1 つ以上のステートをもつ各バリアント コンフィギュレーションをバリアント遷移で接続して表します。以下のガイドラインに従います。
各バリアント コンフィギュレーションへの遷移パスでは、バリアント遷移またはラベルが空の遷移を組み合わせることができます。
ベース ワークスペースで定義されている Simulink® パラメーターまたは MATLAB® 変数を使用して、各バリアント遷移をガードします。詳細については、Simulink および MATLAB ワークスペースとのパラメーターの共有とOptions to Represent Variant Parameters in Generated Code (Embedded Coder)を参照してください。
モデルのシミュレーション、コンパイル、またはモデルからのコード生成時に、どのバリアント コンフィギュレーションがアクティブであるかがチャートによって特定されるため、バリアント遷移には、イベント トリガーまたはメッセージ トリガー、条件アクション、または遷移アクションを含めることはできません。
遷移をバリアント遷移に変換するには、遷移をクリックします。その後、[遷移] タブで、[バリアント遷移] を選択します。バリアント遷移の中間点にバリアント遷移バッジが表示されます。
関連するトピック
- Stateflow ブロックからの C または C++ コードの生成
- Simulink および MATLAB ワークスペースとのパラメーターの共有
- Simulink Coder を使用したコード生成 (Simulink Coder)
- Embedded Coder を使用したコード生成 (Embedded Coder)
- Variant Manager for Simulink (Simulink)
- Options to Represent Variant Parameters in Generated Code (Embedded Coder)