SCPI是什么?仪器控制的关键语言

SCPI是基于ASCII文本的标准化命令语言,用于控制测试测量仪器,它使用类英语语法,可读性强,提供跨厂商的仪器控制兼容性,简化自动化测试系统开发。

SCPI(Standard Commands for Programmable Instruments,可编程仪器标准命令)是一种基于ASCII文本的标准化语言,用于控制各种测试和测量仪器(如示波器、信号发生器、电源、万用表等),它建立在IEEE 488.2标准之上,提供了一套统一的语法和命令结构,使得不同厂商的仪器能够使用相似甚至相同的命令进行控制,极大地简化了自动化测试系统的开发和维护。

SCPI命令的核心结构

编写SCPI命令的关键在于理解其层次化的树状结构,命令由一系列关键字组成,这些关键字通过冒号 () 连接,形成一个从通用到具体的路径,命令通常以根级关键字开始,然后逐级深入到特定的子系统或功能。

  1. 根级关键字 (Root Level Keywords):

    • 这是命令树的起点,代表仪器的主要功能模块。
    • SYSTem, CONFigure, MEASure, SENSe (常与测量相关), SOURce (常与信号产生相关), CALCulate, DISPlay, TRIGger, STATus, (IEEE 488.2公用命令) 等。
    • 示例:SYSTem:ERRor? (查询系统错误)
  2. 子系统关键字 (Subsystem Keywords):

    • 位于根级关键字之后,进一步细化功能。
    • 可以有多个层级,用冒号分隔。
    • 示例:SENSe:FREQuency (进入频率测量相关设置), SOURce:VOLTage:LEVel:IMMediate:AMPLitude (设置源电压的即时幅度值)。
  3. 命令动词 (Command Verbs):

    • 位于命令路径的末尾,指定要执行的操作。
    • 最常见的命令动词是:
      • (查询 Query): 用于向仪器请求信息,查询命令通常以问号结尾。重要:查询命令不会改变仪器的设置状态。
        • 示例:MEASure:VOLTage:DC? (查询直流电压测量值)
      • <无后缀> 或 特定设置动词 (设置 Set): 用于配置仪器的参数,设置命令没有问号。
        • 示例:SOURce:VOLTage:LEVel:IMMediate:AMPLitude 5.0 (将源电压的即时幅度设置为5.0伏)
      • 其他动词:如 INITiate (启动测量), ABORt (中止操作), FETCh? (获取已触发但未读取的测量结果) 等,这些动词通常作为命令路径的一部分或单独使用。
  4. 参数 (Parameters):

    • 设置命令通常需要跟随一个或多个参数,用于指定具体的值、选项或范围。
    • 参数可以是:
      • 数值 (Numeric):0, 5E-3 (0.0015), MAX (最大值), MIN (最小值), DEF (默认值)。
      • 离散值 (Discrete): 预定义的字符串或枚举值,如 ON, OFF, AC, DC, AUTO, MANual, POSitive, NEGative
      • 布尔值 (Boolean): 0 (OFF) 或 1 (ON)。
      • 字符串 (String): 通常用引号括起来,如 "CH1", "MyWaveform"
    • 示例:TRIGger:SOURce CH1 (设置触发源为通道1 – CH1是离散参数), DISPlay:WAVeform:Y:RANGe 0.1 (设置波形显示的Y轴范围为0.1V/div – 1是数值参数)。

