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

イベントのブロードキャストによるパラレル ステートの同期

イベントはパラレル ステート相互の連携に役立ちます。1 つのステートが別のステート内でのアクションをトリガーできるようになります。同じ Stateflow® チャート内のパラレル ステートを同期するには、あるステートから別のステートにイベントを直接ブロードキャストします。パラレル ステートの詳細については、パラレル化を使用した同期サブシステムのモデル化を参照してください。

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

"ローカル イベント" は、Stateflow チャートのパラレル ステート内で遷移またはアクションをトリガーできる非グラフィカル オブジェクトです。イベントをステートにブロードキャストすると、受け取り側のステートとそのステートの階層内にあるすべてのサブステートでイベントが有効になります。イベントをブロードキャストするには、send 演算子を使用します。

send(event_name,state_name)

event_name はブロードキャストされるイベントの名前です。state_name はブロードキャスト時のアクティブ ステートです。

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

この例では、ホーム セキュリティ システムの設計の一部としてローカル イベントを使用します。

セキュリティ システムは 1 つのアラームと 3 つの侵入防止センサー (窓センサー、ドア センサー、および動作検知器) で構成されています。システムで侵入が検知されてから、少しの時間はアラームを無効にできます。そうしない場合は、システムが警察に通報します。

サブシステムをパラレル ステートとしてモデル化

Security System チャートは、個別のパラレル ステートを使って各サブシステムをモデル化します。イネーブル入力信号によって、アラームの On または Off モードか、各センサーの Active または Disabled モードが選択されます。イネーブルになると、各センサーは、侵入の可能性を示すトリガー入力信号を監視します。

サブシステムステートイネーブル信号トリガー信号
ドア センサーDoorD_modeDoor_sens
窓センサーWinW_modeWin_sens
動作検知器MotionM_modeMot_sens
アラームAlarmAlarm_active 

センサーは、アラーム サブシステムがオンの間に侵入を検知すると、次のコマンドを使って Alert イベントをブロードキャストします。

send(Alert,Alarm)

散発的な誤検知の影響を緩和するため、動作検知器は、持続的な正のトリガー信号だけがアラームを生成するようにデバウンス設計を取り入れています。その一方、ドアと窓のセンサーは単一の正のトリガー信号を侵入として解釈し、直ちにアラームを発します。

アラーム サブシステムでは、Alert イベントによって Idle サブステートから Pending サブステートへの遷移が生じます。このステートがアクティブになると、侵入の可能性があることが警告音によって居住者に知らされます。アラームが誤って発せられた場合、居住者は短時間でセキュリティ システムを無効にします。時間内に無効にされない場合、システムは警察に通報して支援を求めます。

他の Simulink ブロックとの連携

Stateflow チャートはイベントを使って Simulink® モデル内の他のブロックと通信できます。たとえば、sf_security の例は次のとおりです。

  • 出力イベント Sound および call_police は、警告音と警察への通報を扱う外部ブロックを操作します。これらのイベントをブロードキャストするためのコマンドは Alarm.On ステートで発生します。

    • Sound のコマンドは Pending サブステート内で entry アクションとして発生。

    • call_police のコマンドは Pending サブステートと Idle サブステート間の遷移内でアクションとして発生。

    各ケースで、出力イベントを発行するコマンドがイベントの名前となります。

  • 入力イベント sl_call は、動作検知器のデバウンサーのタイミングと、警察に通報する前の短い遅延を制御します。各インスタンスにおいて、イベントは時相演算子 after への呼び出し内で発生し、その結果、チャートがイベントを何回か受け取った後に遷移が生じます。

出力イベント

"出力イベント" は Stateflow チャート内で発生しますが、チャート外部の Simulink ブロックで認識されます。このタイプのイベントにより、チャートは、モデル内の他のブロックに対して、チャートで発生したイベントについて通知することが可能になります。

各出力イベントはチャートの右側にある出力端子にマッピングされます。その構成に応じて、対応する信号は Triggered Subsystem または Function-Call Subsystem を制御できます。出力イベントを構成するには、プロパティ インスペクターで [トリガー] フィールドを次のいずれかのオプションに設定します。

トリガーのタイプ説明
Either Edge出力イベントのブロードキャストによって出力信号が 0 と 1 の間で切り替わります。
Function call出力イベントのブロードキャストによって Simulink 関数呼び出しイベントが生じます。

sf_security の例では、出力イベントの Sound および call_police がエッジ トリガーを使用して Simulink モデル内の 1 組のラッチ サブシステムを有効にします。各ラッチがその入力信号の値の変更を検出すると、一時的に 1 の値を出力してから、0 の出力に戻ります。

入力イベント

"入力イベント" は Simulink ブロック内で発生しますが、Stateflow チャートで認識されます。このタイプのイベントにより、他の Stateflow チャートを含めた他の Simulink ブロックは、特定のチャートに対してその外部で発生したイベントを通知できるようになります。

外部の Simulink ブロックは、Stateflow チャートの上部にあるトリガー端子に接続されている信号を通して入力イベントを送信します。その構成に応じて、入力イベントは信号値の変化から生じるか、あるいは Simulink ブロックからの関数呼び出しを通して発生します。入力イベントを構成するには、プロパティ インスペクターで [トリガー] フィールドを次のいずれかのオプションに設定します。

トリガーのタイプ説明
Rising入力信号が 0 または負の値から正の値に変化すると、チャートがアクティブになります。
Falling入力信号が正の値から 0 または負の値に変化すると、チャートがアクティブになります。
Either入力信号がどちらかの方向に変化して 0 を横切ると、チャートがアクティブになります。
Function callSimulink ブロックからの関数呼び出しによってチャートがアクティブになります。

sf_security の例では、Simulink Function-Call Generator ブロックが周期的な関数呼び出しを通じて入力イベント sl_call をトリガーすることにより、セキュリティ システムのタイミングを制御します。

例の確認

セキュリティ システムのチャートには、いくつかの Manual Switch ブロックからの入力と、Display ブロックに接続する 1 組のラッチ サブシステムへの出力があります。シミュレーション時には、以下が可能です。

  • Switch ブロックをクリックすることにより、アラーム サブシステムとセンサー サブシステムを有効にして侵入検知をトリガーする。

  • チャート アニメーションでチャート内のさまざまなアクティブ ステートが強調表示されるのを確認する。

  • Scope ブロックとシミュレーション データ インスペクターで出力信号を表示する。

シミュレーションのタイミングを調整するには、Function-Call Generator ブロックをダブルクリックし、ダイアログ ボックスで [サンプル時間] フィールドを変更します。たとえば、サンプル時間を 1 に設定して、すべてのサブシステムをオンに、すべてのセンサー トリガーをオフにした状態でシミュレーションを開始するとします。シミュレーション中、以下のアクションを実行します。

  1. 時間 t = 250 秒に、ドア センサーをトリガーします。アラームが鳴り始めるので (Sound = 1)、アラーム システムを直ちに無効にします。トリガーをオフに切り替えてアラームをオンに戻します。

  2. 時間 t = 520 秒に、窓センサーをトリガーし、アラームが鳴り始めます (Sound = 0)。今回はアラームを無効にしません。時間 t = 600 頃に、セキュリティ システムが警察への通報を行います (call_police = 1)。Sound 信号と call_police 信号は、80 秒ごとに 0 と 1 の切り替えを続けます。

  3. 時間 t = 1400 秒に、アラームを無効にします。Sound 信号と call_police 信号の切り替えが停止します。

シミュレーション データ インスペクターに、アクションに対する Sound 信号と call_police 信号の応答が表示されます。

関連する例

詳細