LabVIEWでプログラムを書くときの強みの一つは、ユーザーインタフェースであるフロントパネルをドラッグアンドドロップの操作だけで簡単に構築することができることだと思います。
本ブログのまずこれのシリーズでは主にプログラムのアルゴリズムの部分の書き方について解説してきましたが、アルゴリズムを知っているだけではプログラムは書けず、どのような選択肢があるかということも知っておく必要があります。
この記事では、選択肢をユーザーに与える制御器類について紹介します。
ユーザーに選択を促す制御器について
プログラムに何か値を与えるのがLabVIEWにおける制御器の役割ですが、一からテキスト情報を入力させる文字列制御器のようなものとは異なり、あらかじめ選択肢が表示されていてユーザーがその中から選ぶ、というタイプの制御器がいくつかあります。
今回の記事で扱うのは、
- 列挙体
- テキストリング、メニューリング
- コンボボックス
です。
これらは見た目がそれぞれ違うものの、どれもフロントパネル上に選択肢を表示していてユーザーがプログラム実行時にその中から選ぶことでプログラムに入力値を与えるタイプの制御器になっています。
プログラムを使用するユーザーからしてみると違いはあまりないのですが、プログラムを作るうえではブロックダイアグラム上での使い方が異なるので、注意する必要があります。
以下、それぞれの使い方について紹介します。
列挙体について
まずは列挙体です。読んで字のごとく、項目を列挙している制御器で、ステートマシンの構成要素ともなっています。
プログラムを作るうえでの使い方としては、右クリックして表示される「プロパティ」としての設定によって項目を与えます。
この操作自体はテキストリングやコンボボックスなどでも同様な操作をしますが、列挙体の場合プログラムを実行中に項目を追加、削除することができず、右クリックして表示するプロパティのメニューからの追加、削除が唯一の方法になります。
編集の仕方について念のため。列挙体でもリングテキストでもコンボボックスでもどれも同じで、以下のようにそれらのオブジェクトをフロントパネルにおいてから右クリックしてプロパティを選択します。
プロパティの中の「項目を編集」で項目名を挿入して編集していきます。
ここで一度項目名を決めた場合にはプログラムを実行していない状態で編集することでしか項目をいじれません。
また、ブロックダイアグラム上では数値データタイプとして扱われます(そのためブロックダイアグラムの関数パレットでも列挙体定数は数値パレットにあります)。
文字列の情報ではないことに注意する必要があります。あまりする機会はないかもしれませんが、四則演算の関数につなげることができます。
列挙体の使われ方としては、ケースストラクチャのセレクタ端子に配線して各ケースを分ける際に、テキスト情報として条件分岐を見やすくするために使用するパターンが多いと思います。
下の図のように、「すべての値にケースを追加」とすると列挙体自身の数値ではなく列挙体の中の項目名が各ケースとなります。
ただし、項目名としてはテキストで記載されていても内部処理的には数値の扱いであり、タイプ定義していない列挙体を扱っていて一部の列挙体のみを項目編集した場合、ケースストラクチャのセレクタラベルには数値が表示されるようになってしまうので注意が必要です。
テキストリング、メニューリング
続いてテキストリングやメニューリングです。これら二つはどちらも使い方は同じで、見た目の好みで選べばいいと思います。
フロントパネルの表示では、テキストがそのまま表れてクリックすると項目を選べる点は列挙体と変わりません。そして、ブロックダイアグラム上で数値として扱われる点も同じです。
が、列挙体は上から順に0、1、2という数値になっていたのに対して、テキストリングやメニューリングは上から順に数値が決まっているわけではなく、各項目に対して任意の数値を紐づけることができます。
こちらも数値として扱われるので数値表示器をつけることができます。
列挙体とは異なりプログラム的に項目と数値を紐づけることができます。
以下の図にある「文字列と値[]」プロパティを使用していきます。
書き込みに設定したプロパティノードに対して項目名と数値のペアを入力していきます。
ただし列挙体と異なり、ケースストラクチャに配線しても自動的にケースの名前とはなりません。そのためもし列挙体と併用して使用する場合には数値でケースを分けることになります。
例えばあらかじめヘッダ名が分かっていないファイルがあったとして、そのファイルから読み出したヘッダの情報をプログラム的にリングメニューに表示させ、ヘッダの名称で参照するデータを変える、といったことができます。
コンボボックス
最後はコンボボックスです。
こちらも項目の編集の仕方は上二つと同様、基本的にはプロパティから「項目を編集」で行えます。
これまでに紹介したものとは異なり、ブロックダイアグラム上では文字列として扱われます。
また、項目に無い文字列も入力して出力させることができます。この場合、入力した文字列がそのまま出力されることになります。
デフォルトでは選択した項目の名前をそのまま出力されることになりますが、選択した項目と出力する項目を異なる文字列にすることもできます。(このモードにした状態で、項目名として登録していない項目を入力したとしても、その入力文字列と同じ文字列が出力されます)
プログラム的に項目名とこれに紐づける文字列のペアを指定して編集することができます。テキストリングやメニューリングと同じノリです。
なお、ケースストラクチャをつなげた場合は、通常の文字列をつなげたとき同様なので、ケースストラクチャのセレクタラベルに表示する項目名は手入力で入れる必要があります。
あくまで項目名が文字として自動的にケースストラクチャに登録されるのは列挙体だけ、です。
3つの制御器の違いのまとめ
3つの制御器を大まかに分けると以下のように区別できます。
- 列挙体・・・項目をプログラム的に編集できない。ケースストラクチャに配線すると項目名がそのままケースの名前になる。ブロックダイアグラム上では数値として扱われる
- テキストリング、メニューリング・・・項目をプログラム的に変更可能。フロントパネル上での操作感は列挙体と同じ。ブロックダイアグラム上では数値として扱われる。
- コンボボックス・・・フロントパネル上でメニューの書き換えが可能。項目をプログラム的に変更可能。ブロックダイアグラム上では文字列として扱われる。
どれも使い方が微妙に異なり、どれを使うべきかはどのようなプログラムにしたいかでおのずと決まってきます。
使い分けをどのようにするか悩んだ時に本記事の内容が参考になればうれしいです。
ここまで読んでいただきありがとうございました。
コメント