编写SCPI命令的步骤与规则

  1. 查阅仪器手册: 这是最重要的一步!每个仪器的SCPI命令集都是其编程手册的核心部分,手册会详细列出所有支持的根级关键字、子系统、命令动词、参数及其语法、取值范围和单位。永远以仪器手册为准。

  2. 确定操作目标: 明确你想让仪器做什么(设置参数?启动测量?读取数据?查询状态?)。

  3. 构建命令路径:

    • 从最通用的功能(根级关键字)开始。
    • 使用冒号 () 逐级深入到具体的功能(子系统关键字)。
    • 在路径末尾添加命令动词 ( 用于查询,无后缀用于设置,或其他特定动词)。
    • 对于设置命令,在命令后添加空格,然后输入所需的参数。
  4. 遵循语法规则:

    • 关键字缩写 (Short Form/Long Form): SCPI命令关键字通常有长格式(完整拼写)和短格式(唯一缩写),手册会标明短格式(通常是前4个字母,如 FREQ 代表 FREQuency)。短格式和长格式在功能上是等效的,使用短格式可以提高代码效率。关键:确保缩写是唯一的。 CONF 可能是 CONFigure 的缩写,但如果手册中还有 CONNect,则 CONF 可能就不唯一,需要更长的缩写或使用长格式,手册会明确指定有效的短格式。
    • 大小写不敏感 (Case Insensitivity): SCPI标准规定命令关键字和参数(除字符串外)是大小写不敏感的。MEAS:VOLT:DC?, meas:volt:dc?, Meas:Volt:Dc? 通常效果相同。最佳实践:为了代码清晰和一致性,建议统一使用大写或手册中示例的格式。
    • 空格 (Spaces):
      • 命令关键字之间(冒号前后)不能有空格。SENSe:FREQuency 正确,SENSe : FREQuency 错误。
      • 命令动词(如 )前不能有空格。
      • 设置命令的参数必须与命令动词之间用空格分隔。VOLT 5.0 正确,VOLT5.0 错误。
      • 多个参数之间通常用逗号 () 分隔(如果命令支持多个参数)。TRIG:DELAY 0.001, 0.01 (假设设置延迟时间和范围)。
    • 参数格式:
      • 数值参数:遵循常规数字表示法(整数、小数、科学计数法),注意单位,手册会指定默认单位(如V, A, s, Hz),有时可能需要显式指定单位(取决于仪器)。
      • 离散参数:严格使用手册中定义的字符串(如 ON, OFF, EXT),大小写通常不敏感,但建议按手册示例使用。
      • 字符串参数:通常需要用双引号 () 括起来,特别是当字符串包含空格或特殊字符时。MMEM:STOR:WAV "C:\data\wave1.csv",手册会说明何时需要引号。
    • 查询命令 (): 查询命令用于获取信息,不会改变仪器状态,它们总是以问号结尾,查询的响应格式(数值、字符串、多个值等)由手册定义。

SCPI命令编写示例

假设我们有一台示波器,目标是:

  1. 设置通道1的垂直刻度为100mV/div:

    • 目标:设置 (Set)
    • 功能模块:通道1 (CHANnel1CH1) 的垂直 (VERTical) 刻度 (SCALe)
    • 命令路径:CH1:SCALe
    • 参数:1 (因为100mV = 0.1V,假设单位是V/div)
    • 完整命令: CH1:SCALe 0.1 (或使用短格式 CH1:SCAL 0.1,如果手册允许)
  2. 查询通道1当前的垂直偏置(Offset)值:

    • 目标:查询 (Query)
    • 功能模块:通道1 (CH1) 的垂直 (VERTical) 偏置 (OFFSet)
    • 命令路径:CH1:OFFSet
    • 命令动词:
    • 完整命令: CH1:OFFSet? (或 CH1:OFFS?)
  3. 设置触发源为通道2,触发电平为1.5V:

    • 目标:设置 (Set)
    • 功能模块:触发 (TRIGger) 源 (SOURce)
    • 命令路径:TRIGger:SOURce
    • 参数:CH2 (离散值)
    • 命令1: TRIGger:SOURce CH2
    • 功能模块:触发 (TRIGger) 电平 (LEVel)
    • 命令路径:TRIGger:LEVel
    • 参数:5 (数值,单位V)
    • 命令2: TRIGger:LEVel 1.5
    • (注意:有时电平设置可能需要在特定源下,如 TRIGger:LEVel CH2, 1.5,需看手册)
  4. 进行一次即时电压测量并读取结果:

    • 目标:启动测量并读取
    • 方法1 (常用):
      • 启动测量: MEASure:VOLTage:DC? CH1 (这条命令会启动一次测量并等待完成,然后返回结果,它结合了初始化、等待和读取。)
    • 方法2 (更精细控制):
      • 配置测量: CONFigure:VOLTage:DC CH1 (配置为测量CH1的直流电压)
      • 启动测量: INITiate (开始采集数据)
      • 等待完成/触发: (可能需要等待或检查状态)
      • 读取结果: FETCh:VOLTage:DC? (获取已配置测量的结果)

SCPI命令设计原则 (理解这些有助于编写和阅读命令)

  • 树状结构: 命令组织成层次化的树,反映仪器的功能组织。
  • 模块化: 相似的仪器功能使用相似的命令结构(如 SENSe 用于测量输入,SOURce 用于信号输出)。
  • 一致性: 相同概念的参数使用相同的关键字(如 FREQuency, VOLTage, LEVel, RANGe, STATe)。
  • 可读性: 长格式命令具有较好的自描述性。
  • 正交性: 命令应尽可能独立,一个命令的设置不影响其他无关命令的设置(尽管实际仪器内部状态可能有依赖)。

