导航
常见问题
穿越技术迷雾,指引测试之光
为电子测量仪器保驾护航,技术支持,一路相随
SCPI基础指令入门:工程师零基础教程

如果你刚接触仪器控制,面对满屏的编程手册不知从何下手,别担心——SCPI(Standard Commands for Programmable Instruments)就是帮你摆脱“手动按键”的那把钥匙。接下来安泰测试科技从零开始,不讲复杂的理论,只告诉你SCPI是什么、指令怎么写、如何用代码控制仪器。看完就能上手。


一、SCPI是什么?一句话说清

SCPI是一套让所有可编程仪器“听懂同一种语言”的标准指令集。无论你用的是示波器、信号源、万用表还是源表,只要它支持SCPI(目前99%的商业仪器都支持),你就可以用同一套语法来控制它。

更重要的是,SCPI指令基于ASCII文本,不挑通信接口——USB、LAN、RS232、GPIB都可以,编写好的代码换个接口基本不用改。


二、两种最基础的指令类型

所有SCPI指令都可以归为两类:

设置类指令(Set):让仪器执行某个动作或修改参数。例如 *RST 重置仪器,:VOLTage 5 把电压设为5V。

查询类指令(Query):向仪器询问当前状态或测量值。例如 *IDN? 查询仪器的厂商、型号、序列号,:MEASure:VOLTage:DC? 查询直流电压读数。

初学者拿到仪器的第一件事,就是发送 *IDN? 验证通信是否正常。如果仪器能正确返回身份信息,说明连接和指令格式都对了。


三、理解SCPI的“树状结构”

看到几百页的指令手册别慌。SCPI命令采用了分层树状结构,就像电脑里的文件夹路径。例如:

:MEASure:VOLTage:DC?

这个命令的意思是:进入“测量(MEASure)”文件夹 → 进入“电压(VOLTage)”子文件夹 → 进入“直流(DC)”子文件夹 → 执行查询(?)。冒号就像路径分隔符。

再比如 :FREQ:CW 2.45E9 表示把信号源的连续波频率设为2.45GHz。FREQ是根级,CW是次级,空格后跟参数值。

理解了这种“地址导航”的思路,再长的命令你也能读明白。


四、三个核心语法规则

规则一:大写字母是缩写,小写可省略

SCPI命令规范中,大写字母是必须保留的缩写,小写部分可以省略。例如 TRIGger:LEVel 可以简写为 TRIG:LEV,但不能写成 TRIGGER:LEVEL(混用大小写的扩展形式不被识别)。实际使用时不区分大小写,TRIG:LEV、trig:lev、Trig:Lev 都等价。

规则二:参数默认单位要心里有数

如果不写单位,仪器会使用默认单位:电压默认伏特(V),时间默认秒(s),频率默认赫兹(Hz)。所以 :FREQ:CW 1000 就是设为1000Hz(1kHz)。小心别把1000当成1MHz。

规则三:多条指令可以串联

用分号;可以在一条语句里发送多个指令。例如 TRIG:SOUR CH1; LEV 2 同时设置了触发源和触发电平。如果需要在串联中回到顶层根路径,加一个冒号:TRIG:SOUR CH1;:CHAN2:STAT ON。


五、实战:用Python发送第一条SCPI指令

下面以最常见的Python环境为例,教你如何真正控制一台仪器。

第一步:安装PyVISA库

打开终端(命令提示符),执行:

text

pip install pyvisa

如果你想避开安装NI-VISA驱动的麻烦,可以加装纯Python后端:

text

pip install pyvisa-py

第二步:连接仪器

以LAN接口为例(最推荐新手,没有驱动兼容问题),先在仪器上设置好IP地址(比如192.168.1.10),然后在Python中写:

python

import pyvisa

rm = pyvisa.ResourceManager()

# 资源字符串根据实际IP修改,常见格式为 TCPIP0::192.168.1.10::INSTR

instrument = rm.open_resource('TCPIP0::192.168.1.10::INSTR')

instrument.write('*RST')   # 重置仪器

print(instrument.query('*IDN?'))  # 查询并打印仪器身份信息

运行成功的话,你会看到类似“Keysight Technologies,33220A,XXX,2.0”的返回信息。恭喜,你已经入门了。

其他常用指令速览

*RST :复位到出厂状态

:SOUR:VOLT 5 :设置源表或电源输出电压为5V

:MEAS:VOLT:DC? :测量直流电压(万用表/源表)

:TIM:SCAL 0.001 :示波器时基设为1ms/div

:TRIG:EDGE:SLOP RISE :触发沿设为上升沿

:SYST:ERR? :查询最近一次错误信息(调试利器)


六、新手最容易踩的四个坑

坑一:忘记发送命令终止符

SCPI要求每条指令以换行符(LF,即\n)结束。绝大多数高级库(如PyVISA的.write())会自动加上,但如果你用socket或串口直接发送字符串,务必手动补上\n,否则仪器会“沉默”。

坑二:设置后立即查询,没给仪器反应时间

像 :VOLT 10; :MEAS:VOLT? 这样的串联,可能在电压还没稳定输出时就去读数。稳妥做法:先发送 *OPC?(操作完成查询),等待返回“1”后再读测量值;或者在两条指令间加一个短暂的延时(如 time.sleep(0.01))。

坑三:短格式/长格式混搭

TRIG:LEV 是正确的短格式,TRIGGER:LEVEL 是正确的完整格式,但 TRIGG:LEVE 就是错误的。万一报错,马上用 :SYST:ERR? 查看错误代码,它通常会告诉你“Undefined header”。

坑四:参数不写单位造成的误解

例如 :TRIG:HOLD 1e-6 会被解释为1微秒(仪器默认秒)。如果你心里想的是1毫秒而没写 ms,结果就差了1000倍。养成习惯:关键参数明确带单位(如 1ms)。

 

SCPI并不复杂。它的树状结构像文件路径,它的指令语法有明确规则,而且几乎所有现代仪器都支持。只要掌握 *IDN?、*RST、:SYST:ERR? 这三条“保命指令”,再加上基本的查询和设置语法,你就可以从手动按键升级到自动化测试了。

如果你在实际操作中遇到任何问题——无论是仪器连接、指令调试,还是想搭建一套完整的自动化测试系统,随时可以联系我们。

安泰测试科技,专注电子测量仪器领域,提供一站式解决方案:仪器销售、租赁、维修、校准,以及技术支持18682985902(同微信)