Learning Objectives
- 比較 RS-232、USB、LAN、GPIB 在距離、速度、台數、設定與隔離上的差別
- 依量測情境選擇合適的介面,說出取捨
- 看懂 VISA 資源字串:介面種類、位址與 INSTR
- 知道 GPIB 的位址範圍、串接方式與台數、線長的限制
電腦和儀器之間的那條線
上一課認識了儀器,這一課看電腦和儀器怎麼連起來。儀器背板上常見四種介面:
| 介面 | 標準 | 一句話 |
|---|---|---|
| RS-232(序列埠) | TIA-232(前身是 EIA RS-232) | 最老、最簡單,一條線接一台,速度慢 |
| USB | USB-IF 的 USBTMC(Test and Measurement Class) | 插上就能用,適合桌上的一兩台儀器 |
| LAN(乙太網路) | LXI(LAN eXtensions for Instrumentation) | 可以很遠、可以很多台,網路天生有電氣隔離 |
| GPIB | IEEE 488 | 專為儀器設計的匯流排,一條線串很多台,舊型與高階儀器常見 |
GPIB 最早是惠普(HP)在 1960 年代發展的 HP-IB,1975 年成為 IEEE 488 標準,1987 年的 IEEE 488.2 又規定了共同的訊息格式與指令(第 05 課的 *IDN? 就來自這裡)。
LXI 聯盟成立於 2004 年,把網路連線的儀器規格統一起來。四種介面現在都還在用:新儀器多半同時有 USB 與 LAN,GPIB 與 RS-232 則在既有的測試系統裡繼續服役。
對寫程式的人來說,好消息是 VISA 把這些差異包起來了:不管是哪一種線,程式都是 open_resource(資源字串) 之後 write、query,
只有資源字串不同。
資源字串:從名字看出接在哪裡
VISA 用資源字串(resource string)指定一台儀器,各段用 :: 分隔:
| 介面 | 資源字串範例 | 各段的意思 |
|---|---|---|
| 序列埠 | ASRL3::INSTR |
ASRL=非同步序列埠,3=COM3 |
| USB | USB0::0x5544::0x0001::PS0001::INSTR |
USB 介面 0、廠商 ID、產品 ID、序號 |
| LAN(VXI-11) | TCPIP0::192.168.1.20::INSTR |
網路介面 0、儀器的 IP 位址 |
| LAN(HiSLIP) | TCPIP0::192.168.1.20::hislip0::INSTR |
較新的網路儀器協定(TCP 埠 4880) |
| LAN(原始 socket) | TCPIP0::192.168.1.20::5025::SOCKET |
直接連到儀器的 TCP 埠,LXI 規格列的 SCPI 埠是 5025 |
| GPIB | GPIB0::22::INSTR |
GPIB 介面卡 0、儀器位址 22 |
最後的 INSTR 表示「一台儀器」。程式拿到的資源字串是普通的 Python 字串,可以用 split("::") 拆開來判斷介面種類。
(原始 socket 的埠號各廠牌可能不同,以手冊為準。)
逐步看:列出所有儀器,從資源字串判斷介面
模擬工作台上有四台儀器:電源供應器接 USB、數位電錶同時接 GPIB 與序列埠(COM3)、函數產生器與示波器接網路。
看 list_resources() 回傳的元組,以及迴圈怎麼用第一段判斷介面。
GPIB:一條線串很多台
GPIB 的線兩端接頭可以堆疊:一台儀器的接頭上再插下一條線,一台串一台(也可以接成星狀)。所有儀器共用同一組訊號線, 所以每台儀器要有自己的位址,電腦送指令時先指定位址,只有那一台會回應。常見的限制:
- 位址 0~30,同一條匯流排上不能重複;電腦端的介面卡(控制器)通常用位址 0。
- 一條匯流排含控制器最多 15 台。
- 線的總長不超過 20 m,也不超過「2 m × 台數」。
位址設錯時,VISA 找不到那台儀器,PyVISA 會丟出 VisaIOError,錯誤代號 VI_ERROR_RSRC_NFOUND(資源不存在)。下一個範例故意先用錯的位址。
逐步看:位址錯了會怎樣
電錶的 GPIB 位址是 22。程式先試 9,再試 22;用 try/except 接住找不到儀器的錯誤,程式不會中斷。
選介面的幾個實務考量
- 距離:USB 每段 5 m、RS-232 約 15 m、GPIB 總長 20 m;要跨房間就用網路。
- 台數:一個序列埠一台;GPIB 一條匯流排最多 15 台;USB 靠集線器;網路靠交換器。
- 設定:RS-232 要兩邊參數一致(下一課的鮑率等),GPIB 要設位址,網路要設 IP,USB 最省事。
- 隔離與雜訊:USB、RS-232、GPIB 的電腦與儀器共地,接地不良時可能有雜訊;乙太網路埠依規格有電氣隔離。
- 資安:網路連線的儀器放在受保護的實驗室網路,不要直接暴露在網際網路上。
- 轉接器:USB 轉 RS-232、USB 轉 GPIB 都很常見,讓新電腦也能接舊儀器;VISA 會把它們當成對應的介面。
小測驗:資源字串
資源字串 GPIB0::7::INSTR 中的 7 是什麼?
下面的程式會印出什麼?
name = "TCPIP0::192.168.1.20::INSTR"
parts = name.split("::")
print(len(parts), parts[1])
程式開啟 GPIB0::9::INSTR 時得到 VI_ERROR_RSRC_NFOUND。下面哪一個不是可能的原因?
小測驗:介面的取捨
一套舊的測試系統用 GPIB 串了 8 台儀器,要再加一台新電錶。新電錶的位址應該怎麼設?
示波器要把一百萬點的波形傳回電腦,而且儀器就在電腦旁邊。下面哪一個介面最不適合?
重點整理
- 四種介面:RS-232(簡單、慢、一對一)、USB(即插即用、5 m)、LAN(遠、多台、有隔離)、GPIB(儀器匯流排、15 台、20 m)。
- VISA 把介面差異包起來,程式只差在資源字串:
ASRL3::INSTR、USB0::廠商::產品::序號::INSTR、TCPIP0::IP::INSTR、GPIB0::位址::INSTR。 - GPIB 位址 0~30 不能重複;位址錯誤得到
VI_ERROR_RSRC_NFOUND。 - 網路儀器放在受保護的實驗室網路裡。
下一課從最簡單的序列埠開始:鮑率、資料格式、終止字元與逾時,用 pyserial 和儀器第一次對話。