最佳实践与注意事项

  1. 手册至上: 反复强调,仪器编程手册是编写SCPI命令的唯一权威来源,不同厂商、不同型号的仪器,其支持的SCPI命令集、参数范围、行为细节都可能存在差异,不要假设一个命令在所有仪器上都以完全相同的方式工作。
  2. 使用短格式: 在确认唯一性的前提下,使用短格式命令可以提高程序执行效率和代码简洁性。
  3. 处理查询响应: 程序必须能够正确解析仪器对查询命令 () 的响应,响应可能是单个数值、多个数值(用逗号分隔)、字符串或状态代码,手册会定义响应的格式。
  4. 错误处理: 务必在程序中加入SCPI错误查询 (SYSTem:ERRor?) 机制,每次发送命令序列后(尤其是设置命令后),查询错误队列可以捕获语法错误、参数超限、执行失败等问题。
  5. 状态报告: 利用 STATus 子系统命令(如 STATus:OPERation:CONDition?, STATus:QUEStionable:EVENt?)来监控仪器的操作状态和可疑条件(如过载、校准警告)。
  6. *公用命令 (`` commands):** 掌握常用的IEEE 488.2公用命令,如:
    • *IDN? (查询仪器标识 – Instrument IDentification)
    • *RST (ReSeT 仪器到默认状态)
    • *CLS (CLear Status 清除状态寄存器和错误队列)
    • *ESE (Event Status Enable) / *ESR? (Event Status Register)
    • *SRE (Service Request Enable) / *STB? (STatus Byte)
    • *OPC? (Operation Complete? 用于同步)
    • *WAI (WAIt 等待所有操作完成)
  7. 同步操作: 对于需要等待仪器完成操作的情况(如触发采集、完成测量、保存数据),使用 *OPC?, *WAI 或状态轮询机制进行同步,确保在读取结果前操作已完成。
  8. 测试与验证: 在集成到大型自动化系统之前,务必使用仪器前面板、仪器自带的控制软件(如NI MAX, Keysight Connection Expert)或简单的脚本(如Python with PyVISA)对编写的SCPI命令序列进行充分测试和验证。

编写SCPI命令的核心在于理解其树状结构(根级关键字->子系统->命令动词)和语法规则(冒号分隔、空格使用、参数格式、查询)。最关键的资源是您所使用的特定仪器的编程手册。 通过遵循手册、理解SCPI设计原则并实施最佳实践(如错误处理、状态监控、同步),您可以有效地编写出可靠、高效的SCPI命令来控制您的测试测量仪器,构建强大的自动化测试系统,实践和查阅手册是掌握SCPI的不二法门。


引用说明:

  • 基于IEEE Std 488.2-1992 (IEEE Standard Codes, Formats, Protocols, and Common Commands) 和 SCPI-1999 (Standard Commands for Programmable Instruments) 标准中定义的SCPI核心概念和原则。
  • 具体的SCPI命令集实现、支持的子系统、参数范围和行为细节,请务必参考您所使用的具体仪器的官方编程手册,不同厂商和型号的仪器手册是编写针对该仪器SCPI命令的最终权威依据。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5881.html

(0)
酷番叔酷番叔
上一篇 2025年6月30日 17:29
下一篇 2025年6月30日 17:42

相关推荐

  • 如何快速打开命令行终端?

    在Windows系统中,通过开始菜单搜索“cmd”或“命令提示符”打开;在macOS或Linux中,使用“终端”应用程序(可在应用程序文件夹或通过Spotlight搜索启动),命令行界面允许用户通过输入文本指令与操作系统交互、执行任务和管理文件。

    2025年6月26日
    1100
  • Linux复制文件与文本有何不同?

    文件/目录复制:cp 命令cp(copy)是Linux最核心的文件复制命令,语法为:cp [选项] 源文件 目标路径常用选项及示例:基本复制cp file1.txt /home/user/documents/ # 复制文件到目录cp file1.txt file2.txt # 复制并重命名文件递归复制目录(-r……

    2025年6月27日
    1300
  • 如何用cacls命令快速设置文件权限?

    cacls是Windows命令行工具,用于显示或修改文件/文件夹的访问控制列表(ACL),可添加、删除用户/组权限,实现资源访问控制管理。

    1天前
    300
  • 目标机器SSH未开启,如何安装服务?

    在Ubuntu系统中,命令行(终端)是执行高效系统操作、软件管理和故障排查的核心工具,以下是6种主流进入命令行的方式,涵盖图形界面、紧急恢复及远程场景,所有步骤均适用于Ubuntu 20.04及以上版本:方法1:图形界面启动终端(推荐新手)点击屏幕左上角 “活动(Activities)” 或按 Super (W……

    2025年7月12日
    600
  • 延伸命令是什么?强大功能揭秘!

    延伸命令通过添加参数或选项扩展基础命令功能,增强操作灵活性,支持复杂任务自动化,提升工作效率与精确度。

    2025年6月23日
    800

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信