Main Content

Stateflow チャートの作成と実行

Stateflow® チャートは、有限ステート マシンのグラフィカル表現であり、ステート、遷移、およびデータで構成されています。Stateflow チャートを作成すると、外部の入力信号、イベント、および時間ベースの条件に対するシステムの反応を定義できます。

たとえば、次の Stateflow チャートは半波整流器の基礎となるロジックを示しています。チャートには OnOff というラベルの 2 つのステートが含まれています。On ステートでは、チャートの出力信号 y が入力 x と等しくなっています。Off ステートでは、出力信号がゼロに設定されます。何らかのしきい値 t0 を入力信号が横切ると、チャートはこれらのステート間で遷移します。各ステートのアクションにより、シミュレーションのタイム ステップごとに y の値が更新されます。

Stateflow chart with two states.

この例では、この Stateflow チャートを作成してシミュレーションする方法を説明します。

Stateflow チャートの作成

Stateflow エディターを開く

Stateflow エディターは、状態遷移図、フロー チャート、状態遷移表、および真理値表を設計するためのグラフィカルな環境です。

  1. Stateflow チャートを含む新規 Simulink モデルを開くには、MATLAB コマンド ウィンドウで、関数 sfnew を使用します。

    sfnew rectify

    Simulink® で、空の Stateflow Chart ブロックを含む rectify というモデルが作成されます。

  2. Stateflow エディターを開くには、チャート ブロックをダブルクリックします。

Stateflow エディターの主要なコンポーネントは、チャート キャンバス、オブジェクト パレット、および [シンボル] ペインです。

  • チャート キャンバスは、ステート、遷移、およびその他のグラフィカル要素を組み合わせてチャートを作成するための描画領域です。

  • キャンバスの左側にあるオブジェクト パレットには、チャートにグラフィカル要素を追加するための一連のツールが表示されます。

  • キャンバスの右側にある [シンボル] ペインでは、チャートに新しいデータ、イベント、およびメッセージを追加して未定義や未使用のシンボルをすべて解決します。

Default view of the Stateflow Editor.

ステートと遷移の追加

  1. オブジェクト パレットで [ステート] アイコン をクリックし、ポインターをチャート キャンバスに移動します。ステートがそのデフォルト遷移とともに表示されます。ステートを配置するには、キャンバス上の位置をクリックします。テキスト プロンプトで、ステートの名前 On とステート アクション y = x を入力します。

    Chart with one state, On.

  2. ステートをもう 1 つ追加します。On ステートを右クリックしてドラッグします。青いグラフィカル キューはステートを横または縦に揃えるために役立ちます。新しいステートの名前が Off に変わります。ステートをダブルクリックしてステート アクションを y = 0 に変更します。

    Chart with two states, On and Off.

  3. 2 つのステートを揃えなおし、2 つのステート間のスペースで一時停止します。青い遷移キューは、ステートを接続できるいくつかの方法を示しています。遷移を追加するには、該当するキューをクリックします。

    あるいは、遷移を描くために、一方のステートのエッジをクリックし、もう一方のステートのエッジまでドラッグします。

    Chart with the two states joined by transitions.

  4. 各遷移をダブルクリックして、適切な遷移条件 x<t0 または x>=t0 を入力します。条件が大かっこ内に表示されます。

    Chart with transition conditions.

  5. チャートをクリーンアップします。

    • より明確にするため、各遷移ラベルをその対応する遷移の上または下の適した場所に移動します。

    • チャートのグラフィカル要素を整列させてサイズを変更するには、[書式設定] タブで [自動調整] をクリックするか、Ctrl+Shift+A を押します。

    • キャンバスに合わせてチャートのサイズを変更するには、スペース バーを押すか [ビューに合わせる] アイコン をクリックします。

未定義のシンボルの解決

チャートを実行できるようにするには、チャート内で使用するシンボルをそれぞれ定義し、スコープ (入力データ、出力データ、ローカル データなど) を指定しなければなりません。

  1. [モデル化] タブの [データの設計] で、[[シンボル] ペイン] を選択します。

    [シンボル] ペインでは、未定義のシンボルに赤のエラー バッジ のマークが付いています。

  2. [シンボル] ペインで [未定義のシンボルを解決] をクリックします。[タイプ] 列には、未定義のシンボルに推奨されるスコープが、チャート内での用途に基づいて表示されます。Stateflow エディターはシンボル x および t0 を入力データ に、y を出力データ に解決します。

    Before and after views of the Symbols pane resolving the undefined symbols t0, x, and y.

  3. しきい値 t0 はシミュレーション中は変わらないため、スコープを定数データに変更します。[タイプ] 列で、t0 の横のデータ型アイコンをクリックして [定数データ] を選択します。

  4. しきい値 t0 の値を設定します。[値] 列で、t0 の横の空白のエントリをクリックして、0 の値を入力します。

  5. Stateflow チャートを保存します。

モデルのシミュレーション

Simulink モデルをシミュレーションするには、入出力端子を使用して、チャート ブロックをモデル内の他のブロックに接続します。

  1. Simulink エディターに戻るには、キャンバス上部のエクスプローラー バーで、Simulink モデルの名前 [rectify] をクリックします。エクスプローラー バーが表示されない場合は、オブジェクト パレットの上部にある [エクスプローラー バーの非表示/表示] アイコン をクリックします。

  2. モデルにソースを追加します。

    • Simulink Sources ライブラリから、Sine Wave (Simulink) ブロックを追加します。

    • Sine Wave ブロックをダブルクリックして [サンプル時間] を 0.2 に設定します。

    • Sine Wave ブロックの出力を Stateflow チャートの入力に接続します。

    • 信号に x というラベルを付けます。

  3. モデルに Sink を追加します。

    • Simulink Sinks ライブラリから、2 つの入力端子をもつ Scope (Simulink) ブロックを追加します。

    • Sine Wave ブロックの出力を、Scope ブロックの 1 つ目の入力に接続します。

    • Stateflow チャートの出力を、Scope ブロックの 2 つ目の入力に接続します。

    • 信号に y というラベルを付けます。

  4. Simulink モデルを保存します。

    In a Simulink model, a Sine Wave block creates an input signal for the chart. A Scope block plots the input and output of the chart.

  5. モデルをシミュレートするには、[実行] をクリックします。シミュレーション中、Stateflow エディターではチャート アニメーションによってアクティブ ステートと遷移が強調表示されます。

  6. モデルをシミュレートした後に、Scope ブロックをダブルクリックします。スコープにチャートの入力信号と出力信号のグラフが表示されます。

    Scope block showing the input and output of the chart.

    シミュレーションの結果には、整流器が負の入力値をフィルターで除外することが示されています。

関連するトピック