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 エディターが開いている間に複数のチャート オブジェクトを実行すると、結果が紛らわしくなる可能性があるため、推奨されません。