close

撰寫: 2022/2/5

發佈: 2022/12/7

Python利用pyvisa控制儀器

VISA Virtual Instrument Software Architecture是廣泛應用於儀器控制的API應用程式介面,作為控制電腦與測試儀器工業標準,所有的測試儀器製造商都支援;在此標準支援多種通訊的資源透過多種I/O介面,如GPIBRS232LAN(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;若是透過USBVISA位置可能會是” USB0::0x2A8D::0xA718::MY59210009::0::INSTR”
  • tm_inst.write("*RST"):對儀器只下控制命令沒有回傳結果,就呼叫.write("")函式,在此*RST是標準通用的SCPI命令,對儀器進行reset
  • result = tm_inst.query("*IDN?").strip():對儀器下控制命令並要求回傳結果,就呼叫. query ("")函式,在此*IDN?是標準通用的SCPI命令,要求儀器回報名字。

後記

本文為個人學習的經驗,後續有所改進將再發文分享;本人因工作因素發文後並不會經常檢視讀者問題,對於沒法及時回覆問題敬請見諒!

若覺本文對讀者有所幫助,可回覆感想及你的分享!謝謝!

 

 

arrow
arrow
    文章標籤
    Python
    全站熱搜

    Philip4G 發表在 痞客邦 留言(0) 人氣()