LabVIEWでの条件分岐(if文)の表現の仕方は、pythonなどの文字で書くプログラムとは大きく異なるため、慣れていないと使い方がわかりにくい面があります。
このページでは、LabVIEWにおいて条件分岐を表現する「ケースストラクチャ」の使い方と、使う際の注意点について説明し、上記の悩みにお答えします。
ケースストラクチャとは
ケースストラクチャはテキスト系プログラムにおける「IF,else」処理と同じ条件分岐を行うためのLabVIEWの機能です。ケースストラクチャは、指定した分岐条件に従ってストラクチャの中に記述した動作を行う機能を持ちます。
具体的には、指定した条件に従って、ある場合はある処理を行い、別の条件では別の処理を行わせることができます。

上記は、ケースストラクチャのブロックダイアグラムです。ケースストラクチャには、必ず複数のケースに対する動作内容が記載されています。例えば、条件がTrueの場合に行う動作と、条件がFalseの場合に行う動作です。
セレクタラベル
ケースストラクチャの上端にある「True」と書かれた場所がセレクタラベル(Selector label)です。図1で表示されているのは、条件がTrueの場合に実施する場合の内容にあたります(図1ではケースストラクチャに何も記載していないので、何も実行しないということになります)。

各ケースのどれを表示させるかはセレクタラベルをクリックして選ぶことができます。選び方は2通りです。
- セレクタラベルの左右の三角をクリックすると、表示するケースを変更できます
- ケース名の横の下三角をクリックすると、ケースのリストが表示されるのでそこから選択することができます
ケースセレクタ
ケースストラクチャの左端にある緑の「?」はケースセレクタ(case selector)です。
どのケースを実行するかを決める条件をケースセレクタに配線します。ケースセレクタには、ブーリアンのほか、整数、文字列、リスト型データを配線できます。
例えばブーリアンの場合はTrueかFalseを入力し、ケース数は2種類になります。もちろん、ケースストラクチャの中に、ケースストラクチャを設ければ、複数の分岐を実現できます。テキスト系プログラムにおける「If / else if / else」のようなイメージです。
一方、整数や文字列、リスト型の場合は、ケース数に制限はありません。3択、4択のような分岐処理が可能です。
以下で具体的な例を用いて詳細を説明していきます。
ケースセレクタを用いたVIの例:ブーリアンを用いた分岐
下の図に示すのはケースストラクチャを用いて制御器に入力した数値の絶対値を計算するVIです。
入力値に対して絶対値を出力する機能はLabVIEWにデフォルトで実装されているのですが、ケースストラクチャの理解のため、ここでは同じ機能を自作しました。

ケースストラクチャがTrueの場合と、Falseの場合を表示させています。上述のとおり、True とFalseの表示の切り替えは、セレクタラベルの下向き三角や、左右の三角形をクリックすると切り替えることができます。
ケースストラクチャの「?」で示されたケースセレクタには、制御器の数値が0以上かどうかのブーリアンが入力されています。つまり、制御器の数値が0以上であればケースセレクタのTrue側に記載された内容が実行されます。Trueの場合は、制御器の値がそのまま出力されます。逆に制御器の数値が0より小さければケースセレクタのFalse側に記載された内容が実行されます。この場合は、値に-1を乗することで符号反転させてます。
このようなブーリアンを用いた条件分岐が最もよく使われる方式です。
ケースセレクタを用いたVIの例:リングメニューを用いた分岐
下の図図に示すのはリングメニューで選択した値に応じて、円の円周もしくは面積どちらを計算するかを選択できるVIです。

図4はケースセレクタへの入力が”0″の場合、図3は”1″の場合を表示させています。

図6はリングメニューのプロパティを表示させたものです。ケースセレクタに入力されるリングメニュー は図6のように、”0”を「円周(m)」、”1″を「面積(m^2)」としています。
リングメニュー の値はフロントパネルのリングメニューをクリックすることで選択できます。
このように、ユーザーがリングメニューから「行いたい動作を選択」して、それに基づいて処理を行うようなVIを実現できます。
ケースストラクチャの作り方
ここでは絶対値を計算するVIを例に、ケースストラクチャの作り方を説明します。

ブロックダイアグラム上で右クリックし制御器パレットを表示させて、Structuresにマウスカーソルを置きます。Structuresのアイコンが複数表示されるので、Case Structureアイコンの上でクリックして選択します。
ブロックダイアグラム上で条件分岐したい部分を囲むように選択枠をドラッグします。マウスボタンを離すと、選択した部分がケースストラクチャで囲まれます。ここでは何もない場所をドラッグして選択しています。

次に、ケースストラクチャのケースセレクタに分岐の条件を入力します。ここでは「入力値が0以上か否か」を表すブーリアンをワイヤで接続しています。
さらに、制御器からケースストラクチャに入力するようにワイヤをつなぎます。この例では、Trueの場合は入力値をそのまま出力すればよいので、ケースストラクチャへの入力端子をそのまま表示器にワイヤをつなぎます。
この状態ではケースストラクチャの出力側の端子は中抜きの□になっていることに注目してください。これはケースストラクチャのTrueの場合の出力しか定義されておらず、Falseの場合の出力値が定義されないためエラーになっている状態です。よって、Falseの場合の出力値を定義する(どのような値を出力するのか値を端子につなぐ)必要があります。

ケースストラクチャ上端のセレクタラベルをクリックしてFalseを選び、Falseの場合を表示させます。
Falseの場合を表示させて、ケースストラクチャ内にFalseの処理を記載します。ここでは、制御器の値が負の場合の処理なので、値に-1を乗じて絶対値となるようにしています。
Falseの場合のケースストラクチャの出漁端子を接続すると、端子が塗りつぶしの■になっておりエラーが解除されています。
このように、ケースストラクチャをブロックダイアグラムに作り、分岐条件を接続し、各ケースの処理をすべて記載することでケースストラクチャを完成させることができます。
ケースストラクチャを使う際の注意点
上でも述べたように、ケースストラクチャを使う上での注意点は、ケースストラクチャからの出力端子はすべてのケースで配線する必要があることです。
例えば、「ケース1は出力端子がつながっているが、ケース2はつながっていない」となるとエラーになります。端子が中抜き□表示になり、動作ボタンにヒビが入っているエラー表示になります。
なお、ケースストラクチャへの入力端子はすべてのケースでつなぐ必要はありません。
例えば、「ケースストラクチャの入力端子がケース1ではケースストラクチャ内でつながっているが、ケース2ではつながっていない」状態は問題ありません。
まとめ
このページでは、ケースストラクチャの使い方と注意点について説明しました。
- ケースストラクチャは、指定した分岐条件に従ってストラクチャの中に記述した動作を行う
- 各ケースのどれを表示させるかはセレクタラベルをクリックして選ぶ
- どのケースを実行するかを決める分岐条件をケースセレクタに配線する
- ケースストラクチャからの出力端子はすべてのケースで配線する必要がある
コメント