Main Content

パラレル ステート内の指示のないブロードキャスト イベント

ステート アクションでのイベントのブロードキャスト

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

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.

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

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

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

  3. ステート A の子は、パラレル (AND) ステートです。暗黙的な順序付けが適用されるため、左から右、上から下の順序でステートの評価と実行が行われます。ステート A.A1 が最初に評価されます。ステート A.A1during アクション (durA1()) が実行されて完了します。ステート A.A1 が実行され、on E_one アクションが完了されて、イベント (E_two) がブロードキャストされます。during アクションと on event_name アクションは、ステートのラベル内での出現順に基づいて処理されます。

    1. イベント E_two のブロードキャストによって、チャートの 2 度目の起動が発生します。チャートのルートは、E_two の結果、有効な遷移が存在するかどうかをチェックします。有効な遷移は存在しません。

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

    3. ステート A の子の有効な遷移がチェックされます。有効な遷移は存在しません。

    4. ステート A の子がステート A.A1 から順番に評価されます。ステート A.A1during アクション (durA1()) が実行されて完了します。ステート A.A1 の有効な遷移が評価されます。ステート A1 には、E_two の結果、有効な遷移は存在しません。

    5. ステート A1aduring アクション (durA1a()) が実行されます。

    6. ステート A.A2 が評価されます。ステート A.A2during アクション (durA2()) が実行されて完了します。ステート A.A2 の有効な遷移がチェックされます。ステート A.A2 には、E_two の結果、ステート A.A2.A2a からステート A.A2.A2b への有効な遷移が存在します。

    7. ステート A.A2.A2aexit アクション (exitA2a()) が実行されて完了します。

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

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

    10. ステート A.A2.A2bentry アクション (entA2b()) が実行されて完了します。

  4. E_twoon イベント ブロードキャストが処理されてから、E_one の処理は続行されます。イベント E_one の結果として、ステート A.A1 の有効な遷移がチェックされます。ステート A.A1.A1a からステート A.A1.A1b への有効な遷移が存在します。

  5. ステート A.A1.A1aexit アクション (exitA1a) の実行を完了します。

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

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

  8. ステート A.A1.A1bentry アクション (entA1b()) が実行されて完了します。

  9. パラレル ステート A.A2 が次に評価されます。ステート A.A2during アクション (durA2()) が実行されて完了します。E_one の結果、有効な遷移は存在しません。

  10. ステート A.A2.A2bduring アクション (durA2b()) が実行されて完了します。

    E_twoon イベント ブロードキャスト処理の結果、ステート A.A2.A2b がアクティブになります。

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

このシーケンスは、イベント E_one と、イベント E_two のパラレル ステートへの on イベント ブロードキャストに関連する Stateflow® チャートの実行を完了します。最後のチャート アクティビティでは、パラレル サブステート A.A1.A1b および A.A2.A2b がアクティブになります。

ヒント

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

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

遷移アクションでのイベントのブロードキャスト

以下の例は、パラレル ステートで入れ子にされたイベント ブロードキャストを含むイベント ブロードキャスト遷移アクションの動作を示しています。チャートは、パラレル ステートの暗黙的な順序付けを使用します (パラレル ステートの暗黙的な順序付けを参照)。

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.

イベント E_one 処理の開始

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

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

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

  3. ステート A の子は、パラレル (AND) ステートです。暗黙的な順序付けが適用されるため、左から右、上から下の順序でステートの評価と実行が行われます。ステート A.A1 が最初に評価されます。ステート A.A1during アクション (durA1()) が実行されて完了します。

  4. イベント E_one の結果として、ステート A.A1 の有効な遷移がチェックされます。ステート A.A1.A1a からステート A.A1.A1b への有効な遷移が存在します。

  5. ステート A.A1.A1aexit アクション (exitA1a) の実行を完了します。

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

