IoTで使うPython入門Step3-計測 (8) DMM 2000 ② GPIB
Keithleyの2000は 6 1/2桁のDMMです。
Keithley 2000は、RS-232CとGPIBのインターフェースを搭載しています。第6回ではRS-232Cインターフェースを利用しました。ここではGPIBを利用します。GPIB-USB変換ケーブルは、Agilentの82357B使いました。
●GPIBの機能を有効にする
Keithley 2000のパネルの操作で、GPIB機能をONにします。
Shiftキーを押し、次にGPIBを押すと、画面にGPIB OFF が表示されます。GPIBがブリンクしているので、右矢印キーを押すとOFFがブリンクします。上もしくは下矢印キーでONとOFFがトグルに切り替わります。ONの表示が出ている状態で、Enterキーを押します。
ADDR:16の表示になるので、Exitキーを押すと設定画面を抜けます。次に電源を入れても、この設定は維持されています。
通信を行うと、Keithley 2000のパネルにTALKの表示が出ます。
●コマンド・プロンプトで接続を確認
IO Libraries suiteのプログラムの一つであるKeysight Connection Expert 2018を動かすとGPIB0::16::INSTRとして見つけてきます。*IDN?のレスポンスはKEITHLEY INSTRUMENTS INC.,MODEL 2000,0801917,A13 /A02 です。SCPIのコマンドは、ユーザーズ・マニュアル2000-900_J-Aug2010_User.pdfで読めます。
すでに、pyusb、pyvisa、pyvisa-pyのライブラリが入っていることをpipコマンドで確認します。
C:\Users\yoshidawin\Desktop>pip list
Package Version
---------- -------
ecdsa 0.13
esptool 2.5.1
paho-mqtt 1.4.0
pip 10.0.1
pyaes 1.6.1
pyserial 3.4
pyusb 1.0.2
PyVISA 1.9.1
PyVISA-py 0.3.1
setuptools 39.0.1
pyでpython3が動きます。対話モードの>>>が出ます。
>>>import visa >>>r = visa.ResourceManager() >>>r.list_resources() ('GPIB0::16::INSTR',...) >>>k = r.get_instrument("GPIB0::16::INSTR") >>>print(k.ask("*IDN?")) KEITHLEY INSTRUMENTS INC.,MODEL 2000,0801917,A13 /A02 |
USBではなく、GPIB0::16::INSTRを見つけてきました。型名の問い合わせにKEITHLEYと返答があったので、pyvisaライブラリを利用して正常に通信できていることがわかります。
問い合わせの簡単なプログラムk2000a.pyをエディタ(メモ帳)で作成し、デスクトップに置きます。
import visa
r = visa.ResourceManager()
k = r.get_instrument("GPIB0::16::INSTR")
print(k.query("*IDN?"))
print(k.query("read?"))
コマンド・プロンプトで実行します。
cd desktop py k.py |
●GPIBで通信
Keithley 2000は、電源ON時、直流測定モード、オート・レンジです。
メッセージによっては、SCPIコマンド列の並びは正しくてもエラーが出て実行されません。
import visa from time import sleep
visaAddr = "GPIB0::16::INSTR" r = visa.ResourceManager() instr = r.open_resource(visaAddr) print(instr.query('*IDN?')) sleep(1) instr.write(":CONF:VOLT") sleep(1) data = instr.query(":MEAS?") print("DC: ", float(data)) sleep(1) instr.write(":conf:VOLT:AC:range 10") sleep(5) data = instr.query(":meas?") sleep(1) print("AC: ", float(data))
このプログラムは、:CONF:VOLT、:conf:VOLT:AC:range 10は正しく実行されていません。最後のmeasは直流電圧を読んできます。Keysight Connection Expert 2018のInterractive IOを使うと正しく実行されます。
どこがおかしいかを調べるために、IO Monitorを実行してvisaのやり取りをキャプチャします。すると、上記のPythonのプログラムでは、デリミタ\nの前に . が追加されていることがわかりました。
Keysightの機器ではどうも無視されてエラーになっていなかったのですが、KeithleyのSCPIではコマンドのトークンが間違った文字が送られてきたと判断しているようです。pyvisaのexampleでは本DMMの事例が掲載されているので、動いていた時期(バージョン)があったようです。
利用者側では対処のしようがありません。
(※)pipは、Pythonのインストール時に入るライブラリ管理ソフトです。Python2だけをインストールしてあればよいのですが、Python3もインストールしていると、pipはどちらのライブラリをインストールしているか不明なことがあります。
筆者の環境は、最初Python2を入れました。次にPython3をインストールしました。コマンド・プロンプトでは、「python」はバージョン2が、「py」はバージョン3が動きます。「pip」はバージョン3にライブラリをインストールします。したがって、PC環境ではPython3で動いています。
(※)Keithley 2000はSCPIのコマンドの解釈ができないときに、エラー番号をディスプレイに表示します。マニュアルに英語の解説があります。説明はとても簡潔なので、意味が理解しにくいです。日本語で読めて参考になるエラー・メッセージの解説例があります。http://ena.support.keysight.com/e5071c/manuals/webhelp/jpn/product_information/error_messages/error_messages.htm