LabVIEWの実行ストラクチャ

本ページの内容

実行ストラクチャにはグラフィカルコードの部分が含まれており、そのコードがいつどのように実行されるかを制御します。最も一般的なのはWhileループ、Forループ、ケースストラクチャで、コードの同じ部分を複数回実行するようにしたり、一定の条件に基づきコードの異なる部分を実行するように設定できます。

 

ビデオ: LabVIEWでループを作成する

Whileループ

図1に示すWhileループは、テキストベースのプログラミング言語におけるDo LoopやRepeat-Until Loopと同様に、特定の条件に達するまで内部に含まれるコードを実行します。

(1) LabVIEWのWhileループ  |  (2) フローチャート  |  (3) 擬似コード

図1 LabVIEWのWhileループ、Whileループと同じ機能のフローチャート、そしてWhileループの機能の擬似コード例を示しています。

Whileループは、ストラクチャパレットにあります。パレットからWhileループを選択して、カーソルを使用して、ダイアグラムで繰り返し実行したい部分を囲むように選択枠をドラッグします。マウスボタンを離すと、選択した部分がWhileループで囲まれます。

ブロックダイアグラムオブジェクトをWhileループに追加するには、Whileループにオブジェクトをドラッグアンドドロップします。

Whileループは、入力端子である条件端子が特定のブール値を受け取るまで、中身のコードを実行します。

また、Whileループの条件端子を使用して基本的なエラー処理を実行することも可能です。エラークラスタを条件端子に配線すると、エラークラスタのステータスパラメータのTRUEまたはFALSE値のみが端子に渡されます。また、ショートカットメニューの「TRUEの場合停止」と「TRUEの場合継続」は、「エラーの場合停止」と「エラーの場合継続」に変わります。


反復端子には、実行された反復の回数が表示されます。

Whileループの反復カウントは、常に0から始まります。

メモ: Whileループは、必ず1回以上実行されます。

無限ループ

無限ループは、ループが停止しないというよくあるプログラミングミスです。

条件端子が「TRUEの場合停止」の場合、ブール制御器の端子をWhileループの外に配置します。ループの開始時に制御器がFALSEの場合、ループは無限になります。

図2. ブール制御器をWhileループの外に配置

制御器の値はループの開始前に一度読み取られるだけなので、その値を変更しても無限ループは停止しません。制御器を使用してWhileループを停止させるには、制御器端子をループの中に入れなければなりません。無限ループを停止させるには、ツールバーにある「実行を中断」ボタンをクリックして、VIを中断する必要があります。

図3で、Whileループは「乱数」関数の出力が10.00以上になり、「有効」制御器がTRUEになるまで実行します。「And」関数は、両方の入力がTRUEになった場合のみTRUEを返します。それ以外は全てFALSEになります。

図3で、「乱数」関数は決して10.0以上の値を生成しないため、ループは無限になります。

図3. 無限ループ

ストラクチャトンネル

トンネルは、ストラクチャにデータを出し入れするためのものです。トンネルはWhileループの境界上に塗りつぶされた四角として表示されます。この四角の色はトンネルに配線されたデータタイプの色と同じです。ループの終了後、データはループの外へ渡されます。逆にトンネルを経由してデータをループに渡す場合、そのループは、データがそのトンネルに到着してから実行されます。

図4で、反復端子はトンネルに接続されています。トンネルの値は、Whileループの実行が完了するまで反復表示器へ渡されません。

図4. Whileループトンネル

反復端子の最新の値のみが「反復」表示器に表示されます。

Forループ

released with niBCVideo v1.1

ビデオ: LabVIEWでForループを使用する

Forループは、サブダイアグラムを指定された回数実行します。図5は、LabVIEWのForループ、Forループと同じ機能のフローチャート、そしてForループの機能の擬似コード例を示しています。

(1) LabVIEWのForループ  |  (2) フローチャート  |  (3) 擬似コード

図5. Forループ

Forループは、ストラクチャパレットにあります。また、Whileループをブロックダイアグラムに配置して、Whileループの枠を右クリックし、ショートカットメニューから「Forループと置換」を選択すると、WhileループをForループに置き換えることができます。


カウント端子は、サブダイアグラムの反復回数を示す値の入力端子です。


反復端子には、実行された反復の回数が表示されます。

Forループの反復端子は、常に0から始まります。

Forループは、設定された回数を実行するところがWhileループと異なります。Whileループは、条件端子に値が場合のみ実行を停止します。

図6のForループは、乱数を100秒間にわたって毎秒1個生成し、その乱数を数値表示器に表示します。

図6. Forループの例

ループにタイミングを追加する

ループの反復が終了したら、停止条件を満たさない限り、直ちに次の反復の実行が開始します。多くの場合、反復の周波数やタイミングを制御する必要があります。例えばデータを10秒ごとに集録したい場合、ループの反復が10秒ごとに実行されるようタイミングをとる何らかの方法が必要です。特定の周波数で実行する必要がなくても、ユーザインタフェースへの応答など、他のタスクを実行する時間をプロセッサに与える必要があります。

「待機」関数

「待機」関数をループ内に入れると、一定の時間VIをスリープ状態にすることができます。そうすることで、その待機時間内にプロセッサは他のタスクを実行することが可能となります。「待機」関数はオペレーティングシステムのミリ秒クロックを使用します。


下図の「待機(ms)」関数は、ミリ秒カウンタが指定された入力に等しい時間をカウントするまで待機します。この関数を使用すると、ループの実行レートがユーザが入力した値以上になります。

ケースストラクチャ

released with niBCVideo v1.1

ビデオ: LabVIEWでケースストラクチャを使用する


