LabVIEWのデータストラクチャ

本ページの内容

文字列データタイプ


文字列とは、ASCII文字のまとまりで、表示できる文字列と表示できない文字列があります。文字列は、プラットフォームに依存しない形式で情報およびデータを提供します。一般的な文字列の例には以下のようなものがあります。

  • 単純なテキストメッセージを作成する。
  • テキストコマンドを送って計測器を制御し、ASCIIまたはバイナリ文字列で値を受け取り、数値に変換する。
  • 数値データをディスクに保存する。数値データをASCIIファイルに保存するには、データをディスクファイルに書き込む前に、まず数値データを文字列に変換する必要があります。
  • ダイアログボックスでユーザに指示またはプロンプトを表示する。

フロントパネルでは、文字列は表、テキスト入力ボックス、およびラベルとして表示されます。LabVIEWには、文字列のフォーマット、構文解析、および他の編集を含む、文字列を操作するのに使用できる標準VIおよび関数が含まれています。LabVIEWでは、文字列データはピンクで表示されます。

文字列データの詳細

数値データタイプ

LabVIEWの数値データタイプには、浮動小数点数、固定小数点数、整数、符号なし整数、複素数があります。LabVIEWの倍精度、単精度、複素数の数値データタイプは、オレンジで表示されます。整数の数値データタイプは、青色で表示されます。

メモ: 数値データタイプによって、データの保存に使用されるビット数や、表現できるデータ値に違いがあります。

一部のデータタイプでは、詳細な構成オプションを設定できます。例えば、浮動小数点データ(複素数を含む)に測定の物理単位を関連付けたり、固定小数点データのエンコードおよび範囲を構成することができます。

数値データの詳細

数値データタイプの表を表示する

ブールデータタイプ


ブールデータは8ビット値として保存されます。LabVIEWでは、0か1またはTRUE/FALSEを表すのにブールを使用します。8ビットの値が全て"0"の場合、ブール値はFALSEです。0以外の値はすべてTRUEで表されます。ブールの一般的な使用方法には、デジタルデータの表現のほかに、ケースストラクチャなどの実行ストラクチャの制御によく使用される機械的スイッチの役目を果たすフロントパネル制御器として使用することが含まれます。ブール制御器は通常、Whileループを終了させる条件ステートメントとして使用されます。LabVIEWでは、ブールデータは緑色で示されます。

機械的に動作するブール制御器の詳細

ダイナミックデータタイプ

ダイナミックデータタイプは濃い青色の端子として表示され、ほとんどのExpress VIがダイナミックデータタイプを受け取ったり返したりします。

「ダイナミックデータへ変換」VIおよび「ダイナミックデータから変換」VIを使用することにより、以下のデータタイプの浮動小数点数値またはブールデータを変換することができます。

  • 1D波形配列
  • 1Dスカラ配列
  • 1Dスカラ配列―最新値
  • 1Dスカラ配列―単一チャンネル
  • 2Dスカラ配列―列がチャンネル
  • 2Dスカラ配列―行がチャンネル
  • 単一スカラ
  • 単一波形

データを最良な形で表示する表示器にダイナミックデータタイプを配線してください。表示器には、グラフ表示器、チャート表示器、数値表示器、ブール表示器などがあります。ただし、ダイナミックデータは、配線した表示器に一致する自動変換になるため、Express VIではブロックダイアグラム実行速度が低下することがあります。

ダイナミックデータタイプはExpress VIで使用するものです。LabVIEWに標準提供されている他のほとんどのVIおよび関数は、このデータタイプを受け取ることはできません。標準のVIまたは関数を使用して、ダイナミックデータタイプに含まれるデータを解析または処理するには、ダイナミックデータタイプを変換する必要があります。

ダイナミックデータの詳細

関連のあるデータは、グループ化すると扱いやすくなる場合があります。LabVIEWで関連するデータをグループ化するには、配列とクラスタを使用します。配列は同じデータタイプのデータを1つのデータストラクチャに組み合わせ、クラスタは複数データタイプのデータを1つのデータストラクチャに組み合わせます。

配列は要素と次元で構成されます。要素とは、配列を構成するデータポイントです。次元とは、配列の長さ、高さ、もしくは奥行きです。配列には、メモリ不足の問題がない限り、各次元に最大(231)-1の要素を含む複数の次元を使用することが可能です。

数値、ブール値、パス、文字列、波形、およびクラスタデータタイプの配列を作成できます。同じタイプのデータポイントの集合を処理する場合や同じ演算を繰り返し行う場合は、配列を使用することを検討してください。配列は、波形から収集したデータや、ループで生成されたデータ(各ループの反復で配列の要素が1つずつ生成されます)を格納するのに適しています。

