2019年2月14日木曜日

pythonで超伝導マグネット電源から磁場の値を読み込む。closeの方法も。

先日メモしたように,Cryogenicの超マグ電源から,シリアル通信で現在の磁場の値を読み込むと,

>>> import visa
>>> rm = visa.ResourceManager()
>>> instr1 = rm.open_resource('ASRL1::INSTR')
>>> cmd = instr1.query('get o\n')
>>> cmd
'OUTPUT: 0.0000 TESLA AT 0.0 VOLTS \r\n'

のように,余計な文字列がたくさんついてきます。
どうやら,pythonはこういうときの処理がとても得意みたいです。

split()で空白で区切ると単にlistになるのですが,

>>> cmd.split()
['OUTPUT:', '0.0000', 'TESLA', 'AT', '0.0', 'VOLTS']
>>> type(cmd.split())
<class 'list'>

このままでは当然strのままです。

>>> type(cmd.split()[1])
<class 'str'>

これをfloat()にしてあげればよくて,

>>> field = float(cmd.split()[1])
>>> field
0.0
>>> type(field)
<class 'float'>
>>> 

のようにみごとに分割した文字列から一発で磁場の値を浮動小数点に変換できます。
ちなみにcloseの方法は簡単で,

>>> instr1.close()
>>> exit()
bhoona:~ yishii$ 

のように,ResourceManagerから持ってきたデバイス名に.close()をつけるだけです。
前回のエラーはすっかり消えました。

pythonすごいです,おどろくほど短いコードで済みます。