LabVIEWでGPIB読み取りを複数回続けておこなうとEABOエラーが発生する



使用ソフトウェア: LabVIEW Development Systems
使用ソフトウェア・バージョン: 7.0
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア:

問題:
GPIB デバイスから複数データ読み取りを考えています。たとえば、デバイスから合計50バイトのデータを受信する場合、複数の読み取りを使用して、10バイトずつ読み取りたいです。

対話式制御(IBIC)を使用すると、ibrd 10を呼び出すとデバイスから10バイトずつで50バイトのデータを読み取ることができます。

LabVIEWで同じことをおこなおう場合、始めのGPIB読み取りは10バイトを読み取りますが、その後の読み取りではタイムアウトを表すEABOエラーが発生します。

IBICでは動作するのに、LabVIEWでは複数読み取りができないのはなぜですか?


解決策:
IBICとLabVIEWでは、計測器に対して複数の読み取り処理方法に違いがあります。

IBICで計測器から読み取る際、始めの読み取りだけはデバイスのアドレス指定を伴います。その後すべての読み取りは、同じ計測器と通信していると見なすため、デバイスにおいて各読み取りで再アドレス指定がおこなわれません。ibwrtのような他の関数を呼び出すときだけは、再度アドレス指定がおこなわれません。デバイス指定の有効化/無効化は、ibconfig ibcreaddr # 関数で出来ます。#が1で有効化、0で無効化されます。

LabVIEWで計測器から読み取る際、ループ内で「GPIB読み取り」関数を使用して複数の読み取りをおこなうことが一般的です。「GPIB読み取り」関数は、次のような処理をおこなうと例外として常に計測器のアドレス指定をおこないます。ループ内に「GPIB読み取り」関数があり、各読み取りで計測器をアドレス指定している場合、LabVIEWは毎回デバイスのアドレス指定をおおこないます。

2つのアプローチ間の違いは、アドレス指定が1回なのかどうかです。デバイスのアドレス指定をおこなう際、基本的にibcmd関数を使用してトークもしくはリスンをデバイスに対しておこないます。通常、トークおよびリスンを確立するためにだけ1度計測器のアドレス指定をおこなう必要がありますが、いくつかの計測器では毎回ibrdもしくはibwrt関数呼び出しでこの情報が必要となります。

この問題の原因は次のとおりです。毎回デバイスのアドレス指定がされるとこれが現在の通信終了を示すと見なされるので、その後の読み取りでアドレス指定をおこなう場合、出力バッファを消去しデバイスからの読み取りがなくなるためタイムアウトエラーが発生します。

この問題を解決するには、始めのGPIB読み取りで計測器のGPIBアドレスを指定してその後のGPIB読み取りにアドレス文字列入力を配線しないことです。LabVIEWは、別の読み取りセットが必要になるまで再アドレス指定をおこないません。この方法については、添付にあるGPIB Readdressing Option 1.viというサンプルを参照してください。

もうひとつの解決方法は、「GPIB初期化」関数の再アドレッシングの要求入力をFALSEに設定して再アドレスを無効化することです。このケースでは、GPIB読み取りでは通常のアドレス指定をおこないます。この方法については、添付にあるGPIB Readdressing Option 2.viというサンプルを参照してください。


関連リンク:

添付:
GPIB Readdressing Option 1.vi
GPIB Readdressing Option 2.vi

Address.zip Address.zip 内は LabVIEW 5.0.x のファイルです。


報告日時: 09/30/1994
最終更新日: 04/27/2016
ドキュメントID: 01TA54EO