🌊

LabRAD入門②:測定機器の接続

2021/10/09に公開

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であればこちらこちらに数多くある。クライアントの書き方サーバーの書き方の話や非同期通信の話も参照。

  1. LabRADを起動:コマンドプロンプトでstart labrad
  2. シリアルサーバーを起動(シリアルで接続されたデバイスがある場合): start python serial_server.py
  3. GPIBサーバーを起動(GPIBで接続されたデバイスがある場合):start python gpib_server.py
  4. GPIBデバイスマネージャーを起動(GPIBで接続されたデバイスがある場合): start python gpib_server.py
  5. Data Vaultサーバーを起動
  6. 各種装置のサーバーを起動

毎回各種サーバーを起動するのは面倒なので下記のような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)の電圧値を出力

使用機器: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秒の間隔を空ける。

https://zenn.dev/yseeker/articles/fa2667dc19de5e

参考
https://github.com/labrad/labrad/wiki
https://github.com/labrad/pylabrad/wiki
https://github.com/FeldmanLab/labrad-servers
https://github.com/afylab/afyservers
https://github.com/afylab/LabRAD-Device-Electrical_Measurement-ONline_Software

Discussion