NI製品ディスカッション

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

LANで計測器からの測定データの取り込み

解決済み
解決策を見る

初めて質問させていただきます。

現在、計測器とPCをLANケーブルでつないで、

計測器からのデータを取り込むプログラムを作成させる。

といったことを考えております。

 

ひとまず、メーカーさんの指示通りにプログラムを作成して実行してみたのですが、

測定器の問題なのかプログラムの問題なのかは分かっていないのですが、

データを読み込むことができません。

さしあたり、プログラムに問題があれのかどうか、ご教授を 賜りたく、質問させていただいた次第です。

 

 

条件としては、

1.横河電機製光パワーメータAQ2201を使用。

2.Visual C++  2008 expressを使用。

3.NI-VISA 4.62を使用。

4.計測器との通信はLAN socketである。

5.計測器とPCとの間にハブを設けてRJ-45コネクタを使用したストレートケーブルで接続。

6.計測器には付属のソフトフェアはなし。

 

横河さんに問い合わせをした際、データ取得の流れできるような資料の一部として、参考資料1を頂きました。

もう1つの資料は私が作ったプログラムです。

このプログラムは参考資料どおりに、データを1個ずつ取得するためのプログラムです。

 

コンパイルして、実行すると

could not read!と表示され、

Read関数の部分でデータを読み込めてないようです。

 

一応指定されたコマンドで動作するか確認するためにVISAICを使用して、

*IDN\nと入力すると

正しいデータ応答がありました。

しかし、プログラム上ではデータを読み込めていません。

 

今の所、分かっていることは、

(1)VISAICではできて、

(2) VC++ではできない

ということです。

今のところ、プログラムに問題があると考えています。

 

質問は、

プログラムに問題があるのか、その原因は?その説明を教えていただければ幸いです。

 

 

 

すべてをダウンロード
0 件の賞賛
メッセージ1/4
7,241件の閲覧回数
解決策
トピック作成者masaaki513が受理

masaaki513 様

 

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

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

 

プログラムを拝見させて頂きましたところ、コマンドの書き込みのところが

 

 

// st2=viWrite(vi,(ViBuf)"*IDN?\n",6,&retCount);
st2=viWrite(vi,(ViBuf)"IDN?NL",6,&retCount);

// st2=viWrite(vi,(ViBuf)"*IDN?\n",6,&retCount);

st2=viWrite(vi,(ViBuf)"IDN?NL",6,&retCount);

 

 

となっていました。

 

「*IDN?\n」 の6文字を送る場合ですと、コメントアウトすべきなのは下の方

ではないかと存じますが、いかがでしょうか。

 

またC言語用の NI-VISA のサンプルが用意されておりますので、そちらも

ご参考にして頂ければと存じます。

 

TCP/IP 通信用のサンプルですと、以下のパスになります。

 

Windows XP:

C:\Documents and Settings\All Users\Documents\National Instruments\NI-VISA\Examples\C\TCPIP

 

Windows 7: 

C:\Users\Public\Documents\National Instruments\NI-VISA\Examples\C\TCPIP

 

宜しくお願い致します。

 

*********************************************************************************
日本ナショナルインスツルメンツ株式会社 技術部 巳波裕介
Yusuke Minami, Applications Engineering, National Instruments Japan
技術サポートウェブページ: http://www.ni.com/support/ja
お問い合わせフリーダイヤル: 0120-527196
*********************************************************************************
メッセージ2/4
7,173件の閲覧回数

日本ナショナルインスツルメンツ株式会社 技術部 

巳波裕介 様

 

大変お世話になります。

 

コマンドを変えてみましたが、エラーが出てしまいました。

ただ、サンプルコードを使うと、

viReadの部分でBFFF0015というエラーコードが表示されました。

調べてみたところ、

VI_ERROR_TMOというエラーでタイムアウトしていることが確認されました。

そこで、viSetAttributeでTMOの時間を2秒から60秒にしてみたんですが、

変化はありませんでした。

 

 

それで、再度VISAICで確認してみたところ、

自分が見落としていたんですが、

"*IDN?NL"に対して、

viReadの部分で同様のエラー(BFFF0015)が出ていました。

ただし、装置の仕様の応答はありました。

"AQ2201 ・・・・・ \r\n"

それでてっきり、応答があると思っていました。

 

 

現在確認できていることはこの程度なのですが、

この原因を解決するために、良い方法はないでしょうか?

 

0 件の賞賛
メッセージ3/4
7,158件の閲覧回数

日本ナショナルインスツルメンツ株式会社 技術部 

巳波裕介 様

 

大変お世話になります。

 

サンプルコードの使うことでデータ取得することができました。

 

またVISAICでのエラーは、バッファが計測器から帰ってくる文字数より大きいためにおきたことで、

適切な値に修正すると、VISAICでもエラーが起きませんでした。

 

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

 

 

 

 

 

0 件の賞賛
メッセージ4/4
7,136件の閲覧回数