メインコンテンツ

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

R2026b

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

以下の例は、パラレル ステートでのイベント ブロードキャスト アクションの動作を示しています。

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.A1a と A.A2.A2a がアクティブです。イベント E_one が発生して、チャートを起動します。このイベントは、チャートのルートからチャートの階層の下方向に処理されます。

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

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

  3. ステート A の子は、パラレル (AND) ステートです。ラベル付けされた順序でステートの評価と実行が行われます。ステート A.A1 が最初に評価されます。ステート A.A1 の during アクション (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.A1 の during アクション (durA1()) が実行されて完了します。ステート A.A1 の有効な遷移が評価されます。ステート A1 には、E_two の結果、有効な遷移は存在しません。

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

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

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

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

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

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

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

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

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

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

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

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

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

    E_two の on イベント ブロードキャスト処理の結果、ステート 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.A1a と A.A2.A2a がアクティブです。イベント E_one が発生して、チャートを起動します。このイベントは、チャートのルートからチャートの階層の下方向に処理されます。

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

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

  3. ステート A の子は、パラレル (AND) ステートです。ラベル付けされた順序でステートの評価と実行が行われます。ステート A.A1 が最初に評価されます。ステート A.A1 の during アクション (durA1()) が実行されて完了します。

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

  5. ステート A.A1.A1a が exit アクション (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. ステート A の during アクション (durA()) が実行されて完了します。

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

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

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

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

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

    9. ステート A.A2.A2b の entry アクション (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.A1a と A.A2.A2a がアクティブです。イベント E_one が発生して、チャートを起動します。このイベントは、チャートのルートからチャートの階層の下方向に処理されます。

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

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

  3. ステート A の子は、パラレル (AND) ステートです。ラベル付けされた順序でステートの評価と実行が行われます。ステート A.A1 が最初に評価されます。ステート A.A1 の during アクション (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. ステート A の during アクション (durA()) が実行されて完了します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ヒント

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

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