#Prologix GPIB-USB Converter
古めの計測器を読み取るのにGPIBポートから読み出すことは良くある。
PCと接続するのにGPIB-USB変換,GPIB-Ethernet変換あるいはGPIBと無線LANの変換を用いるといった手段があるが、今回はひょんなことからPrologix社製のGPIB-USB変換を手に入れて遊んだので、基礎動作の確認部分を記しておく。
http://prologix.biz/?sef_rewrite=1
GPIB-USB変換といえばNational InstrumentsのGPIB-USB-HS等があるが、格段に値段が安いので、もしかしたらオススメかもしれない。日本だと、Compass lab社から取り扱いがあるようだ。(もちろんPrologix社から直接購入するという手段もある。納期1週間程度らしい。私の場合は前者からで、納期も値段も当時の場合はお得であった。)
GPIBという規格の基礎についても、是非記事にしたいと思っている。
#必要なもの
重要な点として、Prologix GPIB-USBのUSB部分はUSB type-Bのジャック、受け部分になっているので、通常のPCと繋ぐのであればUSB typeA-TypeBケーブルが必要になる。
これとPCとPrologix GPIB-USBさえあればとりあえずOK。
#pyserialで通信してみる
該当機器に固有なコマンドについては、Prologix社のサイトにマニュアルが落ちているので、それを読めば大体のことがわかると思う。英語が苦手な人はCompass Lab社に和訳がある。
また、USBの認証にドライバーが必要な場合があるかもしれない。FTDI社のドライバー(VCP driverあるいはD2XX driverのどちらか)が必要だろう。
https://www.ftdichip.com/Drivers/VCP.htm
https://www.ftdichip.com/Drivers/D2XX.htm
ここではMac OSを用いた(High Sierra, Mojave)を用いた。ちなみにiMacではドライバーを入れずとも動作した。Macbookでもその可能性があるが、ドライバー無しの状態でテストすることを忘れてVCPドライバーを入れたので、私の方では未確認。
後学のため、Pythonスニペットをここでは提示しておく。Python3.6.3を用いた。pyserialが入っていない場合は適宜pip install pyserial
等でインストールしておくこと。
USBポートの指定があるので、機器をPCに繋いだ状態でls /dev/
等で確認し、適宜変更すること。
(Mac OSの場合)
/dev/cu.usbserial-XXXXX
/dev/tty.usbserial-XXXXX
のような形で存在していると思う。
import serial
try:
ser = serial.Serial('/dev/cu.usbserial-XXXXX',timeout=1)
print(ser.name)
print(ser.is_open)
print("address")
ser.write(b"++addr\n")
t=ser.read(256)
if len(t)>0:
print(t)
print("mode")
ser.write(b"++mode\n")
s=ser.read(256)
if len(s)>0:
print(s)
ser.close()
print(ser.is_open)
except serial.SerialException:
print("serial exception")
except serial.SerialTimeoutException:
print("timeout")
このGPIB-USB変換は++XXXXという形で++というものを文字列の先頭につけた形のコマンドを受け付ける。例えば今回は"++addr\n"でこの機器のGPIBアドレスを確認している(0-30で初期値は多分5)。送るのはバイナリなのでser.write()関数の引数の先頭にbを付けることを忘れずに。
同様にser.write(b"++mode\n")部分が動作モードの確認をしている。答えは0 or 1で、デバイスモードとコントローラモードにそれぞれ対応している。初期設定であれば1(コントローラモードを示す)が返ってくるはず。
GPIBアドレスやモードを書き換えるには、++addr 10や++mode 0などとすれば良い(コマンドと数字の間の半角スペースを忘れずに)。この場合、書き換えた先の数字は返ってこないので、確認するにはもう一度++addrコマンドや++modeコマンドを送る必要がある。