2008年5月1日木曜日

PyVISA でGPIB測定器の制御 その1

機能確認編

前にも書きましたけど PyVISA を試すには VISA32.dll か相当のDLLが必要なので、NI か Agilent から入手してください。測定器を何か買うとそれ風の CD がついてきます。もちろん PyVISA もダウンロードしてインストールしてください。

Agilent の場合、 Agilent connection expert 14.0 という CDがあって、それを CDインストールすると、各種ファイルやツールがインストールされます。

ソフトを試す前に、PC と計測器が GPIBケーブルや、USB、シリアルケーブルで正しく接続され認識されているか確かめます。

Agilent の場合 Agilent IO control というツールが使えます。NI は なんたらSPY とかいうソフトだったと思います。それをつかって VISA リソースネームを調べます。ついでに VISA32.dll の場所やパスも分かると楽です。

では、
  1. PyVISA をインポートします。
  2. 周波数カウンターとマルチメータのVISAリソースを設定します。
  3. 周波数カウンターとマルチメータを初期化します。
  4. 測定値を読みます。
この .write .read だけで殆どの、取扱説明書にある C や QuickBasic のソースから Python に書き換えられると思います。遅いのは測定器の初期化の設定を変えたりコマンドを変えたりとかで高速化出来ます。私は、数年前の HP のデスクトップと USB-GPIB変換と 53132A 54401A でPython 使って 10Hz。分解能を犠牲にすれば 20-50Hz でサンプリングできてます。ここからは、測定器設定屋さんの腕の見せ所(笑)、Python とは違う話なのでやめておきます。

「スクリプト言語だから遅い」というのは昔の話で、YouTube の動画見れるくらいの PC なら Windows でも大丈夫です。

シリアルケーブルで、測定器を制御するには、測定器側の追加の設定も結構必要です。 Agilent IO control とか SPY ソフト?できちんと認識されるレベルまでセットアップしてから、自分のソフトを試しましょう。Agilent のマルチメータは、REMOTE コマンド送ってから1秒くらい sleep() 入れたらうまく動きました。



## $Id$
##
## Win32 (Win XP)
## Python2.5 (for win32)
## PyVISA1.1 (for win32 Python2.5)
##

from pyvisa.vpp43 import visa_library
visa_librery.load_library(r'c:\WINDOWS\system32\agvisa32.dll')
from visa import *
from time import time

## initialize
M1 = instrument('GPIB::22') # multimeter Agilent 34401A
C1 = instrument('GPIB::4') # counter Agilent 53132A

M1.write('*RST')
M1.write('*CLS')
M1.write('VOLT:DC:NPLC 1')
M1.write('VOLT:DC:RANG 10')

C1.write('*RST')
C1.write('*CLS')
C1.write(':FUNC "FREQ 1"')
C1.write(':FREQ:ARM:STAR:SOUR IMM')
C1.write(':FREQ:ARM:STOP:SOUR TIM')
C1.write(':FREQ:ARM:STOP:TIM 0.1')


## measure
M1.write('READ?')
print M1.read()
print time()

C1.write('READ?')
print C1.read()
print time()

raw_input()

0 件のコメント: