遷移の評価
Stateflow® では、チャートで遷移を使用して 1 つの排他的 (OR) ステートから別の排他的 (OR) ステートに移動します。チャート実行の entry
ワークフローと execution
ワークフローでは、Stateflow が遷移を評価してそれらが有効かどうかを判定します。有効な遷移とは、その条件ラベルが真であり、そのパスがステートで終了する遷移です。遷移が有効な場合、Stateflow は遷移元ステートを出て遷移先ステートに入ります。execution
ワークフローと entry
ワークフローにおける評価のタイミングについては、Stateflow チャートの実行およびチャートまたはステートに入るを参照してください。
遷移を評価するためのワークフロー
遷移の評価順序
ステートやジャンクションのような単一の遷移元から複数の遷移が発生する場合、Stateflow は評価順序を使用して、各遷移をテストするタイミングを決定します。チャートで使用されているアクション言語に応じて、明示的あるいは暗黙的に遷移の順序を作成できます。順序付けが明示的であっても暗黙的であっても、遷移には、その遷移元の近くに遷移順序を指定する番号が表示されます。
メモ
チャートの編集中に遷移の順序が変更されないようにするには、明示的な順序付けを使用します。
明示的な順序付け
新しい Stateflow チャートを開くと、遷移元からの出力遷移はすべて、作成した順序で自動的に番号が設定されます。順序は 1
から始まり、遷移元で利用可能な次の番号へと続きます。
遷移の実行順序を変更するには、遷移を右クリックし、カーソルを [実行順序]
に合わせて、その遷移を実行する順序を選択します。遷移の番号を変更すると、遷移元からの他の出力遷移についてはそのままの順序で、Stateflow チャートによって自動的に番号が変更されます。
暗黙的な順序付け
暗黙的な順序付けモードの C チャートの場合、Stateflow チャートは、単一の遷移元からの複数の出力遷移のグループを以下に基づいて評価します。
階層。
出力遷移は、各遷移の親の階層レベルに基づく順序で評価されます。
ラベル。
階層に基づく優先順位が等しい場合、出力遷移はラベルに基づく以下の優先順位で評価されます。
イベントと条件を伴うラベル
イベントを伴うラベル
条件を伴うラベル
ラベルなし
イベント使用時のチャートの動作の詳細については、暗黙的イベントを使用したチャート動作の制御を参照してください。
遷移元の角度表面位置。
階層に基づく優先順位に加えてラベルに基づく優先順位も等しい場合、出力遷移は遷移元オブジェクト表面の角度位置に基づいて評価されます。時計回りの位置が最小となる遷移が、最高の優先順位をもちます。たとえば、2 時のソース位置の遷移は、4 時のソース位置の遷移よりも高い優先順位をもちます。遷移元の位置が 12 時の遷移は、優先順位が最低になります。
親ステートの内側の端への遷移
親ステートの内側の端で終了する遷移はデフォルト遷移パスに戻るショートカットであり、このデフォルト パスは現在のタイム ステップで評価されます。この例では、ステート B
からの遷移がステート A
へのデフォルト遷移に直接繋がっています。
デフォルト遷移がある場合、Stateflow はそれらのパスをただちに実行します。デフォルト遷移がなく、かつ子がない場合は、それがタイム ステップの終了です。いずれの場合でも親はアクティブなままであり、親の exit アクションと entry アクションは実行されません。
外部遷移の評価
この例では、Stateflow チャートが初期化され、StateA
に対し entry
アクションが実行されます。新しいタイム ステップが発生してチャートが起動します。Stateflow チャート実行のワークフローに従って、Stateflow が StateA
からの複数の外部遷移パスを見つけます。このタイム ステップでは、x = 1
、y = 1
、z = 1
です。
遷移を評価するためのワークフローに従うと、このチャートの遷移を評価するためのステップは次のような順序になります。
StateA
からの遷移 1 が評価対象としてマークされます。StateA
からの遷移 1 には条件があります。条件は真です。
StateA
からの遷移 1 の遷移先はステートではありません。ジャンクションには出力遷移があります。
ジャンクションからの遷移 1 が評価対象としてマークされます。
ジャンクションからの遷移 1 には条件があります。
条件は偽です。
ジャンクションからの遷移 2 が評価対象としてマークされます。
ジャンクションからの遷移 2 には条件がありません。
ジャンクションからの遷移 2 の遷移先はステート (
StateD
) です。StateD
がentry
の対象として、StateA
がexit
の対象としてマークされます。
タイム ステップを完了するには、StateA
についてはステートを出るためのワークフロー、StateE
についてはチャートまたはステートに入るためのワークフローに従います。
バックトラッキングによる外部遷移の評価
ある遷移元からの出力遷移がすべて無効であるか、終端ジャンクションで終了しておらず、まだ評価されていない遷移が存在する場合、Stateflow はすべての可能なパスを評価するために以前のステートまたはジャンクションに戻ります。
この例では、Stateflow チャートが初期化され、StateA
に対し entry
アクションが実行されます。新しいタイム ステップが発生してチャートが起動します。Stateflow チャート実行のワークフローに従って、Stateflow が StateA
からの複数の外部遷移パスを見つけます。このタイム ステップでは、x = 1
、y = 1
、z = 1
です。
遷移を評価するためのワークフローに従うと、このチャートの遷移を評価するためのステップは次のような順序になります。
StateA
からの遷移 1 が評価対象としてマークされます。StateA
からの遷移 1 には条件があります。条件は真です。
StateA
からの遷移 1 の遷移先はステートではありません。ジャンクションには出力遷移があります。
ジャンクションからの遷移 1 が評価対象としてマークされます。
ジャンクションからの遷移 1 には条件があります。
条件は偽です。
ジャンクションからの遷移 2 が評価対象としてマークされます。
ジャンクションからの遷移 2 には条件があります。
条件は偽です。
StateA
からの遷移 2 が評価対象としてマークされます。StateA
からの遷移 2 には条件がありません。StateA
からの遷移 2 の遷移先はステート (StateE
) です。StateE
がentry
の対象として、StateA
がexit
の対象としてマークされます。
タイム ステップを完了するには、StateA
についてはステートを出るためのワークフロー、StateE
についてはチャートまたはステートに入るためのワークフローに従います。
バックトラッキングの回避
この例では、終端ジャンクションによってバックトラッキングを防ぎます。Stateflow チャートが初期化され、StateA
に対し entry
アクションが実行されます。新しいタイム ステップが発生してチャートが起動します。Stateflow チャート実行のワークフローに従って、Stateflow が StateA
からの複数の外部遷移パスを見つけます。このタイム ステップでは、x = 1
、y = 1
、z = 1
です。
遷移を評価するためのワークフローに従うと、このチャートの遷移を評価するためのステップは次のような順序になります。
StateA
からの遷移 1 が評価対象としてマークされます。StateA
からの遷移 1 には条件があります。条件は真です。
StateA
からの遷移 1 の遷移先はステートではありません。ジャンクションには出力遷移があります。
ジャンクションからの遷移 1 が評価対象としてマークされます。
ジャンクションからの遷移 1 には条件があります。
条件は偽です。
ジャンクションからの遷移 2 が評価対象としてマークされます。
ジャンクションからの遷移 2 には条件があります。
条件は偽です。
ジャンクションからの遷移 3 が評価対象としてマークされます。
ジャンクションからの遷移 3 には条件がありません。
遷移先はステートではなく、出力遷移はありません。
Stateflow チャート実行のワークフローに戻ります。
タイム ステップを完了するには、StateA
について中断したところからStateflow チャート実行のワークフローに従います。
条件アクションおよび遷移アクションを伴う外部遷移の評価
この例には条件アクションと遷移アクションの両方が含まれます。
遷移ラベル構文では、条件アクションは遷移条件に続いて、中かっこ (
{}
) で囲まれて表現されます。条件アクションは、条件が真として評価された時点で実行されます。ただし、遷移パスが有効であると判定されるよりも前です。遷移ラベル構文では、遷移アクションはその前にスラッシュ (
/
) が追加され、中かっこ ({}
) で囲まれます。遷移アクションは、遷移パスが有効であると判定された後にのみ実行されます。
Stateflow チャートが初期化され、StateA
に対し entry
アクションが実行されます。新しいタイム ステップが発生してチャートが起動します。StateA
からの外部遷移パスは複数あります。このタイム ステップでは、x = 1
、y = 1
、z = 1
です。
遷移を評価するためのワークフローに従うと、このチャートの遷移を評価するためのステップは次のような順序になります。
StateA
からの遷移 1 が評価対象としてマークされます。StateA
からの遷移 1 には条件 ([y >= 1]
) があります。条件は真です。
条件アクションはありません。
StateA
からの遷移 1 の遷移先はステートではありません。ジャンクションには出力遷移があります。
ジャンクションからの遷移 1 が評価対象としてマークされます。
ジャンクションからの遷移 1 には条件 (
[x > 2]
) があります。条件は偽です。
ジャンクションからの遷移 2 が評価対象としてマークされます。
ジャンクションからの遷移 2 には条件 (
[x >= 1]
) があります。条件は真です。
条件アクション (
{y = 0;}
) があります。ここでy = 0
になります。ジャンクションには出力遷移があります。
ジャンクションからの遷移が評価対象としてマークされます。
ジャンクションからの遷移 1 には条件 (
[z >= 5]
) があります。条件は偽です。
StateA
からの遷移 2 が評価対象としてマークされます。StateA
からの遷移 2 には条件がありません。StateA
からの遷移 2 の遷移先はステート (StateD
) です。StateD
がentry
の対象として、StateA
がexit
の対象としてマークされます。この有効なパスに対して遷移アクション (/{z = 5}
) を実行します。ここでz = 5
になります。
タイム ステップを完了するには、StateA
についてはステートを出るためのワークフロー、StateE
についてはチャートまたはステートに入るためのワークフローに従います。