このページでは、LabVIEWでの繰り返し処理であるForループとWhileループについて説明します。
ForループとWhileループの使い分け
ForループとWhileループの具体的な使い方を説明する前に、両者の使い分けを説明します。
Forループは、ある動作を繰り返す回数が決まっているときに使います。
例えば、機器と通信して100回データを読み込む場合。
例えば、あるパラメータを1から10まで変える場合などです。
Whileループは、指定した条件を満たすまである動作を繰り返すときに使います。
例えば、通信した機器がエラーを出すまで処理を繰り返す場合。
例えば、機器から読み出した値がある値以上になった場合まで繰り返す場合などです。
なお、ForループはWhileループで代用できる場合もあります。例えば「ある動作を10回繰り返す」ことを、「繰り返し回数が10回を超えるまで繰り返す」と読み替えればWhileループで記述することも可能です。
上記の例ように、「ある実現したいこと」を記述するには複数の方法があります。しかし良いVI(VIとはLabVIEWのプログラムのこと)を作るという意味では、よりシンプルなものにするのが適切です。ほかのエンジニアが理解しやすいプログラムを作るほうが、中身の理解や修正に適しているからです。
つまり、繰り返す回数が決まっているときはForループ、そうでないときはWhileループを使うのが適切だと考えます。
では以下で、ForループとWhileループの詳細について説明します。
Forループ
Forループは、指定した回数(N回)だけForループの中にある動作を繰り返す機能を持ちます。

上記は、Forループのブロックダイアグラムです。左上の「N」がループカウントであり、ここに繰り返し回数を入力します。
左下の「i」はループイタレーションであり、現在が何回目の繰り返しであるかの値を出力します。ループイタレーションは0から1ずつ増えていきます。1から始まるのではないことに注意が必要です。具体的には、i=0、i=1、i=2、、、と繰り返し、i = N-1(N回目)にループ内の動作を行った後、ループが終了します。
例として、下図は「乱数を10回表示したあと終了するVI」です。

Forループの作り方
ブロックダイアグラム上で右クリックし制御器パレットを表示させて、Structuresにマウスカーソルを置きます。Structuresのアイコンが複数表示されるので、For Loopループアイコンの上でクリックして選択します。

ブロックダイアグラムで繰り返し実行したい部分を囲むように選択枠をドラッグします。マウスボタンを離すと、選択した部分がForループで囲まれます。
左上の「N」がループカウントの左端にマウスカーソルを置くと、カーソルがボビン形状に変化するので、その状態で右クリックし、Create Constantを選んで定数を入れます。
これでForループの完成です。
作ったループの中にオブジェクトを追加するには、Forループの中にアイコンをドラックアンドドロップすればOKです。
回数の指定方法
Forループで大切なことは、必ず繰り返し回数を指定する必要があることです。回数を指定しなければエラーになります。回数を指定していない図1の状態では動作ボタンにヒビが入っており、エラー状態になっていることを示しています。
繰り返し回数の指定方法は大きく分けて2種類あります。
- ループカウントに整数を入力して指定する方法
- 上記の例で行ったやり方で、最も一般的な方法です。入力した整数値がループの回数となります。
- 配列をForループに入力する
- 下図のように配列をForループに入力します。配列の要素数の回数だけ、Forループを繰り返すようになります。下図の場合、要素数4の1次元配列を入力しているので、ループを4回繰り返します。
- この場合は、ループカウントに数値を入力しなくてもエラーになりません。むしろ、ループカウントに数値を入力するとエラーが発生します。
- ループの各処理において配列の値を利用する場合に、このループ回数の指定方法は便利です。
- ここで、配列から出たワイヤがForループに入る場所(トンネルと呼びます)の形が四角の中に角括弧がある状態(自動指標付けトンネル、Auto-indexed tunnel)にする必要があります。
- ※トンネルについては別の記事で紹介します。

Whileループ
Whileループは、ある条件を満たすまでWhileループの中にある動作を繰り返す機能を持ちます。

