ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Stateflow チャート オブジェクトの実行と単位テスト

スタンドアロンの Stateflow® チャートは、有限ステート マシンの動作を定義する MATLAB® クラスです。スタンドアロンのチャートは、MATLAB をアクション言語として Classic チャートのセマンティクスを実装します。Simulink® でのコード生成が制限されている関数を含めて、MATLAB のすべての機能を使用してチャートをプログラミングできます。詳細については、MATLAB オブジェクトとして実行する Stateflow チャートの作成を参照してください。

スタンドアロンの Stateflow チャートの例

ファイル sf_chart.sfx には、スタンドアロンの Stateflow チャート sf_chart が含まれています。チャートには、ローカル データ ux および y が含まれています。

この例では、Stateflow エディターから、また MATLAB コマンド ウィンドウで、このチャートを実行する方法を説明します。

Stateflow エディターからのスタンドアロンのチャートの実行

スタンドアロンのチャートの単体テストおよびデバッグを行うために、Stateflow エディターから直接チャートを実行できます。実行中に、ユーザー インターフェイスからデータ値を入力し、イベントをブロードキャストします。

  1. Stateflow エディターでチャートを開きます。

    edit sf_chart.sfx

  2. [シンボル] ウィンドウで、u = 1 の値を入力して、[実行] アイコン をクリックします。エディターは Stateflow チャート オブジェクト my_sf_chart を作成し、デフォルト遷移を実行します。チャートでは次が行われます。

    • x を 0 の値に初期化する

    • ステート A をアクティブ ステートにする

    • y を 1 の値に代入する

    • x の値を 1 に増やす

    チャート アニメーションでは、アクティブ ステート A が強調表示されます。[シンボル] ウィンドウには、u = 1x = 1 および y = 1 の値が表示されます。チャートでは、次の実行コマンドまで現在のステートおよびローカル データが保持されます。

  3. [実行] アイコン を再度クリックします。u の値は、ステート A からの遷移の条件 [u<0] を満たさないため、このステートはアクティブなままとなり、xy の値は 2 に増えます。ここで、[シンボル] ウィンドウには、u = 1x = 2 および y = 2 の値が表示されます。

  4. [シンボル] ウィンドウで、u = −1 の値を入力して、[実行] アイコン をクリックします。負のデータ値により、ステート B への遷移がトリガーされます。[シンボル] ウィンドウには、u = −1x = 1 および y = 3 の値が表示されます。

  5. [シンボル] ウィンドウでは、任意のチャート データの値を変更できます。たとえば、x = 3 の値を入力します。チャートは次回の実行ステップでこのデータ値を使用します。

  6. u = 2 の値を入力して、[実行] アイコン をクリックします。チャートが遷移し、ステート A に戻ります。[シンボル] ウィンドウには、u = 2x = 4 および y = 5 の値が表示されます。

  7. チャート アニメーションを停止して、Stateflow チャート オブジェクト my_sf_chart を MATLAB ワークスペースから削除するには、[停止] アイコン をクリックします。

実行を中断してチャート内の各アクションをステップ実行するには、チャートを実行する前にブレークポイントを追加します。詳細については、スタンドアロンの Stateflow チャートのデバッグを参照してください。

MATLAB でのスタンドアロンのチャートの実行

Stateflow エディターを開かずに、MATLAB でスタンドアロンのチャートを実行できます。チャートが開いている場合、Stateflow エディターでは、チャート アニメーションによってアクティブ ステートと遷移が強調表示されます。

  1. Stateflow エディターでチャートを開きます。MATLAB コマンド ウィンドウで次のように入力します。

    edit sf_chart.sfx

  2. スタンドアロン チャートの 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 が強調表示されます。

  3. チャートを実行するには、関数 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] を満たさないため、このステートはアクティブなままとなり、xy の値は 2 に増えます。

  4. 今度は 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 に増えます。

  5. 任意のチャート データの値にアクセスするには、ドット表記を使用します。たとえば、以下を入力することにより、3 の値をローカル データ x に代入できます。

    s.x = 3
    Stateflow Chart
    
       Execution Function
        y = step(s)
    
       Local Data
          u         : -1
          x         : 3
          y         : 3
       Active States: {'B'}
    スタンドアロンのチャートは、次回の実行ステップでこのデータ値を使用します。

  6. 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 に戻り、xy の値を変更します。

  7. チャート アニメーションを停止するには、Stateflow チャート オブジェクト s を MATLAB ワークスペースから削除します。

    delete(s)

複数のチャート オブジェクトの実行

同じスタンドアロンのチャートで定義されている複数のチャート オブジェクトを実行できます。同時実行のチャート オブジェクトは、内部状態は個別に維持しますが、エディター内では同じチャートに関連付けられたままとなります。チャート アニメーションは、直近で実行されたチャート オブジェクトのステートを反映します。Stateflow エディターが開いている間に複数のチャート オブジェクトを実行すると、結果が紛らわしくなる可能性があるため、推奨されません。

参考

| |

関連するトピック