前回の記事でVISA通信について解説いたしましたが、今回は、VISA通信の実装方法について解説します。
NI-VISAをインストール
VISAを利用するには、VISAを制御するためのライブラリが必要となります。
VISAライブラリは複数企業が開発していますが、今回は「National Instruments 社」が提供しているNI-VISAというライブラリを利用します。
NI-VISAのインストーラーはこちらからダウンロードが可能です。
Python編
PythonではPyVISAというPythonライブラリを利用します(PyVISAの中では、さらにNI-VISAを利用しています)。
筆者の環境
Python:3.9.6
PyVISA: 1.12.0
1. PyVISAのインストール
$ pip install pyvisa
インストールができたら、実装していきましょう。
2. Resourceリストを取得
import pyvisa
rm = pyvisa.ResourceManager()
visa_list = rm.list_resources()
ここでの「Resource」はデバイスのことを指しています。
VISAに対応したデバイスが、PCと接続されていれば、その接続数の分だけvisa_listに格納されます。
3. 接続したいデバイスのResourceを確保
inst = None
for src in visa_list:
inst = rm.open_resource(src)
out = inst.query('*IDN?')
if out == “Device Name”:
break
多くのデバイスで「*IDN?」(IEEE-488標準で規定)と送信すると、そのデバイス固有の名前が応答されます。
上記コードでは、”Device Name”を対象のデバイス名に変更することで、対象のデバイスのResourceを取得できます。
また、送信のみだけだと`write`ですが、送信かつ応答を受け取りたい場合は、`query`を利用します。
もちろん、`write`と`read`を組み合わせても同様なことを実現できます。
デバイス名が分からなければ、対象のデバイスだけPCに接続し、「*IDN?」を送信してあげると、そのデバイス名だけ取得できます。
実際には、1つしかデバイスがつながっていない場合は、visa_list[0]を利用して、
inst = rm.open_resource(visa_list)
と、処理してあげれば、そのデバイスを操作することができます。
複数デバイスが接続される場合は、デバイス名を知っていることで、visa_listに格納される順番を気にしないで、対象のデバイスのみを操作することができます。
4. コマンドを送信
inst.write(“command”)
5. 応答を受信
message = inst.read()
基本的には、デバイスにコマンドを送信して、その応答を受けることがほとんどなので、`query`で対応ができます。
`read`では、終端文字やエンコーディングの指定を行うことができます。
6. ResourceとResourceManagerの解放
inst.before_close()
inst.close()
rm.close()
この後、instで`write`や`query`などを実行すると、Exceptionが発生します。
7. 全コード
import pyvisa
# Get Resource List
rm = pyvisa.ResourceManager()
visa_list = rm.list_resources()
# Connect a specified device
inst = None
for src in visa_list:
inst = rm.open_resource(src)
out = inst.query('*IDN?')
if out == “Device Name”:
break
# Send Command
inst.write(“command”)
# Read response
message = inst.read()
print(message)
# Close Resource and Resource Manager
inst.before_close()
inst.close()
rm.close()
おわりに
本記事では、VISA通信のPythonプログラミング方法を記載しました。
今後、C#やLabViewのプログラミング方法を追記していきます。