05-16-2013 04:42 AM
シリアル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では値が返ってきません。
解決方法がわかりましたら、お願い致します。
解決済! 解決策の投稿を見る。
05-16-2013 07:07 AM
yyx763pdさま
普段はLabVIEWでVISAを使っているので、的外れでしたらごめんなさい。
VB系では、"A"+<CR>+<LF>の表現は、"A" & vbCrLf ではないでしょうか?
05-17-2013 04:41 AM
平素よりNI製品をご利用いただきまして誠にありがとうございます。
日本ナショナルインスツルメンツ技術部 吉原と申します。
まずはご確認させていただきたいことが二点ございます。
1.
通信が成功した場合(VISA テストパネルから送信)と
通信が成功しない場合(VBAから送信)で
バッファに実際に書き込まれた入力文字列を比較・ご確認いただけますでしょうか。
ここには改行等の「見えない」文字も記載されていますので、
コマンドの問題点が発見しやすいかと存じます。
(確認方法)
テストパネル実行時にキャプチャされた通信の記録をダブルクリックすることで
NI I/O Traceプロパティシートが開きます。
「バッファ」タブの、入力バッファ欄に記載された文字列(バイナリデータ)が
実際に送信されている情報を表しています。
2.
viWrite(vi,"A\r\n",5,retCount) では、return countを5文字で指定されていますが、
この時I/O Trace上ではどのように表示されていますでしょうか。
(赤文字のエラー表示など)
まずは上記2点をご確認いただきますようよろしくお願い申し上げます。
05-19-2013 12:09 PM
Hikariさま
まさに探していた答えでした。
直接的な回答ありがとうございます。無事解決できました。
同じ計測機メーカーでも、VBでコマンドの後ろに直接、”A CR”などと入れるものもあり、
Attributeの設定なのかわからずつまづいておりました。
ありがとうございました。
05-19-2013 12:10 PM
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しようとして、タイムアウトのエラーが出ていたんだと思います。
解決できました。ありがとうございました。