このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
遷移の評価
Stateflow® では、チャートで遷移を使用して 1 つの排他的 (OR) ステートから別の排他的 (OR) ステートに移動します。チャート実行の entry
ワークフローと execution
ワークフローでは、Stateflow が遷移を評価してそれらが有効かどうかを判定します。有効な遷移とは、その条件ラベルが真であり、そのパスがステートで終了する遷移です。遷移が有効な場合、Stateflow は遷移元ステートを出て遷移先ステートに入ります。execution
ワークフローと entry
ワークフローにおける評価のタイミングについては、Stateflow チャートの実行およびチャートまたはステートに入るを参照してください。
遷移を評価するためのワークフロー
遷移の評価順序
ステートやジャンクションのような単一の遷移元から複数の遷移が発生する場合、Stateflow は評価順序を使用して、各遷移をテストするタイミングを決定します。遷移元の近くに表示される番号が遷移順序です。
遷移元からの出力遷移は、作成した順序で自動的に番号が設定されます。順序は 1
から始まり、遷移元で利用可能な次の番号へと続きます。
遷移の実行順序を変更するには、遷移を右クリックし、[実行順序] をクリックし、その遷移を実行する順序を選択します。遷移の番号を変更すると、遷移元からの他の出力遷移についてはそのままの順序で、Stateflow チャートによって自動的に番号が変更されます。
親ステートの内側の端への遷移
親ステートの内側の端で終了する遷移はデフォルト遷移パスに戻るショートカットであり、このデフォルト パスは現在のタイム ステップで評価されます。この例では、ステート 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
についてはチャートまたはステートに入るためのワークフローに従います。