type
status
date
slug
summary
tags
category
icon
password
💡
SCPI(Standard Commands for Programmable Instruments)是程控仪器(可编程仪器标准命令)。SCPI 是一种建立在现有标准IEEE488.1 和 IEEE 488.2 基础上,并遵循了IEEE754 标准中浮点运算规则、ISO646 信息交换7 位编码符号(相当于ASCll编程)等多种标准的标准化仪器编程语言。它采用一套树状分层结构的命令集,提出了一个具有普遍性的通用仪器模型,采用面向信号的测量;它的助记符产生规则简单、明确,且易于记忆。
总之,VISA提供一些可以直接操作硬件的函数,它是以DLL或Lib形式提供,在编程时必须包括visa.h和visa32.h(C/CPP)或者pyvisa,在程序代码中直接使用的是VISA库中的函数。SCPI是程控仪器标准命令,它是对器件的消息进行了标准化,也就是,只要做仪器器件(如示波器、台式万用表、频率计、矢量分析仪、电子负载、台式电源等),涉及到上位机通讯就得用SCPI。

SCPI语言简介

测试测量仪器应当遵循当前SCPI语言版本的规则和约定(请参阅 SYSTem:VERSion?
SCPI(可编程仪器的标准命令)是一种基于 ASCII 的仪器命令语言,供测试和测量仪器使用。SCPI 包含两种类型的命令,通用命令和子系统命令。

IEEE-488.2 通用命令

IEEE-488.2 标准定义了一组通用命令,可执行复位、自检以及状态操作等功能。通用命令总是以星号 ( * ) 开始,长度为 3 个字符,并可以包括一个或多个参数。命令关键字与第一个参数由空格分开。使用分号 (;) 可分隔多个命令,如下所示:
命令
标准名称
描述
*CLS
Clear Status
清除状态字节,通过清空错误队列并清除所有事件寄存器来清除仪器状态字节。还会取消任何先前的 *OPC 命令或查询。
*ESE
Event Status Enable
设置标准事件状态启用寄存器中的位。
*ESE?
Event Status Enable Query
返回标准事件启用寄存器的结果。读取后寄存器将被清除。
*ESR?
Event Status Enable Register
读取并清除事件状态启用寄存器。
*IDN?
Identify
返回唯一标识分析仪的字符串。格式为 "Agilent Technologies",<model number>,<serial number>,<software revision>。
*OPC
Operation Complete Command
当所有挂起的重叠操作完成时,在标准事件状态寄存器中生成 OPC 消息(例如,一次扫描或默认设置)。
*OPC?
Operation Complete Query
当所有挂起的重叠操作完成时,返回 ASCII "+1"。
*OPT?
Identify Options Query
返回一个字符串,标识分析仪的选项配置。
*RST
Reset
执行设备重置并取消任何挂起的 *OPC 命令或查询,与 SYSTem:PRESet 完全相同,但有一个例外:Syst:Preset 不会将 Calc:FORMAT 重置为 ASCII。分析仪的非易失性内存的内容不会受到此命令的影响。
*SRE
Service Request Enable
在读取状态寄存器之前,必须启用位。此命令启用服务请求寄存器中的位。当前设置保存在非易失性存储器中。
*SRE?
Service Request Enable Query
读取服务请求启用寄存器的当前状态。读取后寄存器将被清除。返回值可以使用状态命令中的表进行解码。
*STB?
Status Byte Query
读取仪器状态字节的值。只有当喂给它们的寄存器被清除时,状态字节才会被清除。
*TST?
Result of Self-test Query
返回自检结果。
*WAI
Wait
等待命令执行完毕。
*TST?
Result of Self-test Query
返回查询分析器硬件状态的结果。0表示未发现故障。任何其他值表示存在以下一个或多个条件。返回的值是现有条件的Weight(或Weights的总和)。
 

语法介绍

子系统命令

子系统命令执行特定的仪器功能。它们由按字母顺序排列的命令组成,这些命令扩展到分层结构中的根下一个或多个级别,也称为树系统。本结构中,相关命令归组于共用结点或根下,这样就形成了子系统。下面列出了 CALCulate:TRANsform子系统的一部分,用以说明树系统。注意,为了便于清楚说明,某些 [可选] 命令也包括在内。
notion image

关键字

关键字,也称为标题,是仪器识别的说明。通用命令也是关键字。
CALCulate 是根关键字,Transform 是第二级别关键字,COUPle和 TIME 是第三级别关键字。冒号 (:) 分隔关键字级别。
按照命令语法,大多数命令(和某些参数)以大小写字母混合的方式表示。
  • 大写字母表示命令的缩写。对于较短的程序行,可以发送缩写格式的命令。
  • 如果要获得较好的程序可读性,可以发送长格式的命令。
在上述示例中,CALC和 CALCulate 都是可接受的格式。可以使用大写或小写字母。因此,CALC、Calc 和 calc 都是可接受的。其他格式如 CAL 是无效的,并且会产生错误。

查询

在关键字后面加一个问号 (?) 可将其转变为查询(例如:VOLTage?、VOLTage:TRIGgered?)。如果查询包含参数,那么将查询指示器放置在最后关键字的末尾、参数的前面。在查询指示器和第一个参数之间插入一个空格。 您可以查询大多数参数的编程设定值。例如,您可以查询上次设置 OUTPut:DELay:FALL 的时间,方式是发送以下命令:
您也可以查询最小或最大允许下降时间,方式是发送以下命令:
在发送另一个命令至仪器之前,必须回读所有查询的结果。否则,将会发生查询已中断的错误并丢失未返回的数据。(使用send后在使用read,不能连续使用send)

命令分隔符

冒号 (:) 分隔关键字级别。必须使用空格将命令参数与其对应的关键字分隔开来。如果一个命令需要多个参数,则用一个逗号分隔相邻的参数。在以下示例中,必须使用逗号分隔可选的 startindex 和 points 参数。注意在 CURRent? 和第一个参数之间的空格。
分号 (;) 可用于分隔同一子系统中的命令。这样即可在同一消息字符串中发送多个子系统命令。例如,发送下列命令串:
与发送一下命令的作用相同:
注意,分号跟随在分层树结构的隐含路径后。在上例中,可选的:STATe 关键字必须跟随在 OUTput 关键字后,才能将命令解析器放置在层次结构的第二级别。这样可以在分号后使用 DELay 关键字,因为 DELay 是第二级别关键字。下一步,按 :RISE 关键字将命令解析器放置在层次结构的第三级别。这样可以在第二个分号后使用 FALL 关键字,因为 FALL 是第三级别关键字。
您也可以组合同一消息字符串中的不同子系统命令。在这种情况下,您必须使用冒号将命令解析器返回至根级才能访问另一个子系统。例如,您可以通过使用如下根说明符,清除输出保护并检查一条消息中的操作条件寄存器的状态:
注意,再分后之后使用冒号将命令解析器返回值根部。

命令终止符

发送到仪器的命令串必须以一个换行 (<NL>) 字符(ASCII 十进制数字 10)结尾。可以将 IEEE-488 EOI(结束或标识)结束或标识消息解释为 <NL> 字符,并用来代替 <NL> 字符终止命令串。一个回车符后跟一个换行符 (<CR><NL>) 也是可行的。命令串终止总是将当前的 SCPI 命令路径复位到根级。
语法惯例
  • 尖括号 (< >) 表示必须给括号内的参数指定一个值。例如,在上述显示的 OUTPut:DELay 语法说明中,<> 参数包含在尖括号内。方括号不会随命令串一起发送。您必须为该参数指定一个值(例如:“OUTP:DEL:FALL 0.1”),除非您选择语法中的另一个选项(例如:“OUTP:DEL:FALL MIN”)。
  • 竖条 (|) 隔开给定命令字符串的多个参数选择。例如,在 OUTPut:INHibit 命令中的 LATChing|LIVE|OFF 指示您可以指定 “LATChing”、“LIVE”或“OFF”。条形图不随命令字符串发送。
  • 方括号 ( [ ]) 中包含一些语法元素,例如节点和参数。这表示该元素可选且可以省略。方括号不会随命令串一起被发送。在一个可选参数的情况下,如果您没有为可选参数指定一个值,那么仪器将忽略该参数。在上述 FETCh:CURRent? 的示例中,可选的 <startindex> 和 <points> 参数可以返回从 startindex 开始阵列的数据,并包含数据点的指定数量。如果未指定这些参数,那么查询会返回所有阵列数据。
  • 花括号 ( { } ) 指示可能被重复零次或多次的参数。专用于显示列表。当可能忽略或输入其他值一次或多次时,<值>{,<值>} 表示方式显示必须输入的第一个值。

参数类型

数值参数

要求使用数值参数的命令,支持所有常用的十进制数字表示法,包括可选符号、小数点和科学记数法等。如果命令只接受某些特定值,仪器自将输入的数值参数四舍五入为可用接受的值。下面这条命令要求给数值参数设置电压值:
注意数值参数的特殊值(如 MINimum、MAXimum 和 INFinity)也是可接受的。不用选择特定的电压参数值,可以用 MIN 参数将电压设置为允许的最小值,或用 MAX 参数将电压设置为允许的最大值。
您也可以发送带有数字参数的工程单位后缀(例如,V 表示伏特,A 表示安培,W 表示瓦特)。所有参数值都使用基本单位。

离散参数

离散参数用于设置有限个参数值(例如,IMMediate、EXTernal 或 BUS)。就像命令关键字一样,它们也可以有短格式和长格式。可以使用大写或小写字母。查询响应始终返回全部为大写字母的短格式。对于显示屏设置,下面这条命令要求使用离散参数:
这个命令将显示屏模式设置为IMMediate。

布尔参数

布尔参数代表一个真或假的二进制条件。对于假条件,仪器将接受“OFF”或“0”。对于真条件,仪器将接受“ON”或“1”。当查询布尔设置时,仪器始终返回“0”或“1”。下面的命令要求使用布尔参数:
这个命令将输出状态设置为开启。

ASCII 字符串参数

字符串参数实际上可包含所有 ASCII 字符集。字符串必须以配对的引号开始和结尾;可以用单引号或双引号。引号分隔符也可以作为字符串的一部分,只需键入两次并且不在中间添加任何字符。下面这个命令使用了字符串参数:

设备清除

设备清除是一个 IEEE-488 低级的总线消息,可用于将仪器返回到响应状态。不同的编程语言和 IEEE-488 接口卡通过其特有的命令来提供对该功能的使用。当收到设备清除信息时,状态寄存器、错误队列以及所有配置状态都保持不变。
设备清除执行以下操作:
  • 如果正在测量时,则其被终止。
  • 仪器返回到触发空闲状态。
  • 清除仪器的输入和输出缓冲区。
  • 仪器准备好接受新的命令串。
注意:“中止”命令是终止仪器操作的建议方法。

典型命令处理时间

下表列出了多个类型的设置命令和响应查询的一些典型、平均命令处理时间。这可以帮助您确定一些常用 SCPI 命令对总测试时间的影响。所有的时间单位为毫秒。
设置命令(如 VOLT <n>)仅说明 IO 等待时间和命令处理时间,而不是完成操作的时间(如完成更改的输出电压或完成启动后的输出状态)。
从命令发送至仪器直到收到响应均属于查询命令时间。
notion image

📎 参考文章

  • SCPI order
  • SCPI programming guide
 
SCPI SYSTEM ERROR Code论持久战
Loading...