イベントが発生するときには必ずイベントストラクチャがイベントを処理することを確認する
- 更新日2025-08-27
- 4分で読める
LabVIEWは、VIの実行時または実行が予約されているときにイベントキューを開始します。イベントストラクチャは、データフローがストラクチャの実行を許可しているときに、キューで待機中のイベントを処理します。このため、LabVIEWは、イベントストラクチャがイベントを処理しようと待機していなくても、イベントを生成することができます。
LabVIEWはVIが実行中の全期間を通じてイベントをキューに入れるので、データフローによりイベントストラクチャの実行が完了した後もイベントをキューに入れることができます。たとえば、VIの実行が続行中にイベントストラクチャが終了する場合があります。キューに入ったイベントがすべて処理されるように、イベントストラクチャの実行が停止したら、すぐにVIの実行が停止するように設計してください。
イベントストラクチャがすべてのイベントを処理するWhileループを使用する
Whileループの中に、イベントが発生しなくなると終端するイベントストラクチャを配置します。たとえば、以下のブロックダイアグラムでは、イベントストラクチャはWhileループの外側にあり、数値の値変更のケースに対してフロントパネルのロックが有効に設定されています。
数値定数の値を変更するとイベントが発生します。イベントストラクチャは1度実行し、値変更イベントを処理します。数値制御器の値を再度変更すると、別のイベントが発生してフロントパネルのロックが有効になるためユーザインタフェースがロックします。イベントストラクチャは既に1回実行され、Whileループの内側にないために2番目のイベントを処理するために再度実行することができません。停止ブール制御器をクリックしてWhileループとVIを停止しようとすると、ブロックダイアグラムで2番目のイベントがまだ処理されていないためVIは停止することができず、ブロックダイアグラムでそのイベントが処理されるまで停止ブール制御器をクリックしてもそのイベントは処理されません。このような現象を回避するには、イベントストラクチャをWhileループの内側に配置します。
イベントストラクチャがイベントを処理するタイミングをケースストラクチャで決定しない
ケースストラクチャの中にイベントストラクチャを配置しないようにします。たとえば、以下のブロックダイアグラムでは、イベントストラクチャがWhileループの内側にあり、数値の値変更のケースに対してフロントパネルのロックが有効に設定されています。
値を取得制御器をクリックすると、フロントパネルが無限にロックします。ケースストラクチャに配線されているFALSEブール定数によって、イベントストラクチャはTrueケース内のイベントを処理することができません。イベントのパネルがロックされているため、フロントパネルはイベントストラクチャを待機しますが、データフローはイベントストラクチャがイベント処理を実行できないようになっています。このアプリケーションのフロントパネルのロックを解除して値を取得制御器をクリックすると、フロントパネルが応答するようになり、ストップボタンを押すと完了します。しかし、イベントストラクチャまだイベント処理を実行できないため、数値は増分しません。