メモ: LabVIEWでは配列の指標は0から始まります。配列の最初の要素の指標は、配列の次元に関わらず0です。

配列要素は順序づけられています。配列の指標を使用して、特定の要素にすばやくアクセスできます。指標は0から始まりますので、範囲は0からn-1になります。ここでnは配列の要素数です。例えば、1年は12か月あるのでn=12で、指標は0~11の範囲になります。3月は3番目の月なので、その指標は2になります。

図1に、数値配列の例を示します。配列に表示される最初の要素 (3.00) は指標1で、2番目の要素 (1.00) は指標2です。指標表示で要素1が選択されているため、この画像に指標0の要素は表示されません。指標表示に選択される要素は、常に要素表示の左上隅に表示されている要素となります。

(1) 指標表示  |  (2) 要素表示

図1. 数値の配列制御器

配列制御器および表示器を作成する

図2に示すように、フロントパネルに配列シェルを追加し、数値/文字列制御器などのデータオブジェクト/要素を配列シェルにドラッグすることで、フロントパネル上に配列制御器または表示器を作成できます。

図2. 配列シェルに数値制御器を配置

無効な制御器や表示器を配列シェルにドラッグしようとしても、配置されません。

ブロックダイアグラムで配列を使用する前に、配列シェルにオブジェクトを挿入する必要があります。そうしないと配列端子は空のカッコとともに黒く表示され、データタイプは関連付けられません。

2次元配列

前の例は1D配列を使用しています。2D配列は要素をグリッドに格納します。要素を特定するには(0から始まる)列指標と行指標が必要です。図3は、8列8行の2D配列を示しています。要素数は8 x 8で64となります。

図3. 2次元配列

多次元配列をフロントパネルに追加するには、指標表示を右クリックしてショートカットメニューから「次元を追加」を選択します。また、指標表示はサイズを変更できますので、いくつでも次元を追加することが可能です。

配列を初期化する

配列は、初期化することも、初期化しないでおくこともできます。配列を初期化すると、各次元の要素数と各要素の内容が定義されます。初期化されていない配列は、固定数の次元があるだけで要素はありません。図4は、初期化されていない2D配列制御器を示しています。要素は全てグレー表示になっている点にご注意ください。それはその配列が初期化されていないことを示しています。

図4. 初期化されていない2D配列

2D配列では、列の要素を初期化すると、その列とそれ以前の列の初期化されていない要素もそのデータタイプのデフォルト値に初期化されます。図5は、0ベース配列の列2行2に値4を入力しました。列0、1、2のそれ以前の要素は、数値データタイプのデフォルト値0に初期化されます。

図5. 9個の要素がある初期化された2D配列

配列定数を作成する

ブロックダイアグラムで配列制御器を作成するには、関数パレットから配列制御器を選択し、配列シェルをブロックダイアグラムに配置して、文字列定数、数値定数、ブール定数、またはクラスタ定数を配列シェルに入れます。配列定数を使用すると、定数データを保存するか、または他の配列と比較する基準として保存できます。

自動指標付け配列入力


配列をForループやWhileループに配線する場合、自動指標付けを有効にすると、各ループの反復を配列の要素にリンク付けることができます。トンネルは、自動指標付けされると、通常の四角から上図のように変化します。トンネルを右クリックしてショートカットメニューから「指標付け使用」または「指標付け不使用」を選択すると、トンネルの状態が切り替わります。

配列入力

Forループに入力された配列で自動指標付けを有効にすると、LabVIEWがカウント端子を配列のサイズに設定するため、カウント端子を配線する必要はありません。Forループを使用すると配列を一度に1要素ずつ処理できるので、Forループに配線する全ての配列に関してLabVIEWはデフォルトで自動指標付けを有効にします。配列を1要素ずつ処理する必要がない場合は、自動指標付けを無効にすることができます。

図6で、Forループは配列の要素数と同じ回数実行します。通常は、Forループのカウント端子が配線されていないと、実行ボタンは壊れた矢印になります。ただし、この場合実行ボタンは壊れていません。

図6. Forループカウントの設定に使用する配列

複数のトンネルに対して自動指標付けを有効にする場合や、カウント端子を配線する場合、実際の反復回数は選択した小さい方の値になります。例えば、それぞれ10個と20個の要素を持つ自動指標付けされた2つの配列がループに入った場合、15という値をカウント端子に配線しても、ループは10回のみ実行し、最初の配列は全ての要素に指標付けしますが、2つ目の配列は最初の10個の要素しか指標付けしません。

配列出力

配列の出力トンネルを自動指標付けすると、出力配列はループの全ての反復から新しい要素を受け取ります。そのため、自動指標付けされた出力配列は、常に反復回数と同じサイズになります。

出力トンネルから配列表示器に配線されたワイヤは、ループの枠で配列に変更されるため太くなり、出力トンネルには配列を表す角カッコが表示されます。

