LabVIEWでNI-VISAを使用したバイナリ/16進数の送受信

更新しました Jan 9, 2019

使用製品

Software

  • LabVIEW Base
  • LabVIEW Full
  • LabVIEW Professional

Driver

  • NI-VISA

問題

アプリケーションでは、ASCII文字ではなくバイナリ値または16進値を送受信する必要がありますが、LabVIEWのVISA読み取りおよびVISA書き込み関数は有効なデータタイプとして文字列のみを受け入れます。LabVIEW VISA関数でバイナリデータまたは16進データを使用するにはどうすればよいですか?

解決策

バイナリデータまたは16進データを送信するには、最初にデータを文字列形式に変換して、VISA書き込み関数に渡す必要があります。同様に、VISA読み取り関数によって返される文字列値は、望ましい出力形式に変換することができます。LabVIEW VISA関数では文字列値をデータの入出力として使用する必要がありますが、文字列内の文字値は標準のASCII文字に限定されていません。各文字は符号なし8ビット整数(U8)で、値の範囲は0から255です。

ソースデータの形式に応じて、いくつかのバイナリ値を送受信する方法があります。
 
  • 16進数の定数を送信して、受信された値を16進数値として表示する

16進数の定数を送信する最も簡単な方法は、文字列定数を使い、その定数を16進表示に設定することです (定数を右クリックして16進表示を選択)。これでASCII文字以外の16進数値を文字列制御器や定数に入力することが可能になり、その値を直接VISA書き込み関数へ渡すことができます。VISA読み取り関数で値を読み取る際には、16進表示モードになっている文字列表示器にそのまま配線することで、フロントパネル上に16進数の値を表示することができます。

16進定数の送受信:


 
  • 符号なし8ビット整数(U8)のスカラ値あるいは配列を送受信する

シングルバイトの値(U8整数)を送信するには、「配列連結追加」関数を使用して単一要素の配列を作成します。その後、「バイト配列を文字列に変換」関数でVISA書き込み関数が引数にできる文字列に変換します。バイト配列の場合も同様ですが、その場合は「配列連結追加」関数は必要ありません。
U8整数スカラ値の送受信:


 
U8整数配列の送受信:


 
  • U8以外の値、あるいはその配列の送受信する

転送するバイナリデータが1バイトより大きい場合は、最初に値または配列をU8配列に型キャストし、この配列をVISA Writeで許容される文字列に変換する必要があります。 同じ操作を逆の順序で実行して、VISA Readから取得した文字列をバイナリデータ型に変換します。 これは、単一のデータ要素または要素の配列で使用できます。

シングルバイト以上の長さを持つバイナリ値を送信したい場合は、まず値をU8整数配列に型変換して、これをVISA書き込み関数が引数にできる文字列に変換する必要があります。同様の操作を逆順におこなうことで、VISA読み取り関数の出力文字列をバイナリ値に変換する事が可能です。この方法はスカラ値、あるいは複数要素を持つ配列に対して使用することができます。


複数バイト値の送受信:

 
 
メモ: シングルバイトより長いバイナリ値(I16、U32、DBLなど)を扱う場合は、リモートデバイスが使用しているエンディアン(バイト順序)を考慮する必要があります。LabVIEWではビッグエンディアンを使用しており、リトルエンディアンを使用するデバイスと通信するには、データ要素のバイト順序を変換する必要があります。

この記事はお役に立ちましたか?

いいえ