このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
イベントのブロードキャストによるパラレル ステートの同期
ローカル イベントでは、1 つのステートが同じ Stateflow® チャートにある別のステート内での遷移またはアクションをトリガーできるようにすることで、パラレル ステートを連携させることができます。ステート間でイベントをブロードキャストするには、send
演算子をイベントの名前およびアクティブ ステートの名前と共に使用します。
send(eventName,stateName)
イベントをブロードキャストすると、受け取り側のステートとそのステートの階層内にあるすべてのサブステートでイベントが有効になります。
ホーム セキュリティ システムのモデル化
この例では、ホーム セキュリティ システムの設計の一部としてローカル イベントを使用します。
セキュリティ システムは 1 つのアラームと 3 つの侵入防止センサー (ドア センサー、窓センサー、および動作検知器) で構成されています。システムで侵入が検知されてから、少しの時間はアラームを無効にできます。そうしない場合は、システムが警察に通報します。
チャートは、次のいずれかのパラレル ステートを使用して各センサーをモデル化します。
パラレル ステート
Door
はドア センサーをモデル化します。入力信号D_mode
によって、このセンサーのActive
モードまたはDisabled
モードが選択されます。センサーがアクティブになると、入力信号Door_sens
は侵入の可能性を示します。パラレル ステート
Win
は窓センサーをモデル化します。入力信号W_mode
によって、このセンサーのActive
モードまたはDisabled
モードが選択されます。センサーがアクティブになると、入力信号Win_sens
は侵入の可能性を示します。パラレル ステート
Motion
は動作検知器をモデル化します。入力信号M_mode
によって、このセンサーのActive
モードまたはDisabled
モードが選択されます。センサーがアクティブになると、入力信号Mot_sens
は侵入の可能性を示します。
散発的な誤検知の影響を緩和するため、動作検知器は、持続的な正のトリガー信号だけがアラートを生成するようにデバウンス設計を取り入れています。その一方、ドアと窓のセンサーは単一の正のトリガー信号を侵入として解釈し、直ちにアラートを発します。
Alarm
という 4 番目のパラレル ステートは、アラーム システムの動作モードをモデル化します。入力信号 Alarm_active
によって、アラームの On
モードまたは Off
モードが選択されます。センサーは、アラーム サブシステムがオンの間に侵入を検知すると、ローカル イベント Alert
を Alarm
ステートにブロードキャストします。ステート Alarm
の On
サブステートで、このイベントは Idle
サブステートから Pending
サブステートへの遷移をトリガーします。Pending
がアクティブになると、侵入の可能性があることが警告音によって居住者に知らされます。アラームが誤って発せられた場合、居住者は短時間でセキュリティ システムを無効にします。時間内に無効にされない場合、システムは警察に通報して支援を求めてから、Idle
モードに戻ります。
他の Simulink ブロックとの連携
Stateflow チャートはイベントを使って Simulink® モデル内の他のブロックとも通信できます。
出力イベント
出力イベントは、Stateflow チャート内で発生するイベントですが、チャート外部の Simulink ブロックで認識されます。このタイプのイベントにより、チャートは、モデル内の他のブロックに対して、チャートで発生したイベントについて通知することが可能になります。たとえば、この例では、出力イベント Sound
および call_police
は、警告音と警察への通報を扱う外部ブロックを操作します。ローカル イベント Alert
がステート Alarm
の Pending
サブステートへの遷移をトリガーすると、チャートはこれらのイベントをブロードキャストします。具体的には、Pending
サブステートで、entry アクションによって Sound
イベントがブロードキャストされます。同様に、Pending
から Idle
への遷移の条件アクションによって call_police
イベントがブロードキャストされます。各ケースで、出力イベントをブロードキャストするアクションで、send
演算子がイベントの名前と共に使用されます。
send(eventName)
各出力イベントはチャートの出力端子にマッピングされます。構成に応じて、対応する信号は Triggered Subsystem または Function-Call Subsystem を制御できます。出力イベントを構成するには次を行います。
[モデル化] タブの [データの設計] で、[[シンボル] ペイン] および [プロパティ インスペクター] を選択します。
[シンボル] ペインで、出力イベントを選択します。
[プロパティ インスペクター] で、[トリガー] を次のいずれかのオプションに設定します。
Either edge
— 出力イベントのブロードキャストによって出力信号が 0 と 1 の間で切り替わります。Function call
— 出力イベントのブロードキャストによって Simulink 関数呼び出しイベントが生じます。
この例では、出力イベントがエッジ トリガーを使用して Simulink モデル内の 1 組のラッチ サブシステムを有効にします。各ラッチがその入力信号の値の変更を検出すると、一時的に 1 の値を出力してから、0 の出力に戻ります。
入力イベント
入力イベントは、Simulink ブロック内で発生するイベントですが、Stateflow チャートで認識されます。このタイプのイベントにより、他の Stateflow チャートを含めた他の Simulink ブロックは、特定のチャートに対してその外部で発生したイベントを通知できるようになります。たとえば、この例では、入力イベント sl_call
は、動作検知器のデバウンサーのタイミングと、警察に通報する前の短い遅延を制御します。各インスタンスにおいて、イベントは時相演算子 after
への呼び出し内で発生し、チャートがイベントを何回か受け取った後に遷移をトリガーします。
外部の Simulink ブロックは、Stateflow チャートのトリガー端子に接続されている信号を通して入力イベントを送信します。構成に応じて、入力イベントは信号値の変化から生じるか、あるいは Simulink ブロックからの関数呼び出しを通して発生します。入力イベントを構成するには次を行います。
[モデル化] タブの [データの設計] で、[[シンボル] ペイン] および [プロパティ インスペクター] を選択します。
[シンボル] ペインで、入力イベントを選択します。
[プロパティ インスペクター] で、[トリガー] を次のいずれかのオプションに設定します。
Rising
— 入力信号が 0 または負の値から正の値に変化すると、チャートがアクティブになります。Falling
— 入力信号が正の値から 0 または負の値に変化すると、チャートがアクティブになります。Either
— 入力信号がどちらかの方向に変化して 0 を横切ると、チャートがアクティブになります。Function
call — Simulink ブロックからの関数呼び出しによってチャートがアクティブになります。
この例では、Simulink Function-Call Generator ブロックが周期的な関数呼び出しを通じて入力イベント sl_call
をトリガーすることにより、セキュリティ システムのタイミングを制御します。
例の確認
この例では、Stateflow チャートには、いくつかの Manual Switch ブロックからの入力と、Display ブロックに接続する 1 組のラッチ サブシステムへの出力があります。シミュレーション時には、以下が可能です。
Switch ブロックをクリックすることにより、アラーム サブシステムとセンサー サブシステムを有効にして侵入検知をトリガーする。
チャート アニメーションでチャート内のさまざまなアクティブ ステートが強調表示されるのを確認する。
Scope ブロックとシミュレーション データ インスペクターで出力信号を表示する。
たとえば、アラーム サブシステムとセンサー サブシステムをオンにし、センサー トリガーをオフにして、シミュレーションを開始するとします。シミュレーション中、以下のアクションを実行します。
時間
秒に、ドア センサーをトリガーします。アラームが鳴り始めるので (
Sound = 1
)、アラーム システムを直ちに無効にします。ドア センサーのトリガーをオフに切り替えてアラームをオンに戻します。時間
秒に、窓センサーをトリガーし、アラームが鳴り始めます (
Sound = 0
)。今回はアラームを無効にしません。時間頃に、セキュリティ システムが警察への通報を行います (
call_police = 1
)。Sound
信号とcall_police
信号は、80 秒ごとに 0 と 1 の切り替えを続けます。時間
秒に、アラームを無効にします。
Sound
信号とcall_police
信号の切り替えが停止します。
シミュレーション データ インスペクターに、アクションに対する Sound
信号と call_police
信号の応答が表示されます。