NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

VBAでVISAを使用して、シリアル機器へのコマンドの送受信ができない

解決済み
解決策を見る

シリアルRS232C - USBケーブルで、測定機器(ミツトヨKA12)をPC(windows7 64bit)へ接続し、ExcelVBAでデータを測定しようとしています。

A というコマンドを送ると、X軸とY軸の値が返ってくるはずです。(機器のマニュアルでは、コマンド後ろにCR LFを付ける)

 

Excel VBAで、

viWrite(vi,"A\r\n",5,retCount)   (※ \ は ¥の半角) を送っても、

viRead(vi,Buffer,CNT,retCount)  で返事がありません(タイムアウトエラー)。

 

NI-MAXのVISAテストパネルから、

TerminationCharacterを CarriageReturnにし、

 

Input/Outputで、 A\r\n をQueryすると、(または、WriteしてReadすると、)

 

X-0100.561,Y+0102.628\r\n  と、座標値が返ってきました。

 

TerminationCharacterを Custom(Value=5)にすると、タイムアウトのエラーが出ますが、同じく値が返ってきました。

 

 

NI-I/OTraceを使用し、MAXでしていることと同じセッティングをVBAでもしましたが、VBAでは値が返ってきません。

 

解決方法がわかりましたら、お願い致します。

0 件の賞賛
メッセージ1/5
10,439件の閲覧回数
解決策
トピック作成者yyx763pdが受理

yyx763pdさま

 

普段はLabVIEWでVISAを使っているので、的外れでしたらごめんなさい。

VB系では、"A"+<CR>+<LF>の表現は、"A" & vbCrLf ではないでしょうか?

0 件の賞賛
メッセージ2/5
10,435件の閲覧回数

平素よりNI製品をご利用いただきまして誠にありがとうございます。

日本ナショナルインスツルメンツ技術部 吉原と申します。

 

まずはご確認させていただきたいことが二点ございます。

 

1.

通信が成功した場合(VISA テストパネルから送信)と

通信が成功しない場合(VBAから送信)で

バッファに実際に書き込まれた入力文字列を比較・ご確認いただけますでしょうか。

ここには改行等の「見えない」文字も記載されていますので、

コマンドの問題点が発見しやすいかと存じます。

 

(確認方法)

テストパネル実行時にキャプチャされた通信の記録をダブルクリックすることで

NI I/O Traceプロパティシートが開きます。

「バッファ」タブの、入力バッファ欄に記載された文字列(バイナリデータ)が

実際に送信されている情報を表しています。

 

2.

viWrite(vi,"A\r\n",5,retCount) では、return count5文字で指定されていますが、

この時I/O Trace上ではどのように表示されていますでしょうか。
(赤文字のエラー表示など)

 

まずは上記2点をご確認いただきますようよろしくお願い申し上げます。

0 件の賞賛
メッセージ3/5
10,399件の閲覧回数

Hikariさま

 

まさに探していた答えでした。

直接的な回答ありがとうございます。無事解決できました。

 

同じ計測機メーカーでも、VBでコマンドの後ろに直接、”A CR”などと入れるものもあり、

Attributeの設定なのかわからずつまづいておりました。

 

ありがとうございました。

0 件の賞賛
メッセージ4/5
10,376件の閲覧回数

Hikariさま、NI 吉原さま

 

アドバイスありがとうございます。

1.の確認で、「見えない文字」を見ることができました。

 Hikariさまのアドバイスで、 & vbCrLf を入れたところ、無事Readできるようになりました。

 ありがとうございました。

 

 "A\r\n" = 41 5C 72 5C 6E

  "A" = 41 00 00

  "A" & vbCrLf = 41 0D 0A →読み込めました。

 

 

2.の点ですが、Write時はエラーはでていません。

きちんと、Writeできていないのに、Readしようとして、タイムアウトのエラーが出ていたんだと思います。

 

解決できました。ありがとうございました。

0 件の賞賛
メッセージ5/5
10,375件の閲覧回数