図7. 自動指標付けされた出力

ループ枠のトンネルを右クリックして、ショートカットメニューから「指標付け使用」または「指標付け不使用」を選択すると、自動指標付けの有効/無効を切り替えることができます。Whileループの自動指標付けは、デフォルトで無効になっています。

例えば、トンネルに渡された最後の値のみが必要な場合は、自動指標付けを無効にします。

2次元配列を作成する

ネストされた2つのForループを使用して、2D配列を作成することができます。外側のForループが行要素となり、内側のForループが列要素となります。

図8. 2配列の作成

 

ビデオ: クラスタ

クラスタは混合タイプのデータ要素をグループ化します。クラスタのサンプルは、ブール値、数値、および文字列を組み合わせたLabVIEWエラークラスタです。テキストベースのプログラミング言語におけるレコードまたは構造体と似ています。

いくつかのデータ要素をクラスタにまとめることによって、ブロックダイアグラム上のワイヤの混雑を取り除き、サブVIに必要なコネクタペーン端子の数を減らします。コネクタペーンには、最大で28個の端子があります。フロントパネル上に別のVIに渡したい制御器および表示器が29以上ある場合は、制御器および表示器の一部を1つのクラスタにグループ化して、このクラスタをコネクタペーン上の端子に割り当てます。

ブロックダイアグラム上のほとんどのクラスタには、ピンク色の配線パターンとデータタイプ端子があります。エラークラスタには濃い黄色のワイヤのパターンおよびデータタイプ端子が含まれています。数値クラスタ(ポイントとも呼ばれます)は、ワイヤパターンとデータタイプ端子が茶色です。茶色の数値クラスタを「和」や「平方根」などの数値関数に配線すると、クラスタの全要素で同じ演算を同時に行うことができます。

クラスタ要素の順序

クラスタと配列の要素はどちらも順序付けられていますが、「バンドル解除」関数を使って全てのクラスタ要素のバンドルを解除する必要があります。「名前でバンドル解除」関数を使用すると、クラスタ要素を名前でバンドル解除できます。「名前でバンドル解除」を使用する場合、各クラスタ要素にラベルを付ける必要があります。また、クラスタはサイズが決まっているという点で配列と異なります。ただし配列と同様、クラスタも制御器と表示器のいずれかとなります。1つクラスタでは、制御器と表示器を併用することはできません。

クラスタ制御器および表示器を作成する

以下のフロントパネルのとおり、フロントパネルにクラスタシェルを追加し、データオブジェクトまたは要素(数値、ブール値、文字列、パス、Refnum、クラスタ制御器、またはクラスタ表示器など)をクラスタシェル内にドラッグして、フロントパネルにクラスタ制御器または表示器を作成します。

クラスタシェルのサイズを変更するには、クラスタシェルでカーソルをドラッグします。

図9. クラスタ制御器の作成

図10は、文字列、ブールスイッチ、数値という3つの制御器を含むクラスタを示しています。

図10. クラスタ制御器の例

クラスタ定数を作成する

ブロックダイアグラム上にクラスタ制御器を作成するには、関数パレットからクラスタ制御器を選択し、クラスタシェルをブロックダイアグラムに配置して、文字列定数、数値定数、ブール定数、またはクラスタ定数をクラスタシェルに入れます。クラスタ定数を使用すると、定数データを保存するか、または他のクラスタと比較する基準として保存できます。

フロントパネルウィンドウにクラスタ制御器/表示器があって、同じ要素を持つクラスタ定数をブロックダイアグラム上に作成したい場合は、クラスタをフロントパネルからブロックダイアグラムにドラッグするか、フロントパネルでクラスタを右クリックしてショートカットメニューから「作成」→「定数」を選択します。

クラスタ関数を使用する

クラスタを作成および操作するには、クラスタ関数を使用します。例えば、下記のようなタスクが実行できます。

  • クラスタから個々のデータ要素を抽出する。
  • クラスタに個々のデータ要素を追加する。
  • クラスタを個々のデータ要素に分解する。

「バンドル」関数でクラスタをまとめ、「バンドル」関数および「名前でバンドル」関数でクラスタを変更し、「バンドル解除」関数および「名前でバンドル解除」関数でクラスタをグループ解除します。

また、「バンドル」、「名前でバンドル」、「バンドル解除」、「名前でバンドル解除」の各関数をブロックダイアグラムに配置するには、ブロックダイアグラムでクラスタ端子を右クリックして、ショートカットメニューから「クラスタ、クラス、バリアント」パレットを選択することもできます。「バンドル」関数と「バンドル解除」関数には、自動で正しい数の端子が含まれるようになっています。「名前でバンドル」関数と「名前でバンドル解除」関数では、クラスタの最初の要素が表示されています。クラスタの他の要素を表示するには、位置決めツールを使用して、「名前でバンドル」関数と「名前でバンドル解除」関数のサイズを変更します。

