このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Stateflow チャート オブジェクトの実行と単位テスト
スタンドアロンの Stateflow® チャートは、有限ステート マシンの動作を定義する MATLAB® クラスです。スタンドアロンのチャートは、MATLAB をアクション言語として Classic チャートのセマンティクスを実装します。Simulink® でのコード生成が制限されている関数を含めて、MATLAB のすべての機能を使用してチャートをプログラミングできます。詳細については、MATLAB オブジェクトとして実行する Stateflow チャートの作成を参照してください。
スタンドアロンの Stateflow チャートの例
ファイル sf_chart.sfx
には、スタンドアロンの Stateflow チャート sf_chart
が含まれています。チャートには、ローカル データ u
、x
および y
が含まれています。
この例では、Stateflow エディターから、また MATLAB コマンド ウィンドウで、このチャートを実行する方法を説明します。
Stateflow エディターからのスタンドアロンのチャートの実行
スタンドアロンのチャートの単体テストおよびデバッグを行うために、Stateflow エディターから直接チャートを実行できます。実行中に、ユーザー インターフェイスからデータ値を入力し、イベントをブロードキャストします。
Stateflow エディターでチャートを開きます。
edit sf_chart.sfx
[シンボル] ペインで、
u
= 1 の値を入力して [実行] をクリックします。チャートはそのデフォルト遷移を実行し、次を行います。x
を 0 の値に初期化するステート
A
をアクティブ ステートにするy
を 1 の値に代入するx
の値を 1 に増やす
チャート アニメーションでは、アクティブ ステート
A
が強調表示されます。[シンボル] ペインに値u
= 1、x
= 1、およびy
= 1 が表示されます。チャートでは、次の実行コマンドまで現在のステートおよびローカル データが保持されます。[ステップ] をクリックします。
u
の値は、ステートA
からの遷移の条件[u<0]
を満たさないため、このステートはアクティブなままとなり、x
とy
の値は 2 に増えます。ここで、[シンボル] ペインには、u
= 1、x
= 2、およびy
= 2 の値が表示されます。[シンボル] ペインで、
u
= −1 の値を入力して [ステップ] をクリックします。負のデータ値により、ステートB
への遷移がトリガーされます。[シンボル] ペインに値u
= −1、x
= 1、およびy
= 3 が表示されます。[シンボル] ペインでは、任意のチャート データの値を変更できます。たとえば、
x
= 3 の値を入力します。チャートは次回の実行ステップでこのデータ値を使用します。u
= 2 の値を入力して、[ステップ] をクリックします。チャートが遷移し、ステートA
に戻ります。[シンボル] ペインに値u
= 2、x
= 4、およびy
= 5 が表示されます。チャートのアニメーションを停止するには、[停止] をクリックします。
実行を中断してチャート内の各アクションをステップ実行するには、チャートを実行する前にブレークポイントを追加します。詳細については、スタンドアロンの Stateflow チャートのデバッグを参照してください。
MATLAB でのスタンドアロンのチャートの実行
Stateflow エディターを開かずに、MATLAB でスタンドアロンのチャートを実行できます。チャートが開いている場合、エディターでは、チャート アニメーションによってアクティブ ステートと遷移が強調表示されます。
Stateflow エディターでチャートを開きます。MATLAB コマンド ウィンドウで次のように入力します。
edit sf_chart.sfx
スタンドアロン チャートの
sfx
ファイルの名前を関数として使用して、Stateflow チャート オブジェクトを作成します。データu
の初期値を名前と値のペアとして指定します。s = sf_chart(u=1)
このコマンドは、チャート オブジェクトStateflow Chart Execution Function y = step(s) Local Data u : 1 x : 1 y : 1 Active States: {'A'}
s
を作成し、デフォルト遷移を実行して、x
およびy
の値を初期化します。Stateflow エディターで、チャートがアニメーション化され、アクティブ ステートA
が強調表示されます。チャートを実行するには、関数
step
を呼び出します。たとえば、u
= 1 の値を使用して関数step
を呼び出すとします。step(s,u=1)
disp(s)
Stateflow Chart Execution Function y = step(s) Local Data u : 1 x : 2 y : 2 Active States: {'A'}
u
の値は、ステートA
からの遷移の条件[u<0]
を満たさないため、このステートはアクティブなままとなり、x
とy
の値は 2 に増えます。今度は
u
= −1 の値を使用して、チャートを再度実行します。step(s,u=-1)
disp(s)
負のデータ値により、ステートStateflow Chart Execution Function y = step(s) Local Data u : -1 x : 1 y : 3 Active States: {'B'}
B
への遷移がトリガーされます。x
の値は 1 に減り、y
の値は 3 に増えます。任意のチャート データの値にアクセスするには、ドット表記を使用します。たとえば、以下を入力することにより、3 の値をローカル データ
x
に代入できます。s.x = 3
スタンドアロンのチャートは、次回の実行ステップでこのデータ値を使用します。Stateflow Chart Execution Function y = step(s) Local Data u : -1 x : 3 y : 3 Active States: {'B'}
u
= 2 の値を使用してチャートを実行します。step(s,u=2)
disp(s)
チャートは遷移してステートStateflow Chart Execution Function y = step(s) Local Data u : 2 x : 4 y : 5 Active States: {'A'}
A
に戻り、x
とy
の値を変更します。チャート アニメーションを停止するには、Stateflow チャート オブジェクト
s
を削除します。delete(s)
複数のチャート オブジェクトの実行
同じスタンドアロンのチャートで定義されている複数のチャート オブジェクトを実行できます。同時実行のチャート オブジェクトは、内部状態は個別に維持しますが、エディター内では同じチャートに関連付けられたままとなります。チャート アニメーションは、直近で実行されたチャート オブジェクトのステートを反映します。Stateflow エディターが開いている間に複数のチャート オブジェクトを実行すると、結果が紛らわしくなる可能性があるため、推奨されません。