Main Content

条件アクションを使用したチャートの実行の制御

条件アクションの動作

以下の例は、複数セグメントをもつ遷移パスでの簡単な条件アクションの動作を示しています。チャートでは、出力遷移の暗黙的な順序付けが使用されます (暗黙的な順序付けを参照)。

Stateflow chart with states called A, B, and C.

最初は、チャートはスリープ状態です。ステート A がアクティブです。条件 C_oneC_two は偽です。イベント E_one が発生して、チャートを起動します。このイベントは、チャートのルートからチャートの階層の下方向に処理されます。

  1. チャートのルートは、E_one の結果、有効な遷移が存在するかどうかをチェックします。ステート A からコネクティブ ジャンクションへの有効な遷移セグメントが検出されます。有効な遷移セグメントで条件アクション A_one が検出され、即時に実行されて完了します。ステート A はこの時点でもアクティブです。

  2. 選択可能な遷移先への遷移セグメントの条件は偽であるため、有効な遷移は存在しません。

  3. ステート A の during アクション (durA()) が実行されて完了します。

    ステート A はアクティブなままです。

  4. チャートはスリープ状態に戻ります。

このシーケンスは、ステート A が最初にアクティブな場合に、イベント E_one に関連する Stateflow® チャートの実行を完了します。

条件アクションと遷移アクションの動作

以下の例は、排他的 (OR) ステート間の遷移で指定された簡単な条件アクションと遷移アクションの動作を示しています。

Stateflow chart with states called A and B.

最初は、チャートはスリープ状態です。ステート A がアクティブです。条件 C_one は真です。イベント E_one が発生して、チャートを起動します。このイベントは、チャートのルートからチャートの階層の下方向に処理されます。

  1. チャートのルートは、E_one の結果、有効な遷移が存在するかどうかをチェックします。ステート A からステート B で、有効な遷移が検出されます。条件 C_one は真です。有効な遷移で条件アクション A_one が検出され、即時に実行されて完了します。ステート A はこの時点でもアクティブです。

  2. ステート A の exit アクション (ExitA()) が実行されて完了します。

  3. ステート A が非アクティブとしてマークされます。

  4. 遷移アクション A_two が実行されて完了します。

  5. ステート B がアクティブとしてマークされます。

  6. ステート B の entry アクション (entB()) が実行されて完了します。

  7. チャートはスリープ状態に戻ります。

このシーケンスは、ステート A が最初にアクティブな場合に、イベント E_one に関連する Stateflow チャートの実行を完了します。

for ループを使用した条件アクションの作成

条件アクションとコネクティブ ジャンクションは、for ループの構成を設計する目的で使用されます。以下の例は、条件アクションとコネクティブ ジャンクションを使用して for ループの構成を作成する方法を示しています。チャートでは、出力遷移の暗黙的な順序付けが使用されます (暗黙的な順序付けを参照)。

Stateflow chart with states called A and B.

上記の例の動作を確認するには、for ループの構成 を参照してください。

条件アクションを使用したパラレル (AND) ステートへのイベントのブロードキャスト

以下の例は、条件アクションを使用してイベントをパラレル (AND) ステートに即時にブロードキャストする方法を示しています。チャートは、パラレル ステートの暗黙的な順序付けを使用します (パラレル ステートの暗黙的な順序付けを参照)。

Stateflow chart with a top-level state called A. A has two parallel substates called A1 and A2. A1 has substates A1a and A1B. A2 has substates A2a and A2b.

上記の例の動作を確認するには、条件アクションでのイベントのブロードキャスト を参照してください。

ヒント

指示のないローカル イベント ブロードキャストは使用しないでください。指示のないローカル イベント ブロードキャストを使用すると、チャート内で不要な再帰的動作が発生する場合があります。代わりに、指示のあるブロードキャストを使用してローカル イベントを送信してください。詳細については、ローカル イベントをブロードキャストしてパラレル ステートを同期を参照してください。

シミュレーション時に Stateflow チャートは指示のないローカル イベント ブロードキャストを検出できます。診断アクションのレベルを制御するには、[コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[診断][Stateflow] ペインで、[指示のないイベント ブロードキャスト] パラメーターを [なし][警告]、または [エラー] に設定します。既定の設定は [警告] です。詳細については、指示のないイベント ブロードキャスト (Simulink)を参照してください。

循環動作の回避

以下の例では、イベント ブロードキャストを条件アクションとして使用する場合、セマンティクスにより発生する循環動作を回避する表記法を示します。

Stateflow chart with states called On and Off.

最初は、チャートはスリープ状態です。ステート On がアクティブです。イベント E_one が発生して、チャートを起動します。このイベントは、チャートのルートからチャートの階層の下方向に処理されます。

  1. チャートのルートは、E_one の結果、有効な遷移が存在するかどうかをチェックします。

    ステート On からステート Off で、有効な遷移が検出されます。

  2. 遷移の条件アクションによってイベント E_one がブロードキャストされます。

  3. 有効な遷移でイベント E_one が検出され、即時に実行されます。ステート On はこの時点でもアクティブです。

  4. イベント E_one のブロードキャストによって、チャートの 2 度目の起動が発生します。

  5. 手順 1 に戻ります。

手順 1 から 5 が引き続き循環的に実行されます。条件アクションのブロードキャスト イベントと同じイベントのトリガーを示す遷移ラベルが原因で、回復不能な循環動作が発生します。このシーケンスは、イベント E_one がブロードキャストされ、ステート On がアクティブな場合は完了しません。

ヒント

指示のないローカル イベント ブロードキャストは使用しないでください。指示のないローカル イベント ブロードキャストを使用すると、チャート内で不要な再帰的動作が発生する場合があります。代わりに、指示のあるブロードキャストを使用してローカル イベントを送信してください。詳細については、ローカル イベントをブロードキャストしてパラレル ステートを同期を参照してください。

シミュレーション時に Stateflow チャートは指示のないローカル イベント ブロードキャストを検出できます。診断アクションのレベルを制御するには、[コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[診断][Stateflow] ペインで、[指示のないイベント ブロードキャスト] パラメーターを [なし][警告]、または [エラー] に設定します。既定の設定は [警告] です。詳細については、指示のないイベント ブロードキャスト (Simulink)を参照してください。

関連するトピック