初心者向けプログラミング講座
第4回: 計測器制御の基礎知識
講座の概要については以下からご覧下さい。
目的
この回では、計測器制御の基礎知識を学びます。計測器とコンピュータを接続し、Pythonで制御するには、基本的な仕組みや知識が必要です。特に、VISAプロトコルや通信規格(例:USB、GP-IB)の基礎を理解し、どのように計測器とやり取りを行うかを学びます。本回の後半では、計測器のドライバ(コマンドセット)についても学びます。
学習内容
- 計測器の通信プロトコルと規格
- GP-IBとは?
- USB通信とは?
- VXI-11やSCPI/コマンドセットの役割
- VISAプロトコルとpyvisaの基本
- 計測器マニュアル(コマンドセット)の読み方
- 簡単なデバイス管理
1. 計測器の通信プロトコルと規格
計測器とコンピュータは、共通の規格やプロトコルを使って通信します。以下では、代表的な規格・プロトコルを紹介します。
- GP-IB(General Purpose Interface Bus)
概要 | 1970年代に開発された歴史のある計測器用通信・制御規格(規格名:ANSI-IEEE488)で、通称GP-IBと呼ばれます。主に電子計測機器で使用されており、コントローラ(PC)以外に最大14台の機器を接続可能で、計測器業界では広く普及しています。 |
特徴 | 堅牢なコネクタを使用しており、容易に外れることが無いため生産現場等に適しています。 1つのコントローラで複数の機器を制御可能 |
注意点 | PCに標準装備されていないため、USB/GP-IBコンバータやPCIカードを使用してPCに接続する必要があります。 |
- USB(Universal Serial Bus)
概要 | 言うまでもなくUSBは汎用的な通信規格でPCに標準装備されており、最近では多くの計測器がUSB接続に対応しています。 |
特徴 | 機器接続の簡便性(「プラグアンドプレイ」) 高速なデータ転送 |
注意点 | 計測器ごとにドライバをインストールする必要がある場合があります。 コネクタが容易に抜けてしまう構造のため、生産現場で使用するときは注意が必要です。 |
- SCPI(Standard Commands for Programmable Instruments)
概要 | 計測器を制御する際の標準的なコマンドセットで、多くの計測器で採用されています。 例:SCPIコマンド: *IDN?:計測器の情報(メーカー名、モデル名など)を問い合わせる。 MEAS:VOLT?:電圧を測定し、その値を取得する。 |
特徴 | 機器メーカが異なっても共通のコマンドで制御可能 |
注意点 | 100%互換ではないので、メーカや機種によって微妙に異なる場合がある。 |
2. VISAプロトコルとpyvisaの概要
一般的に計測器制御では、VISA(Virtual Instrument Software Architecture)という規格を用います。VISAは、異なる通信規格(GP-IB、USB、LANなど)を統一的に扱うためのプロトコルです。
(1) VISAプロトコルとは?
VISAプロトコルを利用すると、同じ手法で複数の規格(USB、GP-IB、LANなど)の計測器と通信することが可能であり、以下のような利点があります。
- どの通信規格でも同じコーディングスタイルを採用可能
- 異なるメーカーの計測器でも互換性のあるプログラムを作成可能
(2) PyVISAの役割
pyvisaは、VISAプロトコルをPythonで簡単に扱えるようにするライブラリです。
pyvisaを用いることで、Pythonから直接計測器にコマンドを送信/データ取得する操作ができます。
(3) PyVISAの基本使用方法
リソースマネージャの作成
import pyvisa
# リソースマネージャを作成
rm = pyvisa.ResourceManager()
接続された機器の検出
# 接続されているリソースをリスト表示
resources = rm.list_resources()
print("接続されたリソース:", resources)
計測器を開く
# 計測器に接続(例:リストの一番目のデバイスを使用)
instrument = rm.open_resource(resources[0])
コマンド送信と応答取得
# ID情報を取得
response = instrument.query("*IDN?")
print("計測器情報:", response)
3. 計測器マニュアル(コマンドセット)の読み方
計測器を制御する際、その計測器の「コマンドセット」を正しく理解する必要があります。コマンドセットは計測器メーカーが提供するマニュアルに記載されています。
主なマニュアルの項目
接続方法:
USB、GP-IB、LANなどの対応機器の接続手順が記載されています。
コマンド一覧:
SCPIや専用プロトコルのコマンドリストが記載されており、例えば次のようなものです。
*IDN? | 計測器情報の取得(型式、ファームウエアバージョンなど) |
MEAS:VOLT? | 電圧測定 |
OUTPUT:STATE ON | 機器の出力をONする |
エラーコード一覧:
製品固有のエラー発生時のコード一覧が記載されています。
具体例:コマンドリストの読み解き
例えば、マニュアルに以下のコマンド例が載っているとします。
コマンド例:
コマンド: MEASure:VOLTage:DC?
サンプル: MEAS:VOLT:DC?
応答例: +2.345
解釈:
MEASure:VOLTage:DC?は、直流電圧の測定値を取得するコマンドで、小文字部分は省略可能ということを意味しており、例では測定結果として+2.345Vが返されています。
4. 実践:計測器制御の基本操作
プログラム例:計測器の状態取得
以下に、pyvisaを使った計測器の基本操作の流れを示します。
import pyvisa
# リソースマネージャ作成
rm = pyvisa.ResourceManager()
# 接続されているデバイスを確認
resources = rm.list_resources()
print("接続されたリソース:", resources)
# 計測器を選択して接続
if resources:
instrument = rm.open_resource(resources[0]) # 最初のリソースを選択
print("接続された計測器:", instrument.query(‘*IDN?’)) # ID情報を取得
else:
print("計測器が接続されていません。")
5.演習問題
SCPI仕様のデジタルマルチメータを接続し、直流電圧測定結果を取得して表示するプログラムを作成してください。
解答例の表示
import pyvisa
# リソースマネージャ作成
rm = pyvisa.ResourceManager()
# 接続されているデバイスを確認
resources = rm.list_resources()
print("接続されたリソース:", resources)
# 計測器を選択して接続
if resources:
instrument = rm.open_resource(resources[0]) # 最初のリソースを選択
voltage = instrument.query(“MEAS:VOLT:DC?”) # 電圧測定結果を取得
print("電圧測定値:", voltage)
else:
print("計測器が接続されていません。")
次回予告
次回は、「計測器とPythonの接続」について学びます。本回で学んだ知識をもとに、実際に計測器からデータを取得し、Pythonで処理する方法を学びます。