EXCEL VBA と GP-IB 経由の測定器
で遊んでいる今日この頃。
先日購入した、
Hewlett-Packard 5316B Universal Counter
で送信はできるが受信がうまくできない。
CONTEC社製GP-IB(PCI)FLを使用。
CONTEC社製の診断プログラムでは、送受信とも可能である。
EXCEL VBA とGP-IBで接続されている測定機器と通信するのに
EasyGPIB (木下清美氏) のコマンド群を利用する。
eg.CardOpen
eg.CardCLose
eg.ActiveAddress
eg.AsciiLine (送信時と受信時)
eg.WAITmS
の5つのコマンド(6種類の使い方)で良い。
eg.AsciiLine で受信すると、
HP 3478A は通るのに、
HP 5316B は、エラー13000タイムアウト発生
となる。
EasyGPIB (木下清美氏) の説明書を読むと
EOIは常に有効です。EOIがアクティブにならない通信はサポートしていません。
の記述あり。
この辺がポイントだろうと予測する。
ドライバライブラリ API-PAC(W32)
http://www2.contec.co.jp/dl_data/LZF832/LZF832_031023.PDF
http://seyo.info/pdf/LZF832_031023_ALL.pdf
http://seyo.info/pdf/LZF832_031023_P33.pdf
http://seyo.info/pdf/LZF832_031023_P34.pdf
http://seyo.info/pdf/LZF832_031023_P44.pdf
GpListenBinary と GpDelim の2つに絞る。
VBAをトレースしてGpListenBinaryの戻り値を見ると、
HP 3478A は通る。 ==> 戻り値
2 EOI受信終了
HP 5316B は、エラー13000タイムアウト発生。 ==> 戻り値
254 タイムアウト
HP 5316B の受信バッファの内容を調べると、
「計測数値CR+LF」を3回受信している。
EasyGPIB での GpDelim の設定を見ると、
Delim(0&,1&)と記述を見つける。
Delim
0 : 未使用
1 : CR+LF
2 : CR
3 : LF
Eoi : EOI
0 : 未使用
1 : 使用
Delimは、使用していない。つまりEOIを受信して、受信終了するしかない。
受信時にCR+LFが来ているので、Delim(1&,1&)と記述の変更を試みる。
HP 3478A は通る。 ==> 戻り値
1 デリミタ及びEOI受信終了
HP 5316B は通る。 ==> 戻り値
0 デリミタ受信終了
HP 5316B でも受信できるようになった。
設定を変更したので、どこかで悪い影響が出ているかも知れない。
また受信時は、生のデータを直接セルに入れるのではなく、
NULLや制御文字など、テキストで現れないコードを
除去する関数を通している。
(除去する関数は、自前です。)
EasyGPIBで木下清美氏は、なぜEOIに、こだわったのか
それはきっと理由があるのだろう。