NI製品ディスカッション

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

GPIB制御におけるibrdで発生するEABO(6)エラーについて

解決済み
解決策を見る

初回投稿です。

 

ただ今、大学で実験(温度特性PL)のために、測定系を組んでいます。

東京インスツルメンツ製のANDOR分光器と岩谷瓦斯のTCU-4極低温温度制御装置をGPIBで制御したいと考えています。

PCから直列に両装置を接続している状態です。

まず、GPIBドライバをインストールしました。

MAX上にて装置が認識できるようになりました。。

制御にはANDOR BASIC言語を使用しています。

次に通信を開始するためのプログラムを組みました。

通信確認として温度制御装置に温度を設定するためのコマンドをibwrtで送信してみたところ、温度制御装置のディスプレイ上で、プログラムコードに入力した温度に設定されたことが確認できました

温度制御装置のマニュアルによると、PCから送信する際のコマンドは

STX △2, △4, 1, xxx, ETX BCC CR LF

(※△はスペース、xxxは設定温度、BCCはブロックチェックキャラクタ)

となっています。

設定温度が温度制御装置のディスプレイ上で確認できたことから、送信したコマンドは間違いないと思われます。

 

次に、温度制御装置側から、リアルタイムでの実測温度を要求するコマンドをPCからibwrtで送信し、ibrdで受信を試みたところ、エラーの6番(EABO)を吐きました

ibrdでエラーになったことは間違いないです。

温度制御装置のマニュアルによると、PCから送信する際のコマンドは

STX △1, △1, ETX BCC CR LF

(※△はスペース、BCCはブロックチェックキャラクタ)

となっています。

STXとETXの間は、上記の温度設定コマンドで用いたBCC計算関数を使ってBCCを算出しているため、送信したコマンドに間違いはないと思われます。

 

つまり、温度制御装置に対して書き込みはできても読み取りができないということです。

 

色々調査をしてみた結果、EOI(EOS?)の不一致が原因ではないかという結論に至りました。

 ちなみに温度制御装置のマニュアルによると、このコマンドを送信した際に応答される出力フォーマットは

STX "yyy" ETX BCC CR LF

(※yyyはリアルタイムの実測温度などの情報)

となっています。

 

そこでお聞きしたいのですが、上記の出力フォーマットを受け取るためのEOI(EOS?デリミタ?)の設定はどのように行えばいいでしょうか?

もしくは、ibconfigなどのコマンドを用いて温度制御装置の設定を変えた方がいいでしょうか?

MAXを用いていろいろ試してみましたが、EABOのエラーが返ってくるばかりです。

他に考えられる原因としましては、温度制御装置がとても古いため(80年代もの)、IEEE 488.2に対応していない可能性もあります。

また、PCと温度制御装置の速度に関する互換性の問題かもしれません。

これらの解決策も教えていただけるとありがたいです。

 

現時点でのプログラムコードを添付します。

GPIBやBASIC初心者のため、理解不足な部分があると思いますが、どうかお願いします。

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

投稿主です。

添付ファイルが文字化けしていたため、PDFで添付します。

よろしくお願いします。

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

EABO(6)でgoogle検索すると、下記の資料が見つかりました。

GPIBエラーコードと一般的な解決方法(Part 1) 

ibeos関数が使えそうですが、試してみてはいかがでしょう?

 

How Do I Specify an EOS Character Using IBEOS? 

Certified LabVIEW Developer
There are only two ways to tell somebody thanks: Kudos and Marked Solutions

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

Pigniteさん

 

ご返信ありがとうございます。

それも試してみましたがダメでした。

ところが先ほど、別の方法で解決しました。

 

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

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

hiroki2017 さん

 

今後、同じような問題を抱えている方がいましたら参考になるかと思いますので、差し支えなければ解決策を共有していただけないでしょうか?

よろしくお願い致します。

0 件の賞賛
メッセージ5/8
3,844件の閲覧回数
解決策
トピック作成者hiroki2017が受理

お役に立てるかわかりませんが一応載せておきますね。

というのも、なぜこのようにして成功したのか分からないのです。

ibrdで機器からデータを読み出した後に、ibwrtで機器にEOSを書き込む…

謎です。

 

GPIBerror = 0x8000

board = ibfind("gpib0")

ibconfig(board, 3, 11)

dev = ibfind("dev3")

gosub .err

ibwrt(dev, "cl")

gosub .err

command$ = " 1, 1,"

comm$ = chr$(2) + command$ + chr$(3) + ~calcBCC(command$) + chr$(13) + chr$(10)

print(comm$)

ibwrt(dev, comm$)

gosub .err

ibrd(dev, a$)

ibwrt(dev, chr$(13) + chr$(10))

gosub .err

print("Status returned ="; a$)

 

 

.err

if(ibsta and GPIBerror) then

print("ERROR: GPIB error code is"; iberr)

end

endif

return

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

hiroki2017様

 

細かいことですが、下記URLのサンプルを参考にされた?
極低温温度制御装置のコマンド体系は、STX~ETX BCC CR LF?

 

ibwrt(dev, "cl")
gosub .err

 

上記は、サンプル機器用のコマンド(クリアコマンド?)と思いますので、不要なはずです。
動作に影響したら失敬!

 

ftp://www.astro.caltech.edu/users/amoore/ForMichael/Andor-camera/Andor%20Manuals/INSTRUCTION%20MANUA...

 

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

基本的にはそちらのマニュアルを参考にして作成しています。

プログラミング自体初心者に近いのでコピーペーストに頼りました。

コマンド体系はその通りです。

 

クリアコマンドの件、了解です!

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