National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 72 24°C PM2.5 13
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 05

SCPI 指令語法

指令階層、長短寫法、查詢、共同指令與參數
Interaction 25 minute(s)

Learning Objectives

  • 看懂 SCPI 的指令階層、長短寫法、選用節點與數字字尾
  • 分辨設定指令、查詢指令與 IEEE 488.2 共同指令(*IDN?、*RST 等)
  • 寫出正確的參數:數字、MIN/MAX、ON/OFF、字元資料
  • 知道儀器怎麼回報錯誤:錯誤佇列、SYST:ERR? 與常見錯誤代碼

儀器的共同語言

前幾課的程式送給儀器的是 MEAS:VOLT:DC?、OUTP ON 這種文字。這些指令遵循 SCPI(Standard Commands for Programmable Instruments,常念成 skippy)。 SCPI 在 1990 年發表,建立在 IEEE 488.2 之上:IEEE 488.2 規定了訊息的基本格式與一組共同指令(*IDN?、*RST 等), SCPI 再規定各種量測功能的指令怎麼命名、怎麼分層。目前的 SCPI 文件(1999 年版)由 IVI Foundation 提供。

SCPI 的目標是:同一種功能,不同廠牌、不同型號的指令盡量長得一樣。量直流電壓,大多數電錶都接受 MEAS:VOLT:DC?。 雖然實際上每個廠牌仍有自己的擴充與差異,但規則相同,看懂一台的手冊,就比較容易讀懂另一台。

本課的指令表是模擬儀器(Uedu Sim)的寫法;真實儀器以該儀器的程式設計手冊為準。

指令階層、長短寫法、選用節點

SCPI 指令像檔案路徑一樣分層,用冒號 : 分隔,每一層叫一個節點。手冊上常這樣寫:

[SOURce:]VOLTage[:LEVel][:IMMediate][:AMPLitude] <數值>
MEASure:VOLTage[:DC]?
  • 長短寫法:每個節點的大寫字母是短寫法,整個字是長寫法。VOLTage 可以寫 VOLT 或 VOLTAGE,只能是這兩種,VOLTA、VOLTS 都不行。
  • 大小寫不分:大寫只是用來標示短寫法,送出時 volt、Volt、VOLT 都一樣。
  • 選用節點:方括號 [ ] 裡的節點可以省略。所以 VOLT 5、SOUR:VOLT 5、SOURce:VOLTage:LEVel:IMMediate:AMPLitude 5 是同一個指令。
  • 數字字尾:有多個通道的節點可以帶編號,例如示波器的 :CHANnel2:SCALe 0.5(CHAN2)。不寫編號就是 1。
  • 查詢:結尾加 ? 是查詢,儀器會回答,例如 VOLT? 回答目前的電壓設定。只有查詢會產生回應。
  • 共同指令:星號開頭,來自 IEEE 488.2,每台儀器都有:*IDN?(你是誰)、*RST(重設)、*CLS(清除狀態)、*OPC?(做完了嗎)。

程式裡建議用短寫法(打字少)或長寫法(容易讀),同一個專案統一一種就好。

逐步看:五種寫法,同一個指令

對電源供應器送出五種寫法的電壓設定,每次用 VOLT? 查回來。看電源供應器面板的設定值,以及最後錯誤佇列是不是空的。

參數、分號與回應

指令頭和參數之間用空白分開,多個參數用逗號分開:APPL 5,0.02。常見的參數種類:

種類 例子 說明
數字 VOLT 4.5、FREQ 1E3 可以用科學記號;有些儀器也接受單位字尾,以手冊為準
MIN/MAX/DEF VOLT MAX 這個設定的最小值、最大值、預設值
布林 OUTP ON、OUTP 1 ON/OFF 或 1/0;查詢時通常回答 1 或 0
字元資料 FUNC SQU 從一組關鍵字裡選一個,也有長短寫法
字串 FUNC "VOLT" 用引號包起來的文字

