Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

アクティブ ステート データによるステート アクティビティの監視

アクティブ ステート データを使用すると、チャート階層との相関性が高いデータを維持する必要がないため、一部の Stateflow® チャートの設計を簡素化することができます。アクティブ ステート データを有効にすると、Stateflow は、出力端子を介して Simulink® へ、またはチャート内のローカル データとして、ステート アクティビティを報告します。アクティブ ステート データを使用すると、次のことが可能です。

  • チャート アクティビティを反映させる手動のデータ更新を回避する。

  • スコープ、シミュレーション データ インスペクター、またはロジック アナライザーを使用してチャート アクティビティを表示する。

  • 診断のためにチャート アクティビティをログに記録する。

  • 他の Simulink サブシステムを駆動する。

アクティブ ステート データの型

アクティブ ステート データを有効にすると、Stateflow では、アクティビティ タイプと一致する boolean または列挙データ オブジェクトが作成されます。

アクティビティ タイプアクティブ ステートのデータ型説明
自己アクティビティBooleanステートがアクティブかどうか
子アクティビティEnumerationアクティブな子はどれか
リーフ ステート アクティビティEnumerationアクティブなリーフ ステートはどれか

チャートまたはステートの自己アクティビティでは、アクティブな場合はデータ値が true に、非アクティブな場合は false になります。子アクティビティおよびリーフ ステート アクティビティの場合、データは列挙型になります。Stateflow で列挙型クラスを定義するか、手動で定義を作成できます。詳細については、ステート アクティビティの列挙型の定義を参照してください。

アクティブ ステート データは、Stateflow チャート、ステート、状態遷移表、Atomic サブチャートで有効にすることができます。以下の表は、各種の Stateflow オブジェクトでサポートされているアクティビティ タイプを示しています。

Stateflow オブジェクト自己アクティビティ 子アクティビティリーフ ステート アクティビティ
チャート サポートなしサポートありサポートあり
排他的 (OR) 構造が設定されたステートサポートありサポートありサポートあり
パラレル (AND) 構造が設定されたステートサポートありサポートなしサポートなし
Atomic サブチャートコンテナー レベルのサポートありサブチャート内のサポートありサブチャート内のサポートあり
状態遷移表サポートなしサポートありサポートあり

アクティブ ステート データの有効化

アクティブ ステート データは、[プロパティ インスペクター]、モデル エクスプローラー、または監視対象の Stateflow オブジェクトのプロパティ ダイアログ ボックスで有効にすることができます。

[プロパティ インスペクター] を使用するには、次を行います。

  1. [モデル化] タブの [データの設計] で、[プロパティ インスペクター] を選択します。

  2. Stateflow エディターで、監視対象の Stateflow オブジェクトを選択します。

  3. [プロパティ インスペクター][監視] セクションで、[監視する出力の作成] を選択し、以下に示すアクティブ ステート データのプロパティを編集します。

モデル エクスプローラーを使用するには、次を行います。

  1. [モデル化] タブの [データの設計] で、[モデル エクスプローラー] を選択します。

  2. [モデルの階層構造] ペインで、監視対象の Stateflow オブジェクトをダブルクリックします。

  3. [ダイアログ] ペインで、[監視する出力の作成] を選択し、以下に示すアクティブ ステート データのプロパティを編集します。

プロパティ ダイアログ ボックスを使用するには、次を行います。

  1. Stateflow エディターで、監視対象の Stateflow オブジェクトを右クリックします。

  2. [プロパティ] を選択します。

  3. プロパティ ダイアログ ボックスで、[監視する出力の作成] を選択し、以下に示すアクティブ ステート データのプロパティを編集します。

アクティビティ タイプ

監視対象のステート アクティビティのタイプ。以下のオプションから選択します。

  • 自己アクティビティ

  • 子アクティビティ

  • リーフ ステート アクティビティ

データ名

アクティブ ステート データ オブジェクトの名前。詳細については、Stateflow オブジェクトの命名のガイドラインを参照してください。

Enum 名

アクティブ ステート データ オブジェクトの列挙データ型の名前。このプロパティは、子アクティビティおよびリーフ ステート アクティビティにのみ適用されます。

手作業で列挙型を定義

列挙データ型を手動で定義するかどうかを指定します。このプロパティは、子アクティビティおよびリーフ ステート アクティビティにのみ適用されます。詳細については、ステート アクティビティの列挙型の定義を参照してください。

アクティブ ステート データのスコープの設定

既定では、アクティブ ステート データは Output のスコープをもっています。Stateflow は、Simulink モデル内のチャート ブロック上に出力端子を作成します。

Stateflow チャート内のアクティブ ステート データにアクセスするには、[シンボル] ペインまたはモデル エクスプローラーで、スコープを Local に変更します。詳細については、データ プロパティの設定を参照してください。

ローカルのアクティブ ステート データを Simulink.Signal (Simulink) オブジェクトにバインドすると、コード生成に関する情報を指定できます。オブジェクトのプロパティは、CoderInfo プロパティを使用して変更します。詳細については、Simulink.CoderInfo (Simulink)を参照してください。

ステート アクティビティの列挙型の定義

既定では、Stateflow は、子アクティビティおよびリーフ アクティビティに列挙データ型を定義します。[手作業で列挙型を定義] チェック ボックスがオンで、列挙データ型の定義が存在しない場合、Stateflow は、定義を作成するリンクを提供します。[テンプレートから列挙型定義を作成する] リンクをクリックすると、カスタマイズ可能な定義が生成されます。

Logging properties for state gear_state as seen in Property Inspector.

列挙データ型の定義には、ステート名ごとに 1 つの列挙値が含まれます。既定では、定義には、列挙データ型の既定値として使用され、アクティブなサブステートがないことを示す列挙値が含まれます。たとえば、モデル sf_car 内では、ステート gear_state に、自動車のギアに対応する 4 つの子ステート (firstsecondthirdfourth) が含まれます。この例を開くには次のように入力します。

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 はパラレル構造であるため、そのサブステート B1B2 は同時にアクティブになります。よって、B はチャートのリーフ ステートとして処理されます。

Chart with two superstates called A and B. State B has two parallel substates called B1 and B2.

シミュレーション中に、アクティブ ステートの出力データに接続されているスコープは、リーフ ステート A1A2 および B の列挙値を示します。

Scope block that shows active leaf states during simulation.

アクティブ ステート データの制限

  • 子アクティビティをもたないステートの子アクティビティ出力を有効にすると、コンパイル時および実行時にエラーが発生します。

  • パラレル構造のチャートまたはステート内では、子またはリーフ ステート アクティビティを有効にすることはできません。パラレル ステートのサブステートのステート アクティビティをチェックするには、in 演算子を使用します。詳細については、in 演算子を使用したステート アクティビティのチェックを参照してください。

  • クラシック セマンティクスまたは Mealy のセマンティクスを使用するチャートでは、チャートのプロパティ [チャート実行ごとに出力を初期化] が有効になっている場合、アクティブ ステート データはサポートされません。詳細については、チャート実行ごとに出力を初期化を参照してください。

参考

オブジェクト

ツール

関連するトピック