ドキュメンテーション

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

遷移の評価

Stateflow® では、チャートで遷移を使用して 1 つの排他的 (OR) ステートから別の排他的 (OR) ステートに移動します。チャート実行の entry ワークフローと execution ワークフローでは、Stateflow が遷移を評価してそれらが有効かどうかを判定します。有効な遷移とは、その条件ラベルが真であり、そのパスがステートで終了する遷移です。遷移が有効な場合、Stateflow は遷移元ステートを出て遷移先ステートに入ります。execution ワークフローと entry ワークフローにおける評価のタイミングについては、Stateflow チャートの実行およびチャートまたはステートに入るを参照してください。

遷移を評価するためのワークフロー

遷移の評価順序

ステートやジャンクションのような単一の遷移元から複数の遷移が発生する場合、Stateflow は評価順序を使用して、各遷移をテストするタイミングを決定します。チャートで使用されているアクション言語に応じて、明示的あるいは暗黙的に遷移の順序を作成できます。順序付けが明示的であっても暗黙的であっても、遷移には、その遷移元の近くに遷移順序を指定する番号が表示されます。

メモ

チャートの編集中に遷移の順序が変更されないようにするには、明示的な順序付けを使用します。

明示的な順序付け

新しい Stateflow チャートを開くと、遷移元からの出力遷移はすべて、作成した順序で自動的に番号が設定されます。順序は 1 から始まり、遷移元で利用可能な次の番号へと続きます。

遷移の実行順序を変更するには、遷移を右クリックし、カーソルを [実行順序] に合わせて、その遷移を実行する順序を選択します。遷移の番号を変更すると、遷移元からの他の出力遷移についてはそのままの順序で、Stateflow チャートによって自動的に番号が変更されます。

暗黙的な順序付け

暗黙的な順序付けモードの C チャートの場合、Stateflow チャートは、単一の遷移元からの複数の出力遷移のグループを以下に基づいて評価します。

  • 階層。

    出力遷移は、各遷移の親の階層レベルに基づく順序で評価されます。

  • ラベル。

    階層に基づく優先順位が等しい場合、出力遷移はラベルに基づく以下の優先順位で評価されます。

    1. イベントと条件を伴うラベル

    2. イベントを伴うラベル

    3. 条件を伴うラベル

    4. ラベルなし

  • 遷移元の角度表面位置。

    階層に基づく優先順位に加えてラベルに基づく優先順位も等しい場合、出力遷移は遷移元オブジェクト表面の角度位置に基づいて評価されます。時計回りの位置が最小となる遷移が、最高の優先順位をもちます。たとえば、2 時のソース位置の遷移は、4 時のソース位置の遷移よりも高い優先順位をもちます。遷移元の位置が 12 時の遷移は、優先順位が最低になります。

出力遷移の例

この例では、Stateflow チャートが初期化され、StateA に対し entry アクションが実行されます。新しいタイム ステップが発生してチャートが起動します。Stateflow チャート実行のワークフローに従って、Stateflow が StateA からの複数の出力遷移を見つけます。このタイム ステップでは、x = 1y = 1z = 1 です。

出力遷移の評価

遷移を評価するためのワークフローに従うと、このチャートの遷移を評価するためのステップは次のような順序になります。

  1. StateA からの遷移 1 が評価対象としてマークされます。

  2. StateA からの遷移 1 には条件があります。

  3. 条件は真です。

  4. StateA からの遷移 1 の遷移先はステートではありません。

  5. ジャンクションには出力遷移があります。

  6. ジャンクションからの遷移 1 が評価対象としてマークされます。

  7. ジャンクションからの遷移 1 には条件があります。

  8. 条件は偽です。

  9. ジャンクションからの遷移 2 が評価対象としてマークされます。

  10. ジャンクションからの遷移 2 には条件がありません。

  11. ジャンクションからの遷移 2 の遷移先はステート (StateD) です。

  12. StateDentry の対象として、StateAexit の対象としてマークされます。

タイム ステップを完了するには、StateA についてはステートを出るためのワークフローStateE についてはチャートまたはステートに入るためのワークフローに従います。

バックトラッキングを伴う出力遷移の例

ある遷移元からの出力遷移がすべて無効であるか、終端ジャンクションで終了しておらず、まだ評価されていない遷移が存在する場合、Stateflow はすべての可能なパスを評価するために以前のステートまたはジャンクションに戻ります。

この例では、Stateflow チャートが初期化され、StateA に対し entry アクションが実行されます。新しいタイム ステップが発生してチャートが起動します。Stateflow チャート実行のワークフローに従って、Stateflow が StateA からの複数の出力遷移を見つけます。このタイム ステップでは、x = 1y = 1z = 1 です。

バックトラッキングによる出力遷移の評価

