🌊
LabRAD入門②:測定機器の接続
LabRADのRegistryにシリアルで接続された測定機器を追加
シリアルで接続された測定機器の場合はlabradのレジストリに使用する測定機器のサーバー名とcomポート番号(windowsならデバイスマネージャーから確認可)を入力する必要がある。一旦追加してしまえば次回からはこの操作は不要。
import labrad
cxn = labrad.connect()
reg = cxn.registry()
###サーバー名が登録されていないとき###
reg.dir() #サブディレクトリとファイルをリストが入ったtupleとして返す。
# index 0がサブディレクトリ、index 1がファイル:([Directry1, Directry2...], [file1, file2, file3...])
reg.cd('Servers') # 'Servers'というディレクトリに移動し、パスをリストとして返す。例えば、['', 'Servers']は現在 ~/Serversというパスのディレクトリにいることを示す。 親フォルダに行く場合はreg.cd('..')
reg.mkdir('server_name') # ディレクトリの作成し、作成したディレクトリ内のパスをリストとして返す。'server_name'には測定装置に対応したサーバー名(ex, 'SIM900', 'SR830')を入力(各装置のserverのpythonファイルの中に記載。例えば、[このファイル](https://github.com/afylab/LabRAD-Device-Electrical_Measurement-ONline_Software/blob/master/DEMONS%20Servers/ami_430.py)では97行目にname = 'AMI_430'とあるのでサーバー名は'AMI_930')
# 今作ったばかりの'server_name'ディレクトリに行き、'Links'というディレクトリを作成
reg.cd('server_name')
reg.mkdir('Links')
reg.cd('Links')
# reg.cd(['','Servers','server_name','Links'])というコマンドでホームディレクトリから行きたいserver_nameの下のLinksにダイレクトに移動できる。cdコマンドのcd Servers\server_name\Linksと似たような感じ。
# 'device_name'というサーバーにCOM番号を入力
reg.set('device_name',('computer_name_serial_server', 'COM#'))
実際の例:maxwellという名前のPCにシリアル接続されたsim900(COM 4)という装置を使用するためにregistryにCOMポート情報を追加。
import labrad
cxn = labrad.connect()
reg = cxn.registry()
#Registryの中の.\Servers\SIM900\Linksというディレクトリに移動
# Resistryに'SIM900'とその下のLinksが無ければ上記のようにreg.mkdir()で作成。
reg.cd(['', 'Servers', 'SIM900', 'Links'])
#PC名がmaxwellで, 装置のつながっているCOMポートが4のとき
reg.set('SIM900', ('maxwell_serial_server','COM4'))
実際の測定装置サーバーを接続&制御
Python3で使える各種装置のサーバー例はこちらを参考に。Python2であればこちらやこちらに数多くある。クライアントの書き方とサーバーの書き方の話や非同期通信の話も参照。
- LabRADを起動:コマンドプロンプトで
start labrad
- シリアルサーバーを起動(シリアルで接続されたデバイスがある場合):
start python serial_server.py
- GPIBサーバーを起動(GPIBで接続されたデバイスがある場合):
start python gpib_server.py
- GPIBデバイスマネージャーを起動(GPIBで接続されたデバイスがある場合):
start python gpib_server.py
- Data Vaultサーバーを起動
- 各種装置のサーバーを起動
毎回各種サーバーを起動するのは面倒なので下記のようなbatchファイルを作成しておくと便利。
start /min labrad
TIMEOUT 7 /NOBREAK
start /min python serial_server.py
TIMEOUT 1 /NOBREAK
start /min python gpib_server.py
TIMEOUT 1 /NOBREAK
start /min python gpib_device_manager.py
TIMEOUT 1 /NOBREAK
start /min python data_vault.py
TIMEOUT 1 /NOBREAK
start /min python SR830.py
実際の例1: ロックインアンプ(SR830)の電圧値を出力
import labrad
#Labrad インスタンスを作成
cxn = labrad.connect()
# Labrad上にロックインアンプ(SR830)のインスタンスを作成
LA = cxn.sr830
# LA.list_devices()で接続されているすべてのSRS830のデバイス名を表示
#デバイスを選択
LA.select_device()
# GPIB BUSを通じて接続しているときは、GPIBアドレスでデバイスを指定することもできる(次の例はPCの名前がsarachikでロックインアンプのGPIBアドレスが4のとき)
# LA.select_device('sarachick GPIB Bus - GPIB0::4::INSTR')
#ロックインアンプのX成分とY成分を取得
v_x, v_y = LA.x(), LA.y()
print(v_x, v_y)
実際の例2: SIMシリーズ(SIM900+SIM928)で直流電圧値をある範囲で連続的に制御
使用機器:SIM900 + SIM928 (直流電圧)
使用したSIM900 サーバーはこちら
import labrad
import numpy as np
cxn = labrad.connect()
sim = cxn.sim900
sim.select_device()
v_start = 0.0 # 始電圧値
v_end = 5.0 # 終電圧値
v_points = 200 # 離散化する点の数
vglist = np.linspace(v_start, v_end, num = points) #実際に入力する電圧値
# 始電圧値から終電圧値まで連続的に制御
for v_val in v_points:
sim.dc_set_voltage(out_ch,float("{0:.4f}".format(v_val)))
time.sleep(0.1) #点と点との間に0.1秒の間隔を空ける。
参考
Discussion