04-20-2017 07:22 AM
初回投稿です。
ただ今、大学で実験(温度特性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初心者のため、理解不足な部分があると思いますが、どうかお願いします。
解決済! 解決策の投稿を見る。
04-20-2017 07:25 AM
投稿主です。
添付ファイルが文字化けしていたため、PDFで添付します。
よろしくお願いします。
04-24-2017 02:57 AM
EABO(6)でgoogle検索すると、下記の資料が見つかりました。
ibeos関数が使えそうですが、試してみてはいかがでしょう?
04-25-2017 08:29 AM
Pigniteさん
ご返信ありがとうございます。
それも試してみましたがダメでした。
ところが先ほど、別の方法で解決しました。
ご協力ありがとうございました。
04-28-2017 05:08 AM
hiroki2017 さん
今後、同じような問題を抱えている方がいましたら参考になるかと思いますので、差し支えなければ解決策を共有していただけないでしょうか?
よろしくお願い致します。
04-30-2017 04:11 PM
お役に立てるかわかりませんが一応載せておきますね。
というのも、なぜこのようにして成功したのか分からないのです。
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
04-30-2017 09:31 PM
hiroki2017様
細かいことですが、下記URLのサンプルを参考にされた?
極低温温度制御装置のコマンド体系は、STX~ETX BCC CR LF?
ibwrt(dev, "cl")
gosub .err
上記は、サンプル機器用のコマンド(クリアコマンド?)と思いますので、不要なはずです。
動作に影響したら失敬!
04-30-2017 10:15 PM
基本的にはそちらのマニュアルを参考にして作成しています。
プログラミング自体初心者に近いのでコピーペーストに頼りました。
コマンド体系はその通りです。
クリアコマンドの件、了解です!