イベントが発生するときには必ずイベントストラクチャがイベントを処理することを確認する



LabVIEW 2018ヘルプ


発行年月: 2018年3月
製品番号: 371361R-0112
製品情報を参照

ダウンロード (Windowsのみ)


LabVIEW 2016ヘルプ
LabVIEW 2017ヘルプ
LabVIEW 2018ヘルプ
LabVIEW 2019ヘルプ
LabVIEW 2020ヘルプ

LabVIEWは、VIの実行時または実行が予約されているときにイベントキューを開始します。イベントストラクチャは、データフローがストラクチャの実行を許可しているときに、キューで待機中のイベントを処理します。このため、LabVIEWは、イベントストラクチャがイベントを処理しようと待機していなくても、イベントを生成することができます。

LabVIEWはVIが実行中の全期間を通じてイベントをキューに入れるので、データフローによりイベントストラクチャの実行が完了した後もイベントをキューに入れることができます。たとえば、VIの実行が続行中にイベントストラクチャが終了する場合があります。キューに入ったイベントがすべて処理されるように、イベントストラクチャの実行が停止したら、すぐにVIの実行が停止するように設計してください。

注意  イベントを処理するイベントストラクチャがなく、フロントパネルのロックが有効になっている場合、VIのユーザインタフェースは応答しなくなります。この現象が発生した場合、停止ボタンをクリックしてVIを停止します。イベントストラクチャを右クリックして、イベントを編集ダイアログボックスのこのイベントのイベントケースが完了するまでフロントパネルをロックチェックボックスをオフにして、フロントパネルのロックを無効にすることができます。 フィルタイベントではフロントパネルのロックをオフにすることはできません。

イベントストラクチャがすべてのイベントを処理するWhileループを使用する

Whileループの中に、イベントが発生しなくなると終端するイベントストラクチャを配置します。たとえば、以下のブロックダイアグラムでは、イベントストラクチャはWhileループの外側にあり、数値の値変更のケースに対してフロントパネルのロックが有効に設定されています。



数値定数の値を変更するとイベントが発生します。イベントストラクチャは1度実行し、値変更イベントを処理します。数値制御器の値を再度変更すると、別のイベントが発生してフロントパネルのロックが有効になるためユーザインタフェースがロックします。イベントストラクチャは既に1回実行され、Whileループの内側にないために2番目のイベントを処理するために再度実行することができません。停止ブール制御器をクリックしてWhileループとVIを停止しようとすると、ブロックダイアグラムで2番目のイベントがまだ処理されていないためVIは停止することができず、ブロックダイアグラムでそのイベントが処理されるまで停止ブール制御器をクリックしてもそのイベントは処理されません。このような現象を回避するには、イベントストラクチャをWhileループの内側に配置します。

イベントストラクチャがイベントを処理するタイミングをケースストラクチャで決定しない

ケースストラクチャの中にイベントストラクチャを配置しないようにします。たとえば、以下のブロックダイアグラムでは、イベントストラクチャがWhileループの内側にあり、数値の値変更のケースに対してフロントパネルのロックが有効に設定されています。



値を取得制御器をクリックすると、フロントパネルが無限にロックします。ケースストラクチャに配線されているFALSEブール定数によって、イベントストラクチャはTrueケース内のイベントを処理することができません。イベントのパネルがロックされているため、フロントパネルはイベントストラクチャを待機しますが、データフローはイベントストラクチャがイベント処理を実行できないようになっています。このアプリケーションのフロントパネルのロックを解除して値を取得制御器をクリックすると、フロントパネルが応答するようになり、ストップボタンを押すと完了します。しかし、イベントストラクチャまだイベント処理を実行できないため、数値は増分しません。



この記事は役に立ちましたか。

役に立たなかった