この記事で扱っていること
- メインviのイベントをサブviで検出する方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWでプログラムを書く際に、無駄に処理を進めない、いわゆるポーリング処理を避けるための方法として、イベントストラクチャを使うという手があります。
多くの場合、イベントストラクチャはメイン(トップレベル)VIにて、ユーザーの操作を待つ、という役割となりますが、場合によってはメインVIの方は自動的に処理が進むようになっていて、サブVIの方でイベント検出を行いたい場合があります。
単にサブVI上のフロントパネルの制御器の値変更をイベント検出するのではなく、メインVIのフロントパネルの制御器の値変更をサブVIの方のイベントストラクチャで検出する方法はいくつかありますが、今回はそのうちの一つとしてリファレンスを使用する方法を紹介します。
どんな結果になるか
簡単のためにメインVIとサブVIは以下のようにしていて、メインVI側で押したブールのボタンおよび数値と同じ値がサブVIに表示されるような場合を例にとります。

プログラムを実行し、メインVI側で操作した結果がサブVIの方に反映されていることがわかります。

プログラムの構造
メインVIの方からサブVIを呼び出しているわけですが、サブVIに対して、「メインVIでイベントを発生させる対象の制御器」のリファレンスを渡してやります。

サブVIではこれを受け取り、それぞれのリファレンスをイベント登録、イベントストラクチャのダイナミックイベント端子にイベント登録のリファレンスを渡すことで、ダイナミックイベントに対するイベントを定義できるので、ここでイベントデータノードから変更後の値を取得しています。

イベント登録の注意点
上で紹介したプログラムのような、ダイナミックイベントの登録は慣れていないと難しいかもしれません。
イベントの対象となる制御器のリファレンスをイベント登録の関数に渡すだけですが、そもそもその関数はどこ?という方もいると思います。
この関数は、ダイアログ&ユーザインタフェースの中のイベントパレットにあります。

また、このイベント登録のリファレンスをイベントストラクチャに渡す必要がありますが、デフォルトではイベントストラクチャ側にそのための端子が表示されていません。
ダイナミックイベント端子を表示するにはイベントストラクチャで右クリックしてこれを表示するように選ぶ必要がありますが、LabVIEWのバージョンによってこの選択肢がどこに表示されるか変わることがあります。
下の図ではLabVIEW 2026を使用した場合の例で、表示項目の中の1項目としてダイナミックイベント端子が表れますが、これより古いLabVIEWバージョンの場合には、表示項目の下ではなく右クリックして出てくる最初のメニューの中に表示されます。

イベント登録してそのリファレンスをダイナミックイベント端子に渡したら、イベントの編集に移って「ダイナミック」のイベントを追加します。
ここで選べる具体的なイベントは、ブロックダイアグラム上でイベント登録の関数で指定したイベント(下の図では「値変更」)しか選べないので注意します。
本記事では、メインviのイベントをサブviで検出する方法を紹介しました。
今回紹介した方法以外だと、他にユーザーイベントを定義して使用する方法がありますが、メインVI側から、対象となる制御器のリファレンスを渡すか、ユーザーイベントのリファレンスを渡すかの違いはあるもののやれることはおおよそ似ていて、今回紹介した方法が手軽です。
あまりやり方が紹介された資料などなかったので今回紹介してみました。参考になればうれしいです。
ここまで読んでいただきありがとうございました。

コメント