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