ドキュメンテーション

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

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

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

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

最初は、チャートはスリープ状態です。パラレル サブステート 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.A1 からステート A の子が評価されます。ステート 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 がアクティブになります。

ヒント

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

指示のないローカル イベント ブロードキャストを検出する診断レベルを設定できます。[モデル コンフィギュレーション パラメーター] ダイアログ ボックスで、[診断][Stateflow] ペインに移動し、[指示のないイベント ブロードキャスト] 診断を [なし][警告] または [エラー] に設定します。既定の設定は [警告] です。

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

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

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

    4. ステート A.A1 からステート A の子が評価されます。ステート 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 がアクティブになります。

ヒント

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

指示のないローカル イベント ブロードキャストを検出する診断レベルを設定できます。[モデル コンフィギュレーション パラメーター] ダイアログ ボックスで、[診断][Stateflow] ペインに移動し、[指示のないイベント ブロードキャスト] 診断を [なし][警告] または [エラー] に設定します。既定の設定は [警告] です。

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

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

最初は、チャートはスリープ状態です。パラレル サブステート 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.A1 からステート A の子が評価されます。ステート 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 がアクティブになります。

ヒント

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

指示のないローカル イベント ブロードキャストを検出する診断レベルを設定できます。[モデル コンフィギュレーション パラメーター] ダイアログ ボックスで、[診断][Stateflow] ペインに移動し、[指示のないイベント ブロードキャスト] 診断を [なし][警告] または [エラー] に設定します。既定の設定は [警告] です。