分號 ; 可以把多個指令放在同一行:VOLT 4.5;:CURR 0.015。這裡有個規則要注意:分號之後的指令,若開頭沒有冒號, 真實儀器會把它接在上一個指令的路徑下(目前路徑規則),例如 MEAS:VOLT?;CURR? 的第二個指令會被解讀成 MEAS:CURR?。 開頭加冒號則從根節點重新開始。不想記這個規則,就在分號後面一律加冒號。 本課程的模擬儀器也照這個規則解讀,可以在下面的指令解析器輸入 MEAS:VOLT?;CURR? 看看。

一行裡有多個查詢時,回答也用分號串在一起,例如 OUTP?;:OUTP:MODE? 得到 1;CC。

逐步看:MAX、布林與分號

看通訊紀錄裡的指令與回答:一行送兩個設定、一次查兩個值。電源供應器面板會顯示設定值的變化。

儀器怎麼告訴你「錯了」

送出錯誤的指令時,儀器不會回一段錯誤訊息,程式也不會當掉;它把錯誤放進自己的錯誤佇列(先進先出),等你用 SYST:ERR? 一筆一筆讀出來。 每一筆是「代碼,"說明"」,讀到 0,"No error" 表示佇列空了。代碼依範圍分類:

範圍 類別 例子
-100~-199 指令錯誤:語法不對 -113 Undefined header(不認得的指令)、-104 Data type error(參數型別錯)
-200~-299 執行錯誤:語法對,但做不到 -222 Data out of range(超出範圍)、-224 Illegal parameter value(不允許的值)
-300~-399 儀器本身的錯誤 硬體或韌體的問題
-400~-499 查詢錯誤 -410 Query INTERRUPTED(上一個查詢的回答還沒讀走,又送新指令)

另外,*STB? 回答狀態位元組:其中一個位元表示「錯誤佇列裡有東西」,程式可以先看它再決定要不要讀錯誤。

逐步看:四個錯誤指令與錯誤佇列

送出四個錯誤的指令:通訊紀錄裡只有「→」,沒有任何「←」回應。最後用迴圈把錯誤佇列讀完。

互動練習:SCPI 解析器

輸入一行 SCPI 按「送出」,右邊的指令樹會標出這行走過的節點(綠色)與省略的選用節點(黃色),左邊列出長短寫法的對照、參數與錯誤代碼。 錯誤會留在下方的錯誤佇列,送 SYST:ERR? 一次取出一筆。依序完成任務:

小測驗:語法規則

1.

手冊寫 MEASure:CURRent[:DC]?。下面哪一個寫法合法?

2.

送出 VOLT 5;CURR 0.1 和 VOLT 5;:CURR 0.1,在真實儀器上有差別嗎?

3.

下面哪一個指令會讓儀器產生回應、需要程式讀走?

第 1 次作答

小測驗:錯誤與回應

1.

程式送出 VOLT 40(上限 30 V),接著 SYST:ERR? 會得到什麼?

2.

下面的程式把儀器回答的字串拆開,會印出什麼?

reply = "1;CC\n"
state, mode = reply.strip().split(";")
print(state == "1", mode)
3.

錯誤佇列裡有三筆錯誤,程式送一次 *CLS 再送 SYST:ERR?,會得到什麼?

第 1 次作答

重點整理

  • SCPI 建立在 IEEE 488.2 之上:共同指令(*IDN?、*RST、*CLS、*OPC?)+分層的量測指令。
  • 節點用 : 分層;短寫法=大寫的部分,只接受短寫法或長寫法;大小寫不分;[ ] 是選用節點;CHAN2 是數字字尾。
  • 結尾 ? 是查詢,只有查詢會回應。參數:數字、MIN/MAX/DEF、ON/OFF、字元資料、字串。
  • ; 串接多個指令,分號後面加 : 從根開始最保險;多個查詢的回答也用 ; 串起來。
  • 錯誤進錯誤佇列,用 SYST:ERR? 讀到 0,"No error" 為止:-100 指令錯誤、-200 執行錯誤、-300 儀器錯誤、-400 查詢錯誤。

下一課介紹 VISA 與 PyVISA:資源字串、ResourceManager、write/read/query 與逾時,把序列埠那些位元組與終止字元的細節交給 VISA 處理。

這一課完成了!
Next lesson:VISA 與 PyVISA
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。