この記事で扱っていること
- 設定を別のウィンドウで行う方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
フロントパネルはLabVIEWプログラムにおいてユーザーインタフェースとなる部分でそのデザインによって使いやすいプログラムとなるかどうかに大きく影響します。
場合によっては、結果が大きく表示されるようなインタフェースとしてメインのフロントパネルを確保しておき、あまりその他の情報は載せたくない、という要望もあると思います。
とはいえ、例えば何かハードウェアを扱う場合にはそのハードウェアの操作を行う設定も必要になるわけで、結果表示の画面を大きくしつつ設定を行うための画面も用意する、ということに頭を悩ませることがあるかもしれません。
そこで本記事では、メインのVIには結果を大きく表示させて、必要な時にだけ設定の画面を開くようなプログラムの例を紹介しています。
ハードウェアとしては例としてNational Instruments社のDAQハードウェアを想定していますが、考え方さえわかればどのようなハードウェアに対する操作にも応用できます。
どんな結果になるか
メインのVIには、結果を表すグラフと、せっかくなのでFFTの結果を示すグラフも配置しています。
プログラムを実行すると、どのハードウェアを使用するのかやサンプリングレートをどうするかという画面が出てきますが、設定さえ終わればあとはメインVIが動き出します。
メインVIが動き出してからもまた設定を変更したい場合には変更ボタンを押すことで最初と同じ画面が表示されます。
具体的には、プログラムの実行時および左下にある「設定」のボタンを押した場合にだけ、設定用の別ウィンドウが表示されます。
それ以外のときには設定用の画面は表示されないため結果を大きく表示させることができます。
なお、設定画面が出ている状態でもその設定を反映させる前までは、前の設定値での測定が続いています。
本記事のプログラムでは、設定を変えると一度測定自体も終了して新規で測定を始めるようにしています。(設定の変更前後で連続測定が一度途絶える、ということです)
プログラムの構造
全体的な構成は、いわゆる生産者消費者デザインをベースに作っています。
最初の設定を行うためにまずは設定画面を操作するためのパートがあり、そこを抜けたら生産者消費者デザインをベースとしたプログラムに進みます。
生産者消費者のデザインにしているのは、設定中もその設定が終わるまでは測定を続けているようにするためです。
設定を入力させる仕組みはサブVIで実装しています。
この設定用のサブVIは以下のようなフロントパネルをもちます。
右側に、このサブVIの出力(表示器)がありますが、ウィンドウのサイズを調整することでそれら画面に出る必要のない表示器は隠すようにしています。
サブVIのブロックダイアグラムは以下のようにしています。
シフトレジスタを用いているのは、メインのVIの中でこのサブVIを呼び出す際に「前回の設定値はこうだった」という値を残しておくためです。
仕組み上は内側のWhileループについてイベントストラクチャを用いることでキャンセルやOKボタン、プログラム終了ボタンが押されたことを値変更イベントで検出して組むこともできます。
なお、このサブVIは設定を行うための画面として機能する関係上、呼び出されたらフロントパネルを表示するように設定をしておく必要があります。
VIプロパティにその設定画面があるので、以下の図を参考に設定を行っておきます。
メインのVIの生産者ループの方のブロックダイアグラムが以下のようになっています。
イベントストラクチャを使っていて、イベント自体は2つしかありません。
イベントのうち、設定ボタンの値変更イベントでは、先ほども登場したサブVIを使用しています。
このサブVIからのステータス出力の値によって、設定値を変えるのか、キャンセルするのか、プログラム自体を終了するのかが変わります。
次に消費者ループの方ですが、こちらはキューを使用したステートマシンの形をしています。
一部のケースで、自分自身で次のステートを決めるためにエンキューをしていることで、生産者ループとは独立して消費者ループだけでループが回ることができるようになっています。
設定ボタンすら表示させたくない場合
上で紹介したプログラムでは、フロントパネルに設定を開くためのボタンを表示していました。
いやいや、デザイン的に、そんなボタンすら表示させたくないんだ、でも設定を変更したいこともあるんだ、という場合には、ランタイムメニューを作成してやれば対応できますし、こうすることでキーボードのショートカットにも対応できます。
そのためには、ランタイムメニューをカスタマイズする必要があります。
あとは、カスタマイズしたランタイムメニューの項目名で定義した文字列を「メニュー選択(ユーザ)」のイベントで取得、ケースストラクチャでは項目タグの値を用いて、ランタイムメニューにあった処理を実装していきます。
もしショートカットメニューの操作についてもう少し詳しく知りたい、という方は以下の記事が参考になると思います。
本記事では、設定を別のウィンドウで行う方法を紹介しました。
常に表示させておく必要があるわけではないパラメータなどをメインVIのフロントパネルとは別の場所から設定できるようにすることで、メインVIをより使いやすいものにできると思ったら、本記事で紹介したようなプログラムの形も参考にしてみてください。
ここまで読んでいただきありがとうございました。
コメント