Skip to main content

Command Palette

Search for a command to run...

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

Updated
•2 min read•View as Markdown
打造你的自動化實驗室:儀器控制入門 (2)

第二部分:Hello, Instrument! —— 你的第一個控制程式

完成了基礎環境設定後,我們終於可以開始動手寫程式了!在這個部分,我們的目標很簡單:確認電腦能成功找到儀器,並與它進行最基本的「對話」。

1. 尋找你的儀器:VISA 位址 (Resource Names)

在我們能控制儀器之前,必須先知道它的「地址」。在 VISA 的世界裡,這個地址被稱為 VISA Resource Names (資源名稱)。它是一串獨一無二的字串,用來標識連接到電腦上的每一台儀器。

如何找到這個地址?

最可靠的方法是使用 NI-VISA 安裝時附帶的工具:NI MAX (Measurement & Automation Explorer)。

  1. 從 Windows 的「開始」選單中找到並開啟 NI MAX。

  2. 在左側的設定樹中,展開「My System」 -> 「Devices and Interfaces」。

  3. 您會看到所有被 NI-VISA 偵測到的硬體介面,例如 GPIB0、ASRL1 (序列埠)、USB Devices 或 Network Devices。

  4. 點擊您儀器所連接的介面,在中間的視窗中,您應該能看到您的儀器。

  5. 選中您的儀器,右側的「設定」分頁中就會顯示 VISA Resource Name。它通常長得像下面這樣:

    • USB 介面: USB0::0x1234::0x5678::MYSERIAL::INSTR

    • GPIB 介面: 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("儀器連線已關閉。")

執行程式:

  1. 務必將程式碼中的 VISA_ADDRESS 變數值換成您自己的儀器位址。

  2. 儲存檔案並在終端機中執行程式碼。

如果一切順利,您應該會看到類似以下的成功訊息:

正在嘗試連接到: USB0::0x1234::0x5678::MYSERIAL::INSTR
成功連接!儀器身份資訊: Keysight Technologies,34461A,MY57004116,A.02.18-02.40-02.18-00.51-01-01
儀器連線已關閉。

恭喜!您已經成功地用 Python 控制了您的第一台儀器。在下一個部分,我們將學習如何發送更多指令來實際操作儀器。

引用資料

More from this blog

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

第七部分:終極整合 —— 自動化效率量測與繪圖 在前面的章節中,我們學會了如何獨立控制各種儀器。現在,是時候將它們組合起來,完成一個在電力電子領域中至關重要的量測任務:自動化效率測試。 效率是衡量電源轉換器性能的核心指標。手動測試效率不僅耗時、繁瑣,而且容易出錯。透過 Python,我們可以將整個流程自動化,在幾分鐘內完成數十個測試點的量測與繪圖。 1. 硬體與接線設置 這個任務需要三台儀器與一個待測物 (Device Under Test, DUT) 協同工作。 儀器清單: 電源供應器 (...

Oct 21, 20254 min read
打造你的自動化實驗室:儀器控制入門 (7)

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

第六部分:讓程式更健壯 —— 最佳實踐 到目前為止,我們的腳本都能順利運作,但它們更像是「一次性」的腳本。在真實的專案中,我們需要考慮程式的穩定性、可讀性和可重複使用性。 1. 簡化資源管理:with 陳述式 在之前的範例中,我們都使用 try...finally 來確保 instrument.close() 一定會被執行。這雖然可行,但 Python 提供了一個語法來處理這種「需要獲取和釋放資源」的情境,那就是 with 陳述式。 PyVISA 的資源物件支援 with 陳述式。當程式碼區塊結...

Oct 21, 20252 min read
打造你的自動化實驗室:儀器控制入門 (6)

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

第五部分:實戰演練 —— 使用 Keysight DAQ 進行多通道量測 現在,我們來看看如何控制一個功能強大的資料擷取系統 (Data Acquisition System, DAQ),例如 Keysight DQA970A。 DAQ 的強項在於它擁有多個通道,可以同時或依序量測多個不同的物理量,如電壓、溫度、電阻等。 1. 任務目標 我們的任務是設定一個多通道的掃描清單,並一次性讀取所有通道的數值: 設定通道 101 用於量測直流電壓 (DC Voltage)。 設定通道 102 用於量...

Oct 21, 20251 min read
打造你的自動化實驗室:儀器控制入門 (5)

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

第四部分:實戰演練 —— 操作 Chroma 電子負載 學會了控制電源供應器後,我們來挑戰另一種在電力電子測試中不可或缺的儀器:電子負載 (Electronic Load)。電子負載可以用來模擬待測物 (如電源供應器、電池) 的負載情況。 我們將以 Chroma 可程式化直流電子負載 為例。 1. 任務目標 這次的任務是模擬一個設備正在消耗 0.5A 的恆定電流: 設定電子負載為「定電流 (Constant Current, CC)」模式。 設定拉載電流值為 0.5A。 開啟負載輸入 (開...

Oct 8, 20251 min read
打造你的自動化實驗室:儀器控制入門 (4)

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

第三部分:實戰演練 —— 控制 Chroma 電源供應器 在前一個部分,我們學會了如何與儀器建立連線並讀取其身份。現在,讓我們來做一些更有趣、更實用的事情:實際控制一台儀器來完成一個自動化任務。 我們將以常見的 Chroma 可程式化直流電源供應器 為例。 1. 任務目標 我們的目標是編寫一個 Python 腳本,自動完成以下操作: 設定電源供應器的輸出電壓為 5.0V。 設定電流上限為 1.0A。 開啟電源輸出。 等待 2 秒鐘。 讀取實際的輸出電壓與電流。 關閉電源輸出。 2...

Oct 8, 20252 min read
打造你的自動化實驗室:儀器控制入門 (3)

工程師的成長方程式

8 posts

深度探討一位硬體測試工程師如何跨越專業界線,系統性地優化職涯與人生。內容涵蓋:實用Python代碼應用、測試工作哲學、建立FIRE路徑的投資理財方法、個人成長心得與優質書評。讓你的時間與金錢都獲得最佳配置,使成長與自由有跡可循。