アクティブ ステート データによるステート アクティビティの監視
アクティブ ステート データを使用すると、チャート階層との相関性が高いデータを維持する必要がないため、一部の Stateflow® チャートの設計を簡素化することができます。アクティブ ステート データを有効にすると、Stateflow は、出力端子を介して Simulink® へ、またはチャート内のローカル データとして、ステート アクティビティを報告します。アクティブ ステート データを使用すると、次のことが可能です。
チャート アクティビティを反映させる手動のデータ更新を回避する。
スコープ、シミュレーション データ インスペクター、またはロジック アナライザーを使用してチャート アクティビティを表示する。
診断のためにチャート アクティビティをログに記録する。
他の Simulink サブシステムを駆動する。
アクティブ ステート データの型
アクティブ ステート データを有効にすると、Stateflow では、アクティビティ タイプと一致する boolean または列挙データ オブジェクトが作成されます。
アクティビティ タイプ | アクティブ ステートのデータ型 | 説明 |
---|---|---|
自己アクティビティ | Boolean | ステートがアクティブかどうか |
子アクティビティ | Enumeration | アクティブな子はどれか |
リーフ ステート アクティビティ | Enumeration | アクティブなリーフ ステートはどれか |
チャートまたはステートの自己アクティビティでは、アクティブな場合はデータ値が true
に、非アクティブな場合は false
になります。子アクティビティおよびリーフ ステート アクティビティの場合、データは列挙型になります。Stateflow で列挙型クラスを定義するか、手動で定義を作成できます。詳細については、ステート アクティビティの列挙型の定義を参照してください。
アクティブ ステート データは、Stateflow チャート、ステート、状態遷移表、Atomic サブチャートで有効にすることができます。以下の表は、各種の Stateflow オブジェクトでサポートされているアクティビティ タイプを示しています。
Stateflow オブジェクト | 自己アクティビティ | 子アクティビティ | リーフ ステート アクティビティ |
---|---|---|---|
チャート | サポートなし | サポートあり | サポートあり |
排他的 (OR) 構造が設定されたステート | サポートあり | サポートあり | サポートあり |
パラレル (AND) 構造が設定されたステート | サポートあり | サポートなし | サポートなし |
Atomic サブチャート | コンテナー レベルのサポートあり | サブチャート内のサポートあり | サブチャート内のサポートあり |
状態遷移表 | サポートなし | サポートあり | サポートあり |
アクティブ ステート データの有効化
アクティブ ステート データは、[プロパティ インスペクター]、モデル エクスプローラー、または監視対象の Stateflow オブジェクトのプロパティ ダイアログ ボックスで有効にすることができます。
[プロパティ インスペクター] を使用するには、次を行います。
[モデル化] タブの [データの設計] で、[プロパティ インスペクター] を選択します。
Stateflow エディターで、監視対象の Stateflow オブジェクトを選択します。
[プロパティ インスペクター] の [監視] セクションで、[監視する出力の作成] を選択し、以下に示すアクティブ ステート データのプロパティを編集します。
モデル エクスプローラーを使用するには、次を行います。
[モデル化] タブの [データの設計] で、[モデル エクスプローラー] を選択します。
[モデルの階層構造] ペインで、監視対象の Stateflow オブジェクトをダブルクリックします。
[ダイアログ] ペインで、[監視する出力の作成] を選択し、以下に示すアクティブ ステート データのプロパティを編集します。
プロパティ ダイアログ ボックスを使用するには、次を行います。
Stateflow エディターで、監視対象の Stateflow オブジェクトを右クリックします。
[プロパティ] を選択します。
プロパティ ダイアログ ボックスで、[監視する出力の作成] を選択し、以下に示すアクティブ ステート データのプロパティを編集します。
アクティビティ タイプ
監視対象のステート アクティビティのタイプ。以下のオプションから選択します。
自己アクティビティ
子アクティビティ
リーフ ステート アクティビティ
データ名
アクティブ ステート データ オブジェクトの名前。詳細については、Stateflow オブジェクトの命名のガイドラインを参照してください。
Enum 名
アクティブ ステート データ オブジェクトの列挙データ型の名前。このプロパティは、子アクティビティおよびリーフ ステート アクティビティにのみ適用されます。
手作業で列挙型を定義
列挙データ型を手動で定義するかどうかを指定します。このプロパティは、子アクティビティおよびリーフ ステート アクティビティにのみ適用されます。詳細については、ステート アクティビティの列挙型の定義を参照してください。
アクティブ ステート データのスコープの設定
既定では、アクティブ ステート データは Output
のスコープをもっています。Stateflow は、Simulink モデル内のチャート ブロック上に出力端子を作成します。
Stateflow チャート内のアクティブ ステート データにアクセスするには、[シンボル] ペインまたはモデル エクスプローラーで、スコープを Local
に変更します。詳細については、データ プロパティの設定を参照してください。
ローカルのアクティブ ステート データを Simulink.Signal
(Simulink) オブジェクトにバインドすると、コード生成に関する情報を指定できます。オブジェクトのプロパティは、CoderInfo
プロパティを使用して変更します。詳細については、Simulink.CoderInfo
(Simulink)を参照してください。
ステート アクティビティの列挙型の定義
既定では、Stateflow は、子アクティビティおよびリーフ アクティビティに列挙データ型を定義します。[手作業で列挙型を定義] チェック ボックスがオンで、列挙データ型の定義が存在しない場合、Stateflow は、定義を作成するリンクを提供します。[テンプレートから列挙型定義を作成する] リンクをクリックすると、カスタマイズ可能な定義が生成されます。
列挙データ型の定義には、ステート名ごとに 1 つの列挙値が含まれます。既定では、定義には、列挙データ型の既定値として使用され、アクティブなサブステートがないことを示す列挙値が含まれます。たとえば、モデル sf_car
内では、ステート gear_state
に、自動車のギアに対応する 4 つの子ステート (first
、second
、third
、fourth
) が含まれます。この例を開くには次のように入力します。
openExample("stateflow/AutomaticTransmissionWithActiveStateDataExample")
このモデルでは、子アクティビティのデータ型を、次の列挙型クラス定義で指定します。
classdef gearType < Simulink.IntEnumType enumeration None(0), first(1), second(2), third(3), fourth(4) end ... end
列挙値を並べ替えるか、既定値の名前を変更することにより、この定義をカスタマイズできます。ステートに対応する列挙値の名前を変更したり、別の既定値を指定するのに getDefaultValue
メソッドを使用したりしないでください。詳細については、列挙データ型の定義を参照してください。
ヒント
自動的に作成される列挙型の基本ストレージ型は、既定で Native Integer
に設定されます。使用するメモリ フットプリントを小さくするには、[コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[最適化] ペインで [自動的に作成される列挙型の基本ストレージ型] パラメーターの値を変更します。詳細については、自動的に作成される列挙の基本ストレージ型 (Simulink Coder)を参照してください。
ステート アクティビティとパラレル ステート
パラレル (AND) 構造をもつステートでは、パラレル サブステートが同時にアクティブとなるため、子アクティビティとリーフ ステート アクティビティは使用できません。
チャートまたはステートでリーフ ステート アクティビティを有効にすると、パラレル (AND) 構造のサブステートはリーフ ステートとして扱われます。たとえば、以下のチャートのリーフ ステート アクティビティを有効にするとします。ステート B
はパラレル構造であるため、そのサブステート B1
と B2
は同時にアクティブになります。よって、B
はチャートのリーフ ステートとして処理されます。
シミュレーション中に、アクティブ ステートの出力データに接続されているスコープは、リーフ ステート A1
、A2
および B
の列挙値を示します。
アクティブ ステート データの制限
子アクティビティをもたないステートの子アクティビティ出力を有効にすると、コンパイル時および実行時にエラーが発生します。
パラレル構造のチャートまたはステート内では、子またはリーフ ステート アクティビティを有効にすることはできません。パラレル ステートのサブステートのステート アクティビティをチェックするには、
in
演算子を使用します。詳細については、in 演算子を使用したステート アクティビティのチェックを参照してください。クラシック セマンティクスまたは Mealy のセマンティクスを使用するチャートでは、チャートのプロパティ [チャート実行ごとに出力を初期化] が有効になっている場合、アクティブ ステート データはサポートされません。詳細については、チャート実行ごとに出力を初期化を参照してください。
参考
オブジェクト
Simulink.Signal
(Simulink) |Simulink.CoderInfo
(Simulink)
ツール
- モデル エクスプローラー (Simulink)