クラスタを組み立てる

個々の要素からクラスタを組み立てたり、全要素の新しい値を指定せずに既存のクラスタの要素の値を変更するには、「バンドル」関数を使用します。位置決めツールを使用して関数のサイズを変更するか、要素の入力を右クリックしてショートカットメニューから「入力を追加」を選択します。

図11. ブロックダイアグラムでクラスタを組み立てる

クラスタを修正する

クラスタ入力を配線する場合、変更する要素のみ配線することができます。例えば、図12に示す入力クラスタには、3つの制御器があります。

図12. クラスタの変更に使用するバンドル

クラスタ順がわかっている場合は、バンドル関数を使用して、図12に示すように要素を配線することで、コマンド値を変更できます。

また「名前でバンドル」関数を使用して、既存のクラスタのラベル付き要素の置換やアクセスができます。「名前でバンドル」関数は「バンドル」関数と同じように動作しますが、クラスタ要素をクラスタ順で識別するのではなく、各要素の付属ラベルで参照します。付属ラベルがある要素のみアクセスできます。入力数は、出力クラスタの要素数と同じでなくてもかまいません。

操作ツールを使用して、入力端子をクリックしプルダウンメニューから要素を選択します。また、入力を右クリックしてショートカットメニューから「項目を選択」を選択することもできます。

図13では、「名前でバンドル」関数を使用して、「コマンド」と「関数」の値を「新規コマンド」と「新規関数」の値でアップデートすることができます。

図13. クラスタの変更に使用する「名前でバンドル」関数

開発中に変更する可能性のあるデータストラクチャには、「名前でバンドル」関数を使用します。クラスタに新しい要素を追加したり順序を変更したりしても、名前が有効なため「名前でバンドル」関数を配線し直す必要がありません。

クラスタを分解する

クラスタを個々の要素に分解するには、「バンドル解除」関数を使用します。

名前を指定したクラスタ要素を分解するには、「名前でバンドル解除」関数を使用します。出力端子の数は入力クラスタの要素数に依存しません。

操作ツールを使用して、出力端子をクリックしプルダウンメニューから要素を選択します。また、出力端子を右クリックしてショートカットメニューから「項目を選択」を選択することもできます。

例えば、図14に示すクラスタで「バンドル解除」関数を使用すると、クラスタに含まれる4つの制御器に対応する4つの出力端子が作成されます。バンドル解除したクラスタのブール端子をクラスタの対応するスイッチに正しく関連付けるには、クラスタ順がわかっていなくてはなりません。この例では、要素0から始まって上から下へ要素が並べられています。「名前でバンドル解除」関数を使用すると、任意の数の出力端子を使用し、順位に関係なく個々の要素に名前でアクセスができます。

図14. 「バンドル解除」および「名前でバンドル解除」

列挙体(列挙体制御器/定数/表示器)とは、データタイプを組み合わせたものです。値、文字列、数値を組み合わせて、値のリストを形成することができます。例えば、「月」という列挙タイプを作成して、1月 - 0、2月 - 1・・・12月 - 11という値のペアを定義することができます。図15は、列挙体制御器のプロパティダイアログボックスに表示されるデータペアの例を示しています。このダイアログボックスを表示するには、列挙体制御器を右クリックして、項目を編集を選択します。

図15. 「月」列挙体制御器のプロパティ

列挙体が便利なのは、文字列よりも数値の方がブロックダイアグラムで扱いやすいためです。図16は、「月」列挙体制御器、列挙体制御器のデータのペアを選択したところ、そして対応するブロックダイアグラム端子を示しています。

(1) フロントパネル制御器  |  (2) 項目を選択する  |  (3) ブロックダイアグラム端子

図16. 「月」列挙体制御器

プローブツール


プローブを使用することにより、VI実行時のワイヤ上の値を確認できます。

一連の操作を含む複雑なブロックダイアグラムがあり、それらの操作のいずれかが不正確なデータを返す可能性がある場合、プローブツールを使用します。プローブツールを実行のハイライト、シングルステップ、ブレークポイントと併用すると、データの誤った原因や場所を突き止めることができます。データが使用できる場合、プローブはすぐにアップデートされ、実行のハイライトまたはシングルステップを実行中、あるいはブレークポイントを一時停止すると、プローブはデータをプローブ監視ウィンドウに表示します。シングルステップやブレークポイントにより実行がノードで一時停止した場合は、実行されたばかりのワイヤにプローブを設置して、そのワイヤを通った値を確認することもできます。

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

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

学習を続ける

前へ LabVIEWのデバッグツール
実行ストラクチャ次へ