LabVIEW 上での NI-VISA を使った 2進数/16進数の送受信
使用ソフトウェア: LabVIEW Development Systems>>Full Development System
使用ソフトウェア・バージョン: N/A
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア: Driver Software>>NI-VISA
ハードウェア: Serial
問題: LabVIEW内のVISA読み取り・VISA書き込み関数は有効な引数のデータ型として文字列型のみを受け付けます。しかし、私のアプリケーション内では、データを通常文字列型として表されるASCII文字列ではなく、2進数あるいは16進数として送る必要があります。元のデータが2進/16進数の場合、どのようにしたらLabVIEW VISA関数を利用することができますか?
解決策: LabVIEW VISA関数群は引数及び戻り値として文字列型を使用しますが、その文字列が実際に取る値は標準ASCII文字に限定されていません。各文字はそれぞれ符号なし8ビット整数(U8)で、取りうる値の範囲は0から255です。2進数を送信する上で重要な事として、まずその値を文字列型に変換してください。そうすれば VISA書き込み関数を使って値を送信することができます。同様に、VISA読み取り関数の出力文字列値を任意の型に変換することもできます。
送りたいデータがどのように整形されているかによって、2進数データの送受信方法はいくつかの方法に分かれます。
- 16進数の定数を送信して、受信された値を16進数値として表示したい場合
16進数の定数を送信する最も単純な方法としては、文字列定数を使い、その定数を16進表示に設定(これは定数を右クリックすることで設定可能です)することが挙げられます。こうすることにより、ASCII文字以外の16進数値を文字列制御器や定数に入力することが可能になり、ひいてはその値を直接 VISA書き込み関数に渡すことができます。VISA読み取り関数で値を読み取る際には、16進表示モードになっている文字列表示器にそのまま結線することで、フロントパネル上に16進の値を表示することができます。
16進定数の送受信:

- 符号なし8ビット整数(U8)のスカラ値あるいは配列を送信したい場合
1バイトの値 (U8整数)を送信するためには、配列連結追加関数を使って、1要素の配列を作ってください。その後、バイト配列を文字列に変換関数を使って、VISA書き込み関数が引数として取ることのできる文字列に変換してください。同様の手順を使って、バイト配列を送信することができます。ただしこの場合は配列連結追加関数は不要です。
U8整数スカラの送受信:

U8整数配列の送受信:

- U8以外の値、あるいはその配列の送受信をしたい場合
1バイト以上の長さを持つ2進数値を送信したい場合は、まず値をU8整数配列にキャストして、これをVISA書き込み関数が引数として取れる文字列に変換する必要があります。同様の操作を逆順に実行することで、VISA読み取り関数から取得した文字列を2進数値に変換する事が可能です。この方法はスカラ値、あるいは複数要素を持つ配列に対して使用することができます。
複数バイト長値の送受信:

注: 1バイトより長い2進数値(I16、U32、DBLなど)を扱う場合は、通信相手がどのエンディアン(バイト順)を使うかということが問題になり得ます。LabVIEWは標準でビッグエンディアンですので、リトルエンディアンのデバイスと通信する際には、送信する値のバイト順を変更する必要があります。
関連リンク: KnowledgeBase 3OIFGTLA: Writing Bits to the Serial Port Instead of Writing ASCII Strings
添付:
- singleu8.jpg
- hexarray.jpg
- hexdisplay.jpg
- multibyte.jpg
報告日時: 11/16/2006
最終更新日: 03/30/2007
ドキュメントID: 43FDH92W