VISAでの通信を行う際の終端文字の設定方法
使用ソフトウェア: LabVIEW Development Systems>>Professional Development System
使用ソフトウェア・バージョン:
使用ソフトウェア・バージョンに特化:
二次のソフトウェア: Driver Software>>NI-VISA
問題: LANのインターフェースを持った計測器とVISA通信を行おうとしています。
この計測器は、VXI-11にもLXIにも対応していないのですが、コマンドを受け付けるソケットポート(Socket Port)が開いているので、Socketでの通信ができるように設定しました。
プログラムでコマンドを送り、レスポンスを受信しようとすると、受信の際にタイムアウトエラーが発生します。レスポンスは受け取れていますが、エラーが出ないようにしたいと思います。
どのようにしたらいいですか。
解決策: これは、VISAの関数がレスポンスの終わりを判断できないために発生する問題です。
VISAの通信では、デフォルトでは、終端文字が有効になっていません。
VISAの計測器記述子がINSTRになっている場合は、ほかの方法でコマンドやレスポンスの終わりを判断するようになっていますが、ソケットでの接続の場合は、純粋に文字列だけを送受信します。したがって、レスポンスの終わりを判断することができず、タイムアウトまで待って、タイムアウトエラーが発生することになります。多くの測定器はレスポンスの終わりに\n(ASCIIコードで0x0A、LF)を付けて送信しますので、これを終端文字として設定すれば、VISA読み取り(VISA Read)の関数がレスポンスの終わりを判断できるようになり、エラーが発生しなくなります。
この設定を行うには、VISAプロパティノードを使って、
Message Based SettingsのTermination Character Enable(終端文字の有効化)プロパティにTrueを入力します。
Termination Character(終端文字)は、デフォルトで、\nになっていますので、
ほとんどの場合、このプロパティを有効にするだけで問題なく通信が行えますが、
終端文字が\nでない場合は、終端文字を設定する必要があります。
その場合は、Message Based SettingsのTermination Characterプロパティに、
希望の文字のASCIIコードを符号なし8ビット整数(U8)で入力します。
添付のサンプルVIは、終端文字を\コード表示の文字列制御器に入力し、
それを符号なし8ビット整数(U8)のASCIIコードに変換して設定するようになっています。
また、同じプロパティノード内で、終端文字を有効にする設定も行っています。
このサンプルはLabVIEW8.0で作成してあります。
関連リンク:
添付:
My VISA Write&Read LAN termination.vi
報告日時: 06/20/2007
最終更新日: 06/20/2007
ドキュメントID: 4AJ3O8V