Main Content

ローカル イベントをブロードキャストしてパラレル ステートを同期

"ローカル イベント" は、Stateflow® チャート内で発生するイベントで、そのチャート内でのみ表示できます。このタイプのイベントにより、同じチャート内のパラレル (AND) ステートが相互に同期できるようになり、一方のステートでのアクションがもう一方のステートでのアクションをトリガーすることになります。チャート内のアクションは、別のチャート内のステートにローカル イベントをブロードキャストできません。ローカル イベントを定義するには、次を行います。

  1. チャートでのイベントの定義 の説明に従って、イベントを Stateflow チャートに追加します。

  2. イベントの [スコープ] プロパティを [ローカル] に設定します。

ローカル イベントは、MATLAB® 内のスタンドアロンの Stateflow チャートではサポートされません。詳細については、イベントのブロードキャストによるモデル コンポーネントの同期を参照してください。

ローカル イベントのブロードキャスト

"指示のあるイベント ブロードキャスト" は、演算子 send を使用して、ローカル イベントをステート間で直接送信します。

send(event_name,state_name)
event_name はローカル イベントで、state_name は受信側のステートです。ローカル イベントは受信側のステートと、そのすべてのサブステートに直接ブロードキャストされます。ローカル イベントは、送信側のステートと受信側のステートの両方で認識されていなければなりません。受信側のステートは、イベント ブロードキャスト時にアクティブである必要があります。

たとえば、このチャートには AB の 2 つのパラレル (AND) ステートがあります。ローカル イベント E_one はこのチャートに属しており、両方のステートで認識されます。ステート A では、サブステート A1 からサブステート A2 への遷移に、send(E_one,B) という形式の指示のあるイベント ブロードキャストを使用して、ローカル イベント E_one をステート B に送信します。B では、このイベントがサブステート B1 からサブステート B2 への遷移をトリガーします。そのため、AB でアクティブなサブステートが同期されます。この例のセマンティクスの詳細については、send による指示のあるイベント ブロードキャストを参照してください。

Stateflow chart that uses a directed event broadcast to synchronize the substates of two parallel (AND) states.

引数 state_name には、ステートへの絶対階層パスを指定できます。たとえば、ステート A がステート A1 を含んでいる場合は、以下のブロードキャストでイベント E をステート A1 に送信できます。

send(E,A.A1)

ヒント

ステートへの絶対階層パスには、チャート名を含めないでください。

イベント ブロードキャストでの修飾イベント名の使用

送信側のステートが認識しないローカル イベントをブロードキャストするには、演算子 send と修飾イベント名を使用します。

send(state_name.event_name)
event_name は受信側のステート state_name が所有するローカル イベントです。ローカル イベントは受信側のステートと、そのすべてのサブステートに直接ブロードキャストされます。ローカル イベントは受信側のステートで認識されますが、送信側のステートでは認識されません。受信側のステートは、イベント ブロードキャスト時にアクティブである必要があります。

たとえば、このチャートには AB の 2 つのパラレル (AND) ステートがあります。ローカル イベント E_one はステート B に属しており、そのステートでのみ認識されます。ステート A では、サブステート A1 からサブステート A2 への遷移に、send(B.E_one) という形式の指示のあるイベント ブロードキャストを使用して、ローカル イベント E_one をステート B に送信します。B では、このイベントがサブステート B1 からサブステート B2 への遷移をトリガーします。そのため、AB でアクティブなサブステートが同期されます。この例のセマンティクスの詳細については、修飾イベント名による指示のあるイベント ブロードキャストを参照してください。

Stateflow chart that uses a directed event broadcast to synchronize the substates of two parallel (AND) states. The broadcast uses the qualified event name B.E_one.

引数 state_name には、受信側のステートへの絶対階層パスを指定できます。ステートの絶対パスには、チャート名を使用しないでください。たとえば、ステート A にステート A1 が含まれ、A1 がローカル イベント E を所有しているものと仮定します。以下のブロードキャストを使用して、イベント E をステート A1 に送信できます。

send(A.A1.E)

指示のないイベント ブロードキャスト

"指示のないイベント ブロードキャスト" は、ローカル イベントを、そのイベントを認識できるすべてのステートに送信します。このとき、イベント名が条件アクションとして使用されます。

event_name;

または、受信側のステートを指定せずに演算子 send を呼び出します。

send(event_name)
event_name は送信側のステートで認識されるローカル イベントです。

可能な限り、指示のないイベント ブロードキャストではなく指示のあるイベント ブロードキャストを使用してください。指示のあるイベント ブロードキャストを使用すると、シミュレーション時に予期しない再帰が発生しなくなり、生成されるコードの効率性が向上します。詳細については、チャートでの望ましくない再帰の回避を参照してください。

指示のないローカル イベント ブロードキャストの検出のための診断

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

参考

関連するトピック