ローカル イベントをブロードキャストしてパラレル ステートを同期
"ローカル イベント" は、Stateflow® チャート内で発生するイベントで、そのチャート内でのみ表示できます。このタイプのイベントにより、同じチャート内のパラレル (AND) ステートが相互に同期できるようになり、一方のステートでのアクションがもう一方のステートでのアクションをトリガーすることになります。チャート内のアクションは、別のチャート内のステートにローカル イベントをブロードキャストできません。ローカル イベントを定義するには、次を行います。
チャートでのイベントの定義 の説明に従って、イベントを Stateflow チャートに追加します。
イベントの [スコープ] プロパティを
[ローカル]
に設定します。
ローカル イベントは、MATLAB® 内のスタンドアロンの Stateflow チャートではサポートされません。詳細については、イベントのブロードキャストによるモデル コンポーネントの同期を参照してください。
ローカル イベントのブロードキャスト
"指示のあるイベント ブロードキャスト" は、演算子 send
を使用して、ローカル イベントをステート間で直接送信します。
send(event_name,state_name)
event_name
はローカル イベントで、state_name
は受信側のステートです。ローカル イベントは受信側のステートと、そのすべてのサブステートに直接ブロードキャストされます。ローカル イベントは、送信側のステートと受信側のステートの両方で認識されていなければなりません。受信側のステートは、イベント ブロードキャスト時にアクティブである必要があります。たとえば、このチャートには A
と B
の 2 つのパラレル (AND) ステートがあります。ローカル イベント E_one
はこのチャートに属しており、両方のステートで認識されます。ステート A
では、サブステート A1
からサブステート A2
への遷移に、send(E_one,B)
という形式の指示のあるイベント ブロードキャストを使用して、ローカル イベント E_one
をステート B
に送信します。B
では、このイベントがサブステート B1
からサブステート B2
への遷移をトリガーします。そのため、A
と B
でアクティブなサブステートが同期されます。この例のセマンティクスの詳細については、send による指示のあるイベント ブロードキャストを参照してください。
引数 state_name
には、ステートへの絶対階層パスを指定できます。たとえば、ステート A
がステート A1
を含んでいる場合は、以下のブロードキャストでイベント E
をステート A1
に送信できます。
send(E,A.A1)
ヒント
ステートへの絶対階層パスには、チャート名を含めないでください。
イベント ブロードキャストでの修飾イベント名の使用
送信側のステートが認識しないローカル イベントをブロードキャストするには、演算子 send
と修飾イベント名を使用します。
send(state_name.event_name)
event_name
は受信側のステート state_name
が所有するローカル イベントです。ローカル イベントは受信側のステートと、そのすべてのサブステートに直接ブロードキャストされます。ローカル イベントは受信側のステートで認識されますが、送信側のステートでは認識されません。受信側のステートは、イベント ブロードキャスト時にアクティブである必要があります。たとえば、このチャートには A
と B
の 2 つのパラレル (AND) ステートがあります。ローカル イベント E_one
はステート B
に属しており、そのステートでのみ認識されます。ステート A
では、サブステート A1
からサブステート A2
への遷移に、send(B.E_one)
という形式の指示のあるイベント ブロードキャストを使用して、ローカル イベント E_one
をステート B
に送信します。B
では、このイベントがサブステート B1
からサブステート B2
への遷移をトリガーします。そのため、A
と B
でアクティブなサブステートが同期されます。この例のセマンティクスの詳細については、修飾イベント名による指示のあるイベント ブロードキャストを参照してください。
引数
には、受信側のステートへの絶対階層パスを指定できます。ステートの絶対パスには、チャート名を使用しないでください。たとえば、ステート state_name
A
にステート A1
が含まれ、A1
がローカル イベント E
を所有しているものと仮定します。以下のブロードキャストを使用して、イベント E
をステート A1
に送信できます。
send(A.A1.E)
指示のないイベント ブロードキャスト
"指示のないイベント ブロードキャスト" は、ローカル イベントを、そのイベントを認識できるすべてのステートに送信します。このとき、イベント名が条件アクションとして使用されます。
event_name;
または、受信側のステートを指定せずに演算子 send
を呼び出します。
send(event_name)
event_name
は送信側のステートで認識されるローカル イベントです。可能な限り、指示のないイベント ブロードキャストではなく指示のあるイベント ブロードキャストを使用してください。指示のあるイベント ブロードキャストを使用すると、シミュレーション時に予期しない再帰が発生しなくなり、生成されるコードの効率性が向上します。詳細については、チャートでの望ましくない再帰の回避を参照してください。
指示のないローカル イベント ブロードキャストの検出のための診断
シミュレーション時に Stateflow チャートは指示のないローカル イベント ブロードキャストを検出できます。診断アクションのレベルを制御するには、[コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[診断] 、 [Stateflow] ペインで、[指示のないイベント ブロードキャスト] パラメーターを [なし]
、[警告]
、または [エラー]
に設定します。既定の設定は [警告]
です。詳細については、指示のないイベント ブロードキャスト (Simulink)を参照してください。