初心者向けプログラミング講座
第5回: 計測器とPythonの接続

講座の概要については以下からご覧ください。
目的
この回では、いよいよPythonを使って計測器(GP-IBやUSB接続)を制御し、実際にデータを取得します。計測器とPythonを接続する方法について手順を追って確認し、pyvisaライブラリを使った計測器制御の基本スクリプトを作成します。また、VISAリソースの管理と、SCPIコマンドを使った計測器の操作方法を詳しく学びます。
学習内容
- 計測器の接続手順
- pyvisaを使用したPythonと計測器の接続
- 計測器の基本コマンド(SCPI)の送受信
- コマンドを実践するPythonコード
- エラー処理とデバッグの基本
- 演習問題
1. 計測器の接続手順
計測器をPythonから制御するには、以下の手順で作業を行います。
(1) ハードウェアの接続
必要なケーブルを接続する
計測器とPCを、USBまたはGP-IBケーブルで接続します。
デバイスドライバのインストール
必要な場合は、計測器メーカーが提供しているデバイスドライバをインストールします。
多くの場合、メーカーの公式サイトからダウンロード可能です。
合わせて読みたい
(2) 計測ソフトウェアの確認
計測機器メーカーのソフトを確認
通常、メーカーが提供する制御・設定用ソフトウェアが付属していることがあります。(例:Keysight IO Libraries Suite)
Python以外のソフトで計測器が正常に認識されているか確認しましょう。
VISAライブラリのインストール
NI-VISAやその他VISAライブラリを先にインストールしておく必要があります。
NI-VISA(National Instruments):NI-VISA公式サイト
VISAライブラリが正常にインストールされていないと、pyvisaで通信が行えません。
(3) PyVISAをインストールする
プログラムリストから Anaconda Navigatorを起動し、右上の選択メニューから New → Terminalを開きます。
Terminalから以下のコマンドで、pyvisaをインストールします。
pip install pyvisa
2. PyVISAを使用したPythonと計測器の接続
次に、PyVISAを使ってPythonから計測器と通信する基本的な操作を学びます。さきほどの Anaconda Navigatorから Jupyter Notebook を起動してください。
(1) リソースマネージャの作成
PyVISAでは、ResourceManagerを使って接続可能な計測器(リソース)のリストを取得できます。
import pyvisa
# リソースマネージャを作成
rm = pyvisa.ResourceManager()
# 接続可能な計測器(リソース)のリストを表示
resources = rm.list_resources()
print("接続可能なリソース:", resources)
(2) 計測器に接続する
計測器に接続するには、rm.open_resource() を使用します。レスポンスとして計測器のコントロールオブジェクトが返されます。
# 計測器オブジェクトを取得(最初のリソースを使用)
if resources:
instrument = rm.open_resource(resources[0]) # 最初の計測器に接続
print("計測器に接続しました:", resources[0])
# ID取得コマンドで計測器情報を取得
response = instrument.query("*IDN?") # *IDN? は計測器のSCPIコマンド
print("計測器情報:", response)
else:
print("接続可能な計測器がありません。")
コマンドの意味
*IDN?: 計測器のデバイス識別情報(型式、バージョンなど)を返すSCPIコマンドです。これはSCPIに対応された多くの計測器で標準的に利用できます。
合わせて読みたい
3. 計測器の基本コマンド(SCPI)の送受信
Pythonでは、計測器にコマンドを送信して動作させたり、応答を受け取ることができます。以下のようなメソッドを使います。
(1) コマンドの送信
write()を使用します。
instrument.write("OUTPUT:STATE ON") # 出力をONにする
(2) 応答の取得
query()を使用することで、コマンド送信と応答取得を一度に行えます。
response = instrument.query("MEAS:VOLT?") # 電圧値を取得する
print("測定結果:", response)
(3) 設定値の取得
read()で応答を「受け取る」のみ行う場合もあります。query()を使わないケースで利用します。
instrument.write("MEAS:VOLT?")
response = instrument.read()
print("受信データ:", response)
4. コマンドを実践するPythonコード
以下は、実際に計測器から測定値を取得するコード例です。ここでは簡易的に*IDN?(計測器情報)とMEAS:VOLT?(電圧測定)を使用します。
プログラム例:計測器にコマンドを送る
import pyvisa
# リソースマネージャを生成
rm = pyvisa.ResourceManager()
# 接続リソースを取得
resources = rm.list_resources()
print("接続可能なリソース:", resources)
# 計測器に接続
if resources:
instrument = rm.open_resource(resources[0]) # 最初の計測器を選択
print("接続した計測器:", resources[0])
# 計測器の識別情報を取得
idn_response = instrument.query("*IDN?")
print("計測器情報:", idn_response)
# 電圧を測定(例として MEASure:VOLTage?)
voltage_response = instrument.query("MEAS:VOLT?")
print("測定された電圧:", voltage_response)
# 接続を終了
instrument.close()
else:
print("接続可能な計測器が見つかりません。")
5. エラー処理とデバッグ方法
計測器制御では、通信エラーや予期しない値が返ってくる場合があります。これを適切に処理するため、例外処理(try/except)を活用します。
エラー処理の例
try:
# 計測器に接続
instrument = rm.open_resource(resources[0])
print("計測器に接続成功")
except Exception as e:
print("接続時にエラーが発生しました:", e)
6. 演習問題
演習問題 1: 計測器リストの取得
以下を実行するプログラムを作成してください。
接続されている計測器のリストを取得し表示する。
最初の計測器に接続し、*IDN?コマンドで計測器情報を表示する。
解答例を表示
import pyvisa
# リソースマネージャを生成
rm = pyvisa.ResourceManager()
# 接続リソースを取得
resources = rm.list_resources()
print("接続可能なリソース:", resources)
# 計測器に接続
if resources:
instrument = rm.open_resource(resources[0]) # 最初の計測器を選択
print("接続した計測器:", resources[0])
# 計測器の識別情報を取得
instrId = instrument.query("*IDN?")
print("計測器のID:", instrId)
# 電圧を測定(例として MEASure:VOLTage?)
voltage = instrument.query("MEAS:VOLT?")
print("測定された電圧:", voltage)
# 接続を終了
instrument.close()
else:
print("接続可能な計測器が見つかりません。")
演習問題 2: SCPIコマンドの送受信
以下を実行するプログラムを作成してください。
計測器に任意のSCPIコマンド(例:MEAS:CURR?)を送信。
測定値を取得して画面に出力する。
解答例を表示
import pyvisa
# リソースマネージャを生成
rm = pyvisa.ResourceManager()
# 接続リソースを取得
resources = rm.list_resources()
print("接続可能なリソース:", resources)
# 計測器に接続
if resources:
instrument = rm.open_resource(resources[0]) # 最初の計測器を選択
print("接続した計測器:", resources[0])
# 電流を測定
current = instrument.query("MEAS:CURR?")
print("測定された電流:", current)
# 接続を終了
instrument.close()
else:
print("接続可能な計測器が見つかりません。")
次回予告
次回は、「測定データの取得と基本的な処理」について学びます。計測器からデータを取り込み、Pythonで加工や保存を行う方法を詳しく解説します!