E_one よりも優先されるイベント E_two

  1. イベント E_two をブロードキャストする遷移アクションが実行されて完了します。

    1. イベント E_two のブロードキャストは、ステート A1a からステート A1b (イベント E_one によってトリガー) への遷移よりも優先されます。

    2. イベント E_two のブロードキャストによって、チャートの 2 度目の起動が発生します。チャートのルートは、E_two の結果、有効な遷移が存在するかどうかをチェックします。有効な遷移は存在しません。

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

    4. ステート A の子がステート A.A1 から順番に評価されます。ステート A.A1during アクション (durA1()) が実行されて完了します。ステート A.A1 の有効な遷移が評価されます。ステート A1 には、E_two の結果、有効な遷移は存在しません。

    5. ステート A.A2 が評価されます。ステート A.A2during アクション (durA2()) が実行されて完了します。ステート A.A2 の有用な遷移がチェックされます。ステート A.A2 には、E_two の結果、ステート A.A2.A2a からステート A.A2.A2b への有効な遷移が存在します。

    6. ステート A.A2.A2aexit アクション (exitA2a()) が実行されて完了します。

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

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

    9. ステート A.A2.A2bentry アクション (entA2b()) が実行されて完了します。

イベント E_one の処理再開

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

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

  3. パラレル ステート A.A2 が次に評価されます。ステート A.A2 の during アクション (durA2()) が実行されて完了します。E_one の結果、有効な遷移は存在しません。

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

    イベント ブロードキャスト E_two 処理の結果、ステート A.A2.A2b がアクティブになります。

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

このシーケンスは、イベント E_one と、イベント E_two のパラレル ステートへの遷移アクション イベント ブロードキャストに関連する Stateflow チャートの実行を完了します。最後のチャート アクティビティでは、パラレル サブステート A.A1.A1b および A.A2.A2b がアクティブになります。

ヒント

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

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

条件アクションでのイベントのブロードキャスト

以下の例は、パラレル (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.

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

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

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

  3. ステート A の子は、パラレル (AND) ステートです。暗黙的な順序付けが適用されるため、上から下、左から右の順序でステートの評価と実行が行われます。ステート A.A1 が最初に評価されます。ステート A.A1during アクション (durA1()) が実行されて完了します。

  4. イベント E_one の結果として、ステート A.A1 の有効な遷移がチェックされます。ステート A.A1.A1a からステート A.A1.A1b への有効な遷移が存在します。有効な条件アクションも存在します。E_two の条件アクション イベント ブロードキャストが実行されて完了します。ステート A.A1.A1a はこの時点でもアクティブです。

    1. イベント E_two のブロードキャストによって、Stateflow チャートの 2 度目の起動が発生します。チャートのルートは、E_two の結果、有効な遷移が存在するかどうかをチェックします。有効な遷移は存在しません。

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

    3. ステート A の子がステート A.A1 から順番に評価されます。ステート A.A1during アクション (durA1()) が実行されて完了します。ステート A.A1 の有効な遷移が評価されます。ステート A1 には、E_two の結果、有効な遷移は存在しません。

    4. ステート A1aduring アクション (durA1a()) が実行されます。

    5. ステート A.A2 が評価されます。ステート A.A2during アクション (durA2()) が実行されて完了します。ステート A.A2 の有効な遷移がチェックされます。ステート A.A2 には、E_two の結果、ステート A.A2.A2a からステート A.A2.A2b への有効な遷移が存在します。

    6. ステート A.A2.A2aexit アクション (exitA2a()) が実行されて完了します。

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

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

    9. ステート A.A2.A2bentry アクション (entA2b()) が実行されて完了します。

  5. ステート A.A1.A1aexit アクション (exitA1a) の実行を完了します。

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

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

  8. ステート A.A1.A1bentry アクション (entA1b()) が実行されて完了します。

  9. パラレル ステート A.A2 が次に評価されます。ステート A.A2during アクション (durA2()) が実行されて完了します。E_one の結果、有効な遷移は存在しません。

  10. ステート A.A2.A2bduring アクション (durA2b()) が実行されて完了します。

    E_two の条件アクション イベント ブロードキャスト処理の結果、ステート A.A2.A2b がアクティブになります。

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

このシーケンスは、イベント E_one と、イベント E_two のパラレル ステートへの条件アクション イベント ブロードキャストに関連する Stateflow チャートの実行を完了します。最後のチャート アクティビティでは、パラレル サブステート A.A1.A1b および A.A2.A2b がアクティブになります。

ヒント

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

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