上記は、Whileループのブロックダイアグラムです。右下の緑色の四角の中に赤丸があるアイコンががループコンディションであり、ここにループの停止条件(もしくは継続条件)を入力します。具体的にはブーリアンを入力します。Trueで終了にするか、Falseで終了にするか指定できる。
ループコンディションにエラークラスタを接続すると、エラーの有無の情報のみが渡されて、エラーの場合停止もしくはエラーの場合継続するようにもできます。
左下の「i」はループイタレーションであり、現在が何回目の繰り返しであるかの値を出力します。Forループの場合と同様に、ループイタレーションは0から1ずつ増えていきます。1から始まるのではないことに注意が必要です。
例として、下図は「フロントパネルのSTOPボタンを押すまで乱数を表示し続けるVI」です。STOPを押すとFalseがループコンディションに入力されて、Whieループが終了します。

Whileループの作り方
基本的には、Forループの作り方と同じです。
ブロックダイアグラム上で右クリックし制御器パレットを表示させて、Structuresにマウスカーソルを置きます。Structuresのアイコンが複数表示されるので、While Loopループアイコンの上でクリックして選択します。

ブロックダイアグラムで繰り返し実行したい部分を囲むように選択枠をドラッグします。マウスボタンを離すと、選択した部分がWhileループで囲まれます。
右下の赤丸のループコンディションアイコンの左端にマウスカーソルを置くと、カーソルがボビン形状に変化するので、その状態で右クリックし、Create Controlを選び、制御器(この場合はSTOPボタン)を設置します。
これでWhileループの完成です。
作ったループの中にオブジェクトを追加するにはWhileループの中にアイコンをドラックアンドドロップすればOKです。

STOPボタンを押して停止するのではなく、ある条件でWhieループを終了するように設定することもできます。上図は、乱数値が0.5以上となった場合にWhieループを終了するようにしたものです。
条件を満たすときに停止するのか、継続するのかの切り替え
上の例では「指定した条件でWhieループを終了する」ように指定していましたが、逆に「指定した条件を満たしている場合はWhieループ継続し、満たさなくなったら終了する」という設定にすることもできます。

右下のループコンディションアイコンの上で右クリックし、「Continue if true」を選ぶと、「指定した条件を満たしている場合はWhieループ継続し、満たさなくなったら終了する」ようになります。この時、ループコンディションアイコンが緑色の円形の矢印に変化します。
Whileループの無限ループ回避
Whieループで大切なことは、ループの終了条件を必ず指定することです。条件を指定しなければエラーになります。回数を指定していない図7の状態では動作ボタンにヒビが入っており、エラー状態になっていることを示しています。
Whileループでもう一つ気を付ける点は、エラーは出ないけど無限ループになっている場合があることです。
- 停止条件をWhileループの外に置く
- ループを停止するにはループ中に停止条件を設ける必要があります。ループを繰り替えている間はループの外の値を読みださないので、ループが止まらなくなります。

上記の例では、STOPボタンがWhieループの外側にあります。ループ内の動作(この場合は乱数を表示する)している間は、STOPボタンの値(ボタンが押された=Trueか、押されていない=False)を読み出すことがないので、STOPボタンを押してもWhieループは停止しません。
STOPボタンはWhieループの中に設ける必要があります。
2.停止条件を満たすことが決してない
停止条件が決してTrueにならないような設定だと無限ループになります。

上の例は、乱数値が2以上で停止するような設定になっています。しかし、乱数値は0~1の間の数値しかとらないため決して条件を満たすことはありません。その結果、無限ループとなってしまいます。
まとめ
このページでは、LabVIEWでの繰り返し処理であるForループとWhileループについて説明しました。
- 繰り返す回数が決まっているときはForループ、そうでないときはWhileループを使う。
- Forループは、指定した回数だけForループの中にある動作を繰り返す
- Forループでは必ず繰り返し回数を指定する必要がある
- Whileループは、ある条件を満たすまでWhileループの中にある動作を繰り返す
- Whieループでは、ループの終了条件を必ず指定する必要がある
- Whileループでは、無限ループにならないように注意が必要
- ForループでもWhileループでも、ループイタレーションは0から1ずつ増えていく。1から始まるのではないことに注意。
コメント