2. SCPI协议基础
SCPI(Standard Commands for Programmable Instruments,可编程仪器标准命令)是仪器控制领域最广泛使用的命令语言标准。它并不规定仪器必须实现哪些功能,而是规定“当仪器要实现某个功能时,命令应该怎么写、怎么解析、怎么响应”。理解SCPI的起源、它与IEEE 488.2的层次关系,以及命令分类与语法规则,是设计稳定仪器控制系统的前提。
一、起源与发展:从各自为政到统一命令集
20世纪80年代,GPIB(IEEE 488)总线已经解决了“仪器如何物理连接”的问题,但每台仪器使用厂商私有的命令集。同一功能在不同品牌仪器上可能是 RANGE 2、VOLT:RANG 2 或 SET RANGE 2,导致测试程序难以复用。1987年前后,惠普等厂商推动形成TMSL(Test and Measurement Systems Language),后由SCPI联盟发展为SCPI标准,1990年发布首个版本,1999年形成SCPI-99规范。
SCPI的核心思想是“面向信号路径而非面向仪器面板”。命令按测量功能(如电压、频率、时间)组织成树状层次,而不是按仪器型号组织。这样,不同厂商的同类仪器只要遵循SCPI,就能用相似命令完成相似操作。
二、与IEEE 488.2的关系:语法基础与命令标准的分层
IEEE 488.2是SCPI的语法基础。它规定了仪器消息的通用语法、状态报告模型、通用命令(如 *IDN?、*RST、*OPC?)以及数据格式。SCPI则在此基础上,进一步规定了仪器功能相关的命令树、助记符、参数类型和响应格式。
可以这样理解:IEEE 488.2解决“消息怎么写才合法”,SCPI解决“某类仪器功能应该用什么命令表达”。因此,一台符合SCPI的仪器必然符合IEEE 488.2的语法要求;但符合IEEE 488.2的仪器不一定支持SCPI命令树。
三、命令分类:通用命令与功能命令
SCPI命令可分为两大类。第一类是IEEE 488.2定义的通用命令,以星号 * 开头,如 *IDN?、*RST、*OPC?,用于识别、复位、同步和状态查询。第二类是SCPI功能命令,按仪器功能组织成树状结构,如 MEASure、CONFigure、SENSe、SOURce、TRIGger、STATus 等子系统。
功能命令又可分为设置命令和查询命令。设置命令不带问号,用于改变仪器状态;查询命令带问号,用于读取数据或状态。例如 SOUR:VOLT 2.5 设置输出电压,SOUR:VOLT? 查询当前电压设置值。
| 命令类型 | 示例 | 作用 | 是否带问号 |
|---|---|---|---|
| 通用命令 | *IDN?、*RST |
识别、复位、同步、状态 | 查询带,设置不带 |
| 功能设置命令 | CONF:VOLT:DC |
配置测量功能 | 否 |
| 功能查询命令 | MEAS:VOLT:DC? |
触发测量并返回结果 | 是 |
| 状态命令 | STAT:OPER:COND? |
读取操作状态寄存器 | 是 |
四、语法规则:助记符、层次与参数
SCPI命令采用树状层次结构,用冒号 : 分隔不同层级。命令助记符有长形式和短形式,短形式通常为长形式的前四个字符(如 MEASure 的短形式为 MEAS),大小写不敏感。命令与参数之间用空格分隔,多个参数用逗号分隔。
MEASure:VOLTage:DC? 10,0.001
|------ 长形式 ------| |-- 参数 --|
MEAS:VOLT:DC? 10,0.001
|-- 短形式 --|
CONFigure:VOLTage:DC 10
SOURce:VOLTage 2.5
TRIGger:SOURce BUS
*IDN?
*OPC?
需要特别注意:查询命令必须带问号,否则仪器不会返回数据;设置命令不能带问号,否则会被当作查询处理。此外,SCPI命令树中同一层的命令可以省略上层路径,但省略后必须从当前路径继续解析,容易造成歧义,因此建议在程序中始终使用完整路径。
实用建议:在编写仪器控制程序时,优先使用SCPI短形式以减少通信数据量,但在代码注释中保留长形式以提高可读性。对于关键命令,建议先用 *IDN? 确认仪器身份,再用 *RST 复位到已知状态。
五、案例与场景:用SCPI完成一次直流电压测量
假设使用一台支持SCPI的数字万用表,通过GPIB或LAN连接。典型命令序列如下:
*RST
*CLS
CONF:VOLT:DC 10
SENS:VOLT:DC:NPLC 1
TRIG:SOUR BUS
INIT
*TRG
FETC:VOLT:DC?
*OPC?
这段序列先复位并清除状态,然后配置直流电压测量、设置积分时间、选择总线触发、启动测量、触发一次、读取结果,最后用 *OPC? 确认操作完成。整个过程体现了SCPI“配置—触发—读取”的典型数据流。
六、常见误区与复盘
- 误区一:把SCPI当成IEEE 488.2。两者是分层关系,SCPI建立在IEEE 488.2语法之上,但增加了功能命令树。
- 误区二:查询命令忘记问号。如写成
MEAS:VOLT:DC而不是MEAS:VOLT:DC?,仪器不会返回数据,程序会超时。 - 误区三:忽略命令树路径。省略上层路径可能导致仪器解析到错误节点,建议使用完整路径。
- 误区四:不检查状态寄存器。仅发送命令而不读取
*STB?或STAT:OPER:COND?,可能掩盖仪器错误。
排障提示:如果仪器无响应,先检查命令是否以换行符结尾,再检查查询命令是否带问号,最后用 *IDN? 确认通信链路正常。SCPI命令通常以 \n 或 \r\n 作为终止符,不同传输层要求可能不同。
掌握SCPI的起源、与IEEE 488.2的分层关系、命令分类和语法规则,是后续设计仪器控制系统的基石。只有先保证命令格式正确、层次清晰、状态可控,才能进一步讨论多仪器协同、异步触发和自动化测试流程。