Stateflow でのフロー チャートの作成
Stateflow® フロー チャートは、決定木や反復ループなどのロジック パターンをモデル化するグラフィカル構造体です。フロー チャートは、特定の結果が前の結果に依存することのない組み合わせ論理を表します。コネクティブ ジャンクションと遷移のみを組み合わせて、フロー チャートを作成します。ジャンクションは、異なる遷移パス間での判定分岐を提供します。フロー チャートの実行は、デフォルト遷移から始まり、"終端ジャンクション" (出力遷移をもたないジャンクション) で終わります。詳細については、遷移とジャンクションを結合して分岐パスを作成を参照してください。
メモ
Stateflow チャートにフロー チャートのみが含まれている場合、チャートが起動するたびに、チャートによってフロー チャートが評価されます。一方、チャートがステート内の任意のフロー チャートを評価するのは、ステート entry 時のみです。
ベスト プラクティスの 1 つとして、フロー チャートをグラフィカル関数でカプセル化することで、チャートのどこからでも呼び出せるモジュール式の再利用可能なロジックを作成できます。グラフィカル関数の詳細は、グラフィカル関数の定義によるロジック パターンの再利用 を参照してください。
たとえば、次のフロー チャートは、単純な if
-else
ロジックをモデル化しています。
このフロー チャートは次のコードをモデル化しています。
if u > 0 y = 1; else y = 0; end
フロー チャートの描画
コネクティブ ジャンクションを複数の遷移パス間の分岐点として使用することにより、フロー チャートを描画することができます。フロー チャートを描画するには、以下を行います。
新しいチャートを開きます。
フロー チャートの実行が開始されるジャンクションに、デフォルト遷移を追加します。オブジェクト パレットで、デフォルト遷移のアイコン をクリックします。次に、チャート キャンバスで、遷移の位置をクリックします。Stateflow エディターにより、新しいコネクティブ ジャンクションが遷移先として追加されます。
新しい遷移を追加するには、ジャンクションの境界をポイントします。次に、クリックしてジャンクション以外の場所にドラッグします。Stateflow エディターに、ジャンクションまたはステートを追加するためのグラフィカル キューが表示されます。
ジャンクションを遷移の末尾に配置するには、円形のキューをクリックします。
既存ジャンクションに遷移を接続するには、ポインターを目的の遷移先までドラッグします。
コネクティブ ジャンクションをチャートに追加するには、オブジェクト パレットで、ジャンクション アイコン をクリックします。次に、チャート キャンバスで、新しいジャンクションの位置をクリックします。
必要に応じて、前の手順を繰り返します。
遷移のアクションの定義の説明に従って、遷移にラベルを付けます。
フロー チャート作成のベスト プラクティス
フロー チャートを作成する際は、以下のベスト プラクティスに従います。
デフォルト遷移は 1 つのみ使用する
フロー チャートにはエントリ ポイントが 1 つだけあります。
終端ジャンクションは 1 つのみとする
複数の終端ジャンクションを使用すると、フロー チャートがわかりにくくなります。
すべての遷移パスを終端ジャンクションに収束させる
フロー チャートを実行すると必ず終了点に到達します。
無条件遷移を、終端ジャンクションを除く各ジャンクションから設定する
予期しないバックトラッキングがシミュレーション中に発生すると、警告メッセージが表示されます。
予期しないバックトラッキングに対する診断アクションのレベルを制御するには、[コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[診断] 、 [Stateflow] ペインで、[予期せぬバックトラッキング] パラメーターを [なし]
、[警告]
、または [エラー]
に設定します。既定の設定は [警告]
です。詳細については、Unexpected backtracking (Simulink)を参照してください。
以下のような条件下では、予期しないバックトラッキングがジャンクションで発生するおそれがあります。
そのジャンクションに、ステートまたは終端ジャンクションへの無条件遷移パスがない
複数の遷移パスがそのジャンクションに通じている
更新処理には遷移アクションではなく条件アクションを使用する
フロー チャートでは、遷移はテストされますが実行されません。したがって、フロー チャートで遷移アクションが実行されることはありません。さらに、MATLAB® をアクション言語として使用するチャートでは、グラフィカル関数で遷移アクションを使用するとコンパイル時エラーが発生します。