遷移を評価するためのワークフローに従うと、このチャートの遷移を評価するためのステップは次のような順序になります。

  1. StateA からの遷移 1 が評価対象としてマークされます。

  2. StateA からの遷移 1 には条件があります。

  3. 条件は真です。

  4. StateA からの遷移 1 の遷移先はステートではありません。

  5. ジャンクションには出力遷移があります。

  6. ジャンクションからの遷移 1 が評価対象としてマークされます。

  7. ジャンクションからの遷移 1 には条件があります。

  8. 条件は偽です。

  9. ジャンクションからの遷移 2 が評価対象としてマークされます。

  10. ジャンクションからの遷移 2 には条件があります。

  11. 条件は偽です。

  12. StateA からの遷移 2 が評価対象としてマークされます。

  13. StateA からの遷移 2 には条件がありません。

  14. StateA からの遷移 2 の遷移先はステート (StateE) です。

  15. StateEentry の対象として、StateAexit の対象としてマークされます。

タイム ステップを完了するには、StateA についてはステートを出るためのワークフローStateE についてはチャートまたはステートに入るためのワークフローに従います。

バックトラッキングの回避

この例では、終端ジャンクションによってバックトラッキングを防ぎます。Stateflow チャートが初期化され、StateA に対し entry アクションが実行されます。新しいタイム ステップが発生してチャートが起動します。Stateflow チャート実行のワークフローに従って、Stateflow が StateA からの複数の出力遷移を見つけます。このタイム ステップでは、x = 1y = 1z = 1 です。

遷移を評価するためのワークフローに従うと、このチャートの遷移を評価するためのステップは次のような順序になります。

  1. StateA からの遷移 1 が評価対象としてマークされます。

  2. StateA からの遷移 1 には条件があります。

  3. 条件は真です。

  4. StateA からの遷移 1 の遷移先はステートではありません。

  5. ジャンクションには出力遷移があります。

  6. ジャンクションからの遷移 1 が評価対象としてマークされます。

  7. ジャンクションからの遷移 1 には条件があります。

  8. 条件は偽です。

  9. ジャンクションからの遷移 2 が評価対象としてマークされます。

  10. ジャンクションからの遷移 2 には条件があります。

  11. 条件は偽です。

  12. ジャンクションからの遷移 3 が評価対象としてマークされます。

  13. ジャンクションからの遷移 3 には条件がありません。

  14. 遷移先はステートではなく、出力遷移はありません。

  15. Stateflow チャート実行のワークフローに戻ります。

タイム ステップを完了するには、StateA について中断したところからStateflow チャート実行のワークフローに従います。

条件アクションと遷移アクション

条件アクション

遷移ラベル構文では、条件アクションは遷移条件に続いて、中かっこ ({}) で囲まれて表現されます。条件アクションは、条件が真として評価された時点で実行されます。ただし、遷移パスが有効であると判定されるよりも前です。

遷移アクション

遷移ラベル構文では、遷移アクションはその前にスラッシュ (/) が追加され、中かっこ ({}) で囲まれます。遷移アクションは、遷移パスが有効であると判定された後にのみ実行されます。

この例には条件アクションと遷移アクションの両方が存在します。Stateflow チャートが初期化され、StateA に対し entry アクションが実行されます。新しいタイム ステップが発生してチャートが起動します。StateA からの出力遷移は複数あります。このタイム ステップでは、x = 1y = 1z = 1 です。

条件アクションおよび遷移アクションを伴う出力遷移の評価

遷移を評価するためのワークフローに従うと、このチャートの遷移を評価するためのステップは次のような順序になります。

  1. StateA からの遷移 1 が評価対象としてマークされます。

  2. StateA からの遷移 1 には条件 ([y >= 1]) があります。

  3. 条件は真です。

  4. 条件アクションはありません。

  5. StateA からの遷移 1 の遷移先はステートではありません。

  6. ジャンクションには出力遷移があります。

  7. ジャンクションからの遷移 1 が評価対象としてマークされます。

  8. ジャンクションからの遷移 1 には条件 ([x > 2]) があります。

  9. 条件は偽です。

  10. ジャンクションからの遷移 2 が評価対象としてマークされます。

  11. ジャンクションからの遷移 2 には条件 ([x >= 1]) があります。

  12. 条件は真です。

  13. 条件アクション ({y = 0;}) があります。ここで y = 0 になります。

  14. ジャンクションには出力遷移があります。

  15. ジャンクションからの遷移が評価対象としてマークされます。

  16. ジャンクションからの遷移 1 には条件 ([z >= 5]) があります。

  17. 条件は偽です。

  18. StateA からの遷移 2 が評価対象としてマークされます。

  19. StateA からの遷移 2 には条件がありません。

  20. StateA からの遷移 2 の遷移先はステート (StateD) です。

  21. StateDentry の対象として、StateAexit の対象としてマークされます。この有効なパスに対して遷移アクション (/{z = 5}) を実行します。ここで z = 5 になります。

タイム ステップを完了するには、StateA についてはステートを出るためのワークフローStateE についてはチャートまたはステートに入るためのワークフローに従います。

関連するトピック