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



使用ソフトウェア:
使用ソフトウェア・バージョン: 8.2
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア: Driver Software>>NI-VISA
ハードウェア: Serial

問題:
LabVIEWのVISA読み取りおよび書き込み関数で、有効な引数のデータ型は文字列型のみです。ただし、作成しているアプリケーションでは、データを通常文字列型として表されるASCII文字列ではなく、バイナリもしくは16進数で送受信する必要があります。どうすればLabVIEWのVISA関数でバイナリもしくは16進数のデータを使用できますか?


解決策:
LabVIEW VISA関数群は、引数および戻り値として文字列型を使用しますが、その文字列は標準 ASCII文字に限定されていません。各文字は、それぞれ符号なし8ビット整数(U8)で、使用可能な値の範囲は0から255です。バイナリデータを送信する上で重要なことは、まずその値を文字列型に変換することです。そうすることでVISA書き込み関数に値を渡すことができます。同様に、VISA読み取り関数の出力文字列値を任意の型に変換することもできます。

ソースデータの形式に応じて、いくつかのバイナリ値を送受信する方法があります。

  1. 16進数の定数を送信して、受信された値を16進数値として表示したい場合

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

    16進定数の送受信:
    16進表示を利用したサンプルプログラム


  2. 符号なし8ビット整数(U8)のスカラ値あるいは配列を送信したい場合

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

    U8整数スカラ値の送受信:
    U8整数スカラ値を変換するサンプルプログラム

    U8整数配列の送受信:
    U8整数配列を変換するサンプルプログラム


  3. U8以外の値、あるいはその配列の送受信をしたい場合

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

    複数バイト値の送受信:
    複数バイト値を型変換関数で変換するサンプルプログラム

    メモ: シングルバイトより長いバイナリ値(I16、U32、DBLなど)を扱う場合は、通信相手がどのエンディアン(バイト順序)を考慮する必要があります。LabVIEWは標準でビッグエンディアンですので、リトルエンディアンのデバイスと通信する際には、送信する値のバイト順を変更する必要があります。


関連リンク:
技術サポートデータベース 3OIFGTLA: Writing Bits to the Serial Port Instead of Writing ASCII Strings


添付:
Xmit&Rec Hex Const-JA.vi 
Xmit&Rec U8 Int-JA.vi 
Xmit&Rec U8 Array-JA.vi 
Xmit&Rec Multi-Byte-JA.vi




報告日時: 11/16/2006
最終更新日: 07/15/2016
ドキュメントID: 43FDH92W