打造你的自動化實驗室:儀器控制入門 (2)

第二部分:Hello, Instrument! —— 你的第一個控制程式
完成了基礎環境設定後,我們終於可以開始動手寫程式了!在這個部分,我們的目標很簡單:確認電腦能成功找到儀器,並與它進行最基本的「對話」。
1. 尋找你的儀器:VISA 位址 (Resource Names)
在我們能控制儀器之前,必須先知道它的「地址」。在 VISA 的世界裡,這個地址被稱為 VISA Resource Names (資源名稱)。它是一串獨一無二的字串,用來標識連接到電腦上的每一台儀器。
如何找到這個地址?
最可靠的方法是使用 NI-VISA 安裝時附帶的工具:NI MAX (Measurement & Automation Explorer)。
從 Windows 的「開始」選單中找到並開啟 NI MAX。
在左側的設定樹中,展開「My System」 -> 「Devices and Interfaces」。
您會看到所有被 NI-VISA 偵測到的硬體介面,例如
GPIB0、ASRL1(序列埠)、USB Devices或Network Devices。點擊您儀器所連接的介面,在中間的視窗中,您應該能看到您的儀器。
選中您的儀器,右側的「設定」分頁中就會顯示 VISA Resource Name。它通常長得像下面這樣:
USB 介面:
USB0::0x1234::0x5678::MYSERIAL::INSTRGPIB 介面:
GPIB0::12::INSTR乙太網路:
TCPIP0::192.168.1.100::INSTR序列埠:
ASRL3::INSTR
請將這個字串完整地複製下來,我們馬上就會用到它。
2. SCPI 指令:與儀器溝通的語言s
幾乎所有現代的可程式化儀器都支援一套名為 SCPI (Standard Commands for Programmable Instruments) 的標準指令集。這就像是儀器的「API」,讓我們可以用文字指令來查詢狀態或設定參數。
最基本、也最常用來測試連線的 SCPI 指令就是 *IDN?。
*IDN?的意思是 "Identification Query" (身份查詢)。當儀器收到這個指令後,它會回傳一串包含其製造商、型號、序號和韌體版本的字串。
如果我們能成功發送 *IDN? 並收到儀器的回覆,就代表我們的軟硬體設定都正確無誤!
3. 實戰程式碼:你的第一個儀器控制腳本
現在,讓我們把所有東西組合起來。打開您喜歡的程式碼編輯器,建立一個新的 Python 檔案,然後貼上以下程式碼。
import pyvisa
# --- 設定區 ---
# 將下方字串替換成您在 NI MAX 中找到的儀器 VISA 位址
VISA_ADDRESS = '請在這裡填入你的儀器位址'
# 建立一個資源管理器 (Resource Manager)
# 這是 PyVISA 的主要進入點,它會負責尋找並管理所有 VISA 資源
rm = pyvisa.ResourceManager()
try:
# 使用 rm.open_resource() 來開啟與儀器的連線
# 這會回傳一個儀器物件 (instrument object),我們之後的操作都透過它進行
print(f"正在嘗試連接到: {VISA_ADDRESS}")
instrument = rm.open_resource(VISA_ADDRESS)
# 設定通訊超時時間 (單位:毫秒)
# 避免程式在儀器沒有回應時無限期等待
instrument.timeout = 5000 # 5 秒
# 清除儀器的 I/O 緩衝區,這是一個好習慣
instrument.clear()
# 發送 SCPI 指令 '*IDN?' 並讀取儀器的回覆
# .query() 是一個方便的函式,它會自動完成「寫入指令」和「讀取回覆」兩個步驟
identity = instrument.query('*IDN?')
# .strip() 可以移除回傳字串前後多餘的空白或換行符
print(f"成功連接!儀器身份資訊: {identity.strip()}")
except pyvisa.errors.VisaIOError:
# 這個錯誤通常表示找不到儀器或無法建立連線
print(f"錯誤: 無法找到或連接到儀器 '{VISA_ADDRESS}'。")
print("請檢查:")
print("1. 儀器是否已開機並正確連接到電腦。")
print("2. VISA 位址是否正確無誤。")
print("3. NI MAX 中是否能看到此儀器。")
# 列出找到的所有儀器,方便使用者除錯
print(f"\n系統上找到的 VISA 資源: {rm.list_resources()}")
except Exception as e:
# 捕捉其他所有可能的意外錯誤
print(f"發生未知錯誤: {e}")
finally:
# finally 區塊中的程式碼無論是否發生錯誤,都一定會被執行
# 確保在程式結束時,無論成功或失敗,都關閉與儀器的連線
if 'instrument' in locals():
instrument.close()
print("儀器連線已關閉。")
執行程式:
務必將程式碼中的
VISA_ADDRESS變數值換成您自己的儀器位址。儲存檔案並在終端機中執行程式碼。
如果一切順利,您應該會看到類似以下的成功訊息:
正在嘗試連接到: USB0::0x1234::0x5678::MYSERIAL::INSTR
成功連接!儀器身份資訊: Keysight Technologies,34461A,MY57004116,A.02.18-02.40-02.18-00.51-01-01
儀器連線已關閉。
恭喜!您已經成功地用 Python 控制了您的第一台儀器。在下一個部分,我們將學習如何發送更多指令來實際操作儀器。




