撰寫: 2022/2/5
發佈: 2022/12/7
Python利用pyvisa控制儀器
VISA Virtual Instrument Software Architecture是廣泛應用於儀器控制的API應用程式介面,作為控制電腦與測試儀器工業標準,所有的測試儀器製造商都支援;在此標準支援多種通訊的資源透過多種I/O介面,如GPIB、RS232、LAN(TCP/IP protocal)、USB(USBTMC protocol),以VISA定義的傳輸及結構協定,就可以傳送控制儀器的SCPI(Standard Commands for Programable Instrument)控制命令達到儀器自動量測的目的;目前在C或是Visual C++/C#/Basic都可以很方便的include VISA library就可使用控制函式來控制儀器,同樣的Python 可從 VISA 共享庫(.dll、.so、.dylib)調用函數,就可以藉由VISA來控制儀器。所以在此Python就透過pyvisa來控制儀器。
在官網https://pypi.org/project/PyVISA/可以看到它的使用要求如下:
- Python (tested with 3.6+)
- VISA (tested with NI-VISA 17.5, Win7, from www.ni.com/visa and Keysight-VISA )
可以知道pyvisa底層還是建構在VISA 共享庫(.dll、.so、.dylib)來調用函數,所以在Windows/Linux作業系統下還是需要裝Keysight IO library。
pyvisa安裝
在Windows作業系統安裝pyvisa透過pip如下:
>>python -m pip install -U pyvisa
Collecting pyvisa
Downloading PyVISA-1.11.3-py3-none-any.whl (189 kB)
|████████████████████████████████| 189 kB 467 kB/s
Requirement already satisfied: typing-extensions in c:\users\philipchang\appdata\local\programs\python\python38\lib\site-packages (from pyvisa) (3.7.4.3)
Installing collected packages: pyvisa
WARNING: The scripts pyvisa-info.exe and pyvisa-shell.exe are installed in 'C:\Users\philipchang\AppData\Local\Programs\Python\Python38\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pyvisa-1.11.3
WARNING: You are using pip version 21.0.1; however, version 21.3 is available.
You should consider upgrading via the 'C:\Users\philipchang\AppData\Local\Programs\Python\Python38\python.exe -m pip install --upgrade pip' command.
安裝完可以網路線連接儀器的網路端口,以下列簡單的程式就可以輕易控制儀器:
import time
import pyvisa
if __name__ == "__main__":
inst_ip = "192.168.1.100"
# Open visa
rm = pyvisa.ResourceManager()
tm_visa_addr = f"TCPIP0::{inst_ip}::hislip1::INSTR"
tm_inst = rm.open_resource(tm_visa_addr)
result = ""
tm_inst.write("*RST")
result = tm_inst.query("*IDN?").strip()
print(result)
在此簡單說明上述程式如下:
- inst_ip = "192.168.1.100":這裡的192.168.1.100是儀器的IP address,當然控制電腦要在同一個IP domain。
- f"TCPIP0::{inst_ip}::hislip1::INSTR":是VISA控制介面的標準描述位置,在此為"TCPIP0:: 192.168.1.100::hislip1::INSTR",或是TCPIP0:: 192.168.1.100::inst0::INSTR;若是透過USB則VISA位置可能會是” USB0::0x2A8D::0xA718::MY59210009::0::INSTR”。
- tm_inst.write("*RST"):對儀器只下控制命令沒有回傳結果,就呼叫.write("")函式,在此*RST是標準通用的SCPI命令,對儀器進行reset。
- result = tm_inst.query("*IDN?").strip():對儀器下控制命令並要求回傳結果,就呼叫. query ("")函式,在此*IDN?是標準通用的SCPI命令,要求儀器回報名字。
後記
本文為個人學習的經驗,後續有所改進將再發文分享;本人因工作因素發文後並不會經常檢視讀者問題,對於沒法及時回覆問題敬請見諒!
若覺本文對讀者有所幫助,可回覆感想及你的分享!謝謝!
留言列表