NI製品ディスカッション

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

VISA利用時のタイムアウトについて

初めまして,宜しくお願い致します.

RIGOL社のデジタルオシロDS1054Zで,labviewのvisaを用いて電圧の実効値,最大値,最小値,平均値の四種類を取得しようと試みています.

しかし,添付したブロックダイアグラムの画像の様に,二種類のデータまでは取得可能なのですが,これ以上取得データの種類を増やした場合,タイムアウトエラーが確認されるようになりました.

上述した四種類のデータを取得する為には,このエラーをどの様に解決すべきか,ご教授頂ければ幸いです.

宜しくお願い致します.

すべてをダウンロード
0 件の賞賛
メッセージ1/3
3,348件の閲覧回数

1つのVISAリソースIOに対して、リソースとエラークラスタがいくつも枝分かれしてダイアグラムが書かれていますが、そのように配線すると、VISA Write, VISA Readの実行順序が思った通りになりませんので、まずはそこから直したら良いかと思います。

 

何かコマンドを送るVISA Writeの直後には、それに対応するレスポンスを受け取るVISA Readが実行されなければならず、その後に次のコマンドを送り・・・としたいはずなので、1つのVISAリソースで実行するすべてのVISA関数は、シリアルに、一本線でリソース入力とエラークラスタ入力をつないでください。

 

さもないと、LabVIEWは、分岐した部分で「ここは並列実行可能」と判断してしまいます。分岐したワイヤ間では各分岐をまんべんなく渡り歩きながら1個ずつ関数を実行してしまうため、1本のワイヤにVISA Write→VISA Readと書いてあったとしても、実際に実行される順番は、VISA Write→別の分岐のVISA Write→元の分岐のVISA Read、などのように途中で別の分岐の関数を実行してしまい、おかしな順序になってしまうことがあります。こうなった場合、VISA Readは、前2つのVISA Writeのコマンドの返答をいっぺんに受け取ってしまうかも知れません。そうすると、もう1つあるはずのVISA Readでいつまで経っても返答が来ず、タイムアウトになってしまう・・・ということが予想されます。

 

同様な理由で、シーケンスストラクチャの中に入っているVISA Closeは、一本線の最後にくるようにしてください。今回のような書き方を増やした場合、もしかすると、どこかのVISA関数を実行しているときに、先にVISA Closeが実行されてしまう可能性があります。そうすると、タイムアウトではなく別のエラーになります。

 

まずは、1つのVISAリソースに対する関数は実行順序の通りに一本で数珠つなぎにして試してみて頂いたらと思います。

0 件の賞賛
メッセージ2/3
3,269件の閲覧回数

M.Shiraishi 様

 

ご丁寧なご提案を頂き,誠にありがとうございます.

visa関数を数珠つなぎで接続し直したところ,無事にプログラムが駆動致しました.

ご協力頂き,誠にありがとうございました.

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