計測器との通信では、計測器へのデータの送信および計測器からのデータの受信が行われます。計測器ドライバが自動的にフォーマットを行うため、計測器ドライバを使用して計測器にデータを送信したしり、データを読み取る場合に、データをフォーマットする必要はほとんどありません。ただし、VIを作成して計測器と通信する場合にデータをフォーマットする必要がある場合があります。

メッセージベースの計測器と通信する場合は、計測器に正しいコマンド文字列をフォーマットおよび作成し、適切な操作を実行するか、または応答を返す必要があります。

レジスタベースの計測器通信には、標準規格はありません。各デバイスは異なる操作を行うので、デバイスのプログラム方法を確認するには計測器のドキュメントが最適なリソースです。

通常、コマンド文字列およびクエリはテキストと数値の組み合わせです。一部の計測器は、テキストのみのコマンド文字列を必要とし、数値をテキストに変換してコマンド文字列に追加する必要があります。同様に、LabVIEWで計測器が返すデータを使用するには、VI、関数、または表示器が受け入れることのできる形式にデータを変換する必要があります。

(Windows) Instrument I/O Assistantを使用すると、計測器にクエリを送信して計測器が返すデータをフォーマットすることができます。「Instrument I/O Assistant」Express VIをブロックダイアグラムに配置して、計測器I/Oアシスタントにアクセスします。

文字列にフォーマット」関数を使用して、コマンド文字列を作成して、計測器に送信、または他の文字列または数値データを初期文字列に追加することができます。

計測器から読み取られたデータをフォーマットする

計測器に送信するコマンド文字列がヘッダとフッタを含むのと同様に、計測器は通常、データをヘッダまたはフッタと一緒に返します。通常、ヘッダには返されたデータポイント数や計測器の設定などの情報が含まれています。フッタ情報には、通常、データ文字列の末尾に単位または他の計測器の設定が含まれています。計測器のドキュメントには、各データ転送において含まれるヘッダとフッタの情報が記載されています。LabVIEWで返されるデータを表示して解析する前に、ヘッダとフッタ情報を最初に削除する必要があります。

部分文字列」関数を使用すると、文字列のヘッダとフッタの情報を構文解析して、文字列表示器に表示することができます。「文字列からスキャン」関数を使用すると、文字列からデータを構文解析することができます。

波形転送

また、計測器はASCII、1バイトバイナリ、および2バイトバイナリなど、他の形式でデータを返すことができます。計測器のドキュメントには、使用できる形式と各データを利用可能なデータに変換する方法が説明されています。

ASCII波形

計測器がデータをASCII形式で返した場合は、そのデータを文字列として表示できます。ただし、データを数値形式で操作する必要がある場合や、データをグラフで表示する必要がある場合は、文字列データを数値データに変換する必要があります。たとえば、波形が1,024ポイントで構成されており、各ポイントには0~255の値があるとします。ASCIIエンコーディングを使用する場合、各データ値を表示するには最大4バイトが必要です (値に最大3バイト、カンマなどのセパレータに1バイト)。最大4096バイト(4バイト x 1024)必要な上に、波形をASCII文字列として表示するためにヘッダとフッタのバイトが必要です。「小数/指数文字列を数値に変換」関数を使用して、ASCII文字列を数値配列に変換することができます。

1バイトバイナリ波形

計測器には、データをASCII形式で送信、またはすべての波形データをバイナリ形式で送信するオプションがないものがあります。バイナリには標準規格がないため、計測器による正確なデータ値の格納方法については計測器のドキュメントを参照してください。一般的なバイナリ形式には、1バイトバイナリがあります。この種類のデータエンコード方法では、計測器は各データを送信する前に8ビットバイナリ値に変換します。

1バイトのバイナリデータをバスから読み取る場合、計測器はデータを文字の文字列として返します。ただし、文字は期待するような形式で表示されません。LabVIEWは、バイナリ数値をASCII文字値として解釈し、対応する文字が表示します。たとえば、値65を1つのデータ値として送信すると、バスから読み取る文字はAになります。値13の場合、印刷可能なASCII文字はありません。これは、値13は非表示の復帰文字であるためです。

これらの非表示の文字を文字列表示器で表示するには、表示器を右クリックしてショートカットメニューから'¥'コード表示を選択します。復帰文字は文字列表示器で\rとなります。

解析VIでASCII文字列内の数値データを使用したり、グラフまたはチャートで数値データを表示するには、バイナリ文字列を数値配列に変換する必要があります。計測器が1024個のエンコードされた1バイト値を含むバイナリ文字列を送信する場合、波形は1024バイトのみとヘッダ情報を必要とします。バイナリエンコードを使用する場合、各値が8ビット符号なし整数と仮定して、各データ値を表示するには1バイトのみが必要です。「部分文字列」関数および「文字列をバイト配列に変換」関数を使用して、バイナリ文字列を整数の配列に変換できます。

メモ バイナリデータを集録する場合は、データサイズを使用してデータを抽出してください。フッタ情報の最初の文字を検索しても、検出文字がバイナリ値の一部である場合があるためです。

2バイトバイナリ波形

データが2バイトバイナリ形式の場合、1バイトバイナリ形式と同様に、バイナリはエンコードされてASCII文字として送信されます。ただし、16ビットのデータまたは2つのASCII文字列が各データ値を示します。この形式は1バイトバイナリ形式と比較して2倍のスペースを使用しますが、ASCIIでフォーマットされたデータより効率的にパックされています。

たとえば、オシロスコープが波形データをバイナリ表記で送信するとします。この例では、波形は、各値が2バイトの符号付き整数の1024データポイントで構成されていると仮定すると、波形全体で2048バイト、その他に5バイトヘッダと2バイトフッタが必要になります。5バイトヘッダを削除した後、「文字列から非平坦化」関数を使用して、波形文字列を16ビット整数の配列に変換します。

データが2バイトバイナリ形式で転送されたときのバイトを受信した順序を記憶しておくことが重要となります。2バイトの組み合わせのqHには、対応する整数値は29,000ですが、反対のバイト順序のHqに対応する整数値は18,545です。

メモ 計測器によってバイト順序を構成できるものと、固定されたバイト順序のものがあります。特定の計測器のバイトについては、計測器のドキュメントを参照してください。

上位のバイトを最初に受信する場合は、バイトを整数値に変換する前にバイト順序を逆にする必要があります。「文字列から非平坦化」を使用してバイト順序を逆転します。