ケースストラクチャには、複数のダイアグラム(ケース)が含まれています。

サブダイアグラムは一度に1つしか表示されず、ストラクチャは一度に1つのケースしか実行されません。入力値によって、どのサブダイアグラムが実行されるかが決まります。ケースストラクチャは、テキストベースのプログラミング言語におけるスイッチステートメントまたはif...then...elseステートメントに似ていま���。


ケースストラクチャの上部にあるケースセレクタラベルの中央には、ケースに対応するセレクタ値の名前があり、その両側に減分矢印と増分矢印があります。

増分/減分矢印をクリックすると、使用可能なケース間をスクロールできます。また、ケース名の横にある下矢印をクリックすると、プルダウンメニューからケースを選択することができます。


どのケースを実行するかを決定するセレクタ端子に入力値(セレクタ)を配線します。

セレクタ端子には、整数、ブール値、文字列、または列挙タイプの値を配線する必要があります。セレクタ端子は、ケースストラクチャの左側の枠上の任意の場所に配置できます。セレクタ端子のデータタイプがブールの場合、ストラクチャにはTRUEケースとFALSEケースがあります。セレクタ端子の値が整数、文字列、または列挙タイプの場合、ケース数には制限がありません。

メモ: デフォルトでは、セレクタ端子に書き込む文字列値は大文字と小文字が区別されます。大文字小文字を区別しないようにするには、セレクタ端子に文字列値を配線し、ケースストラクチャの枠を右クリックして、ショートカットメニューから「大/小文字を区別しない」を選択します。

ケースストラクチャで範囲外の値を処理するためのデフォルト値を指定していない場合は、全ての可能な入力値を明示的にリストする必要があります。例えば、セレクタが整数で1、2、3のケースを指定する場合、入力値が4など指定されていない整数値の際に実行するデフォルトケースを指定する必要があります。

メモ: ブール制御器をセレクタに接続している場合は、デフォルトケースを指定できません。ケースセレクタのラベルを右クリックしても、ショートカットメニューに「このケースをデフォルトにする」は表示されません。ブール制御器をTRUEまたはFALSEにして、実行するケースを指定します。

ケースストラクチャの枠を右クリックすると、ケースの追加、複製、削除、整列などのほか、デフォルトケースの選択もできます。

ケースを選択する

図7は、ケースストラクチャを使用して、ユーザが温度単位に℃か゚Fのどちらを選択するかによって異なるコードを実行するVIを示しています。上のブロックダイアグラムでは、前景にTRUEケースが表示されています。中央のブロックダイアグラムでは、FALSEケースが選択されています。ケースを選択するには、ケースセレクタの識別子に値を入力するか、ラベリングツールを使用して値を編集します。別のケースを選択すると、図7の下のブロックダイアグラムに示すように、ケースがブロックダイアグラムに表示されます。

図7. ケースストラクチャのケースビューを変更する

セレクタ端子に配線されたオブジェクトとして同じタイプでないセレクタ値を入力する場合、この値は赤で表示されます。これは、その値を削除または編集するまで、VIを実行しないことを示します。また、浮動小数点算術にありがちな丸め誤差の可能性があるため、ケースセレクタ値として浮動小数点数を使用することはできません。浮動小数点値をケースに配線すると、LabVIEWは最も近い整数に値を丸めます。ケースセレクタラベルに浮動小数点値を入力すると、その値は赤で表示されて、ストラクチャを実行する前に値を削除または編集する必要があることを示します。

入出力トンネル

ケースストラクチャには、複数の入出力トンネルを作成することができます。全てのケースに入力がありますが、各入力を使用する必要はありません。ただし、出力トンネルは全てのケースについて設定する必要があります。

ブロックダイアグラムのケースストラクチャには出力トンネルがありますが、少なくとも1つのフレームで出力値がトンネルに配線されていない、という例を考えてみてください。このケースを実行しても、出力に返す値は不明です。このエラーが発生するとトンネルの中央が白のままになります。未配線のケースは、現在ブロックダイアグラムで表示されているケースではない可能性があります。

このエラーを修正するには、出力トンネルが配線されていないケースを表示させて、出力をトンネルに配線します。また、出力トンネルを右クリックしてショートカットメニューから「配線されていない場合、デフォルトを使用」を選択し、全ての未配線トンネルにトンネルデータタイプのデフォルト値を使用することもできます。全てのケースで出力が配線されている場合、出力トンネルは塗りつぶされた色になります。

「配線されていない場合、デフォルトを使用」オプションはできる限り使用しないでください。このオプションを使用するとブロックダイアグラムがわかりづらくなり、コードを使用する他のプログラマにとって混乱の原因となります。また、コードのデバッグも難しくなります。このオプションを使用する際、使用されるデフォルト値はトンネルに配線されたデータタイプのデフォルト値になる点にご注意ください。例えば、トンネルのデータタイプがブールの場合は、デフォルト値はFALSEになります。

データタイプ デフォルト値
数値 0
ブール FALSE
文字列 空 (“”)

表1. データタイプのデフォルト値

その他のストラクチャ

その他にもLabVIEWには、イベントストラクチャ(UI操作などの割り込み駆動タスクの処理に使用)やシーケンスストラクチャ(実行順の強制設定に使用)など、より高度なタイプの実行ストラクチャがありますが、この入門向け解説書では説明しません。それらのストラクチャについては、『LabVIEWヘルプ』の該当するトピックを参照してください。

新しい方法でLabVIEWの基礎を学習する

新しい対話形式の方法で、LabVIEWの概念を学習しましょう。

学習を続ける

前へデータ構造
ループ反復間でのデータの受け渡し次へ