admin 管理员组

文章数量: 1087139


2024年3月11日发(作者:bindery)

第10卷 第3期 

2012年6月 

信 息 与 电 子 工 程 

INFORMATION AND ELECTRONIC ENGINEERING 

VO1.10,NO.3 

Jun.,2012 

文章编号:1672—2892(2012)03-0377—05 

SCPI命令解释器的实现 

韦荣昌,赖小红 

~~一u ~一黼y _~一呈 二~一l._三詈 一~_枷一 _她~一罢 ~一.m  一~ ~嘞一脚三. 

(电子科技大学自动化T程学院,四川成都611731) 

摘 要:可程控仪器命令标准(SCPI)目前被广泛应用于测试测量仪器的操作控制中。针对数字 

示波器的SCPI命令集,研究并设计了一种SCPI命令解释器,此命令解释器通过采用二又树结构 

来存储数字示波器的SCP1命令集,并在此基础上通过遍历二叉树来实现SCPI命令的查找过程。 

设计的解释器具有命令解析效率高,移植性好等优点,现已应用于数字示波器中,实践证明了此 

设计方案是可行的。 

关键词:数字示波器;SCPI解释器;命令树;二叉树 

中图分类号:TN98;TM932 文献标识码:A 

Implementation of Standard C ommands for Programmable 

Instruments interpreter 

SCPI建立在IEEE488.2基础上,目前在各种程控测试测量仪器中得到了广泛应用。但是,由于仪器硬件并 

不能直接理解控制器发出的SCPI命令,因此需要依靠SCPI命令解释器才能完成要求的操作。数字示波器是组 

建自动测试系统的关键仪器之一,为数字示波器设计SCPI命令解释器有助于将其应用于大型自动测试系统,同 

时也能够增强其互换性和兼容性…。 

l SCPI命令语法简介 

1.1 SCPI概述 

20世纪7O年代,自动测试系统最重 

要的进展是IEEE488.1标准的制订,它的 

出现极大地推动了自动测试系统的发 

展。IEEE488.1主要规定了仪器在电气、 

Fig.1 SCPI program—controlled equipment model 

机械和功能方面相容性的要求,但在软 

图I SCPI程控仪器模型 

件方面并没有统一的标准。之后IEEE488.2在IEEE488.1基础上使程控仪器器件消息的数据编码与格式、命令功 

能元素与编码句法、消息交换控制等方面实现了标准化,但它只定义了程控仪器的少数公用命令语义,用于仪器 

内部基本操作控制,却未解决器件消息标准化的问题。因此,建立在IEEE488.2基础上的SCPI应运而生。 

收稿日期:2011-06—20:修回日期:2011.08.29 

378 信息与电子工程 第10卷 

SCPI主要侧重于解决仪器程控和响应中器件消息的标准化问题,其定义了各种可编程仪器的控制命令格式 

以及语法,是目前重要的仪器程控命令标准之一 。SCPI采用树形分层结构的命令集,提出了一个具有普遍性 

的通用仪器模型,仪器模型体现了SCPI仪器功能逻辑和分类,如图1所示。 

1.2 SCPI语法格式 

根据SCPI 99标准,整个SCPI命令分为IEEE488.2公用命令和SCPI仪器特定控制命令2种不同类型。 

公用命令就是IEEE488.2规定的仪器必须执行(或称必备的)的命令,它们的句法和语义都遵循IEEE488.2的 

规定,以“ ’开头,它与测量无关,用于控制仪器的某些基本功能操作,其语法格式如下【3】: 

1)命令格式:星号+关键字; 

2)询问格式:星号+关键字+问号。 

SCPI仪器特定控制命令以“:”开头,有命令(Command)和询问(Query)2种格式,主要用来从事测量、读取 

数据以及切换开关等,包括所有测量函数及一些特殊的功能函数。询问命令是一类特殊类型的命令,主要用于指 

示仪器产生响应数据,通过询问来获取仪器的设置或状态。具体命令格式如下[3】: 

1)命令格式:冒号+关键字+空格+参数+空格+单位; 

21询问格式:冒号+关键字+问号。 

按照以上命令结构格式,以下都是有效的命令: 

RST //公用命令 

*IDN? //公用命令,询问格式 

:CONFigure:VOLTage:DC 10V //带参数的特定命令 

:MEASure:VOLTage:AMPLitude? //询问命令 

1.3 SCPI命令的使用方式 

SCPI命令既可以单条命令使用,也可以将不同命令连接,组成一个命令字符串,命令的连接方式如下: 

1)以“;”连接公用命令和仪器特定命令; 

2)以“;”作分割符,后面紧跟“:”,连接不同层次的仪器特定命令,后一命令的首节点必须是根结点,表 

示从命令树的最高层重新开始命令; 

3)以“;”分割同一子系统命令下的同一层次的特定命令。 

通过仪器总线传输SCPI命令字符串,仪器在收到命令字符串后,交给SCPI命令解释器解释执行。 

2 SCPI命令解释器的设计 

SCPI命令解释器的主要功能是对用户输入的命令进行解析,将使用SCPI命令编写的程控命令翻译成仪器可 

以识别的代码,功能示意如图2所示。 

scPI c。mmrdDd sⅡing— 

竺兰_J l scPI commands parsing :! +scPI commands'c。de a1ld parameters which call be 

!!!:竺 l processed by bseq m funn 叩 

Fig.2 Diagram of the function of SCPI interpreter 

图2 SCPI解释器功能示意图 

根据SCPI命令语法格式和数字示波器SCPI命令子集的特点l4】,本设计采用链式二叉树结构一一孩子兄弟表 

示法,存储数字示波器的SCPI命令子集的节点信息;采用数组存放命令子集的参数语法信息(包括参数类型等), 

数组长度为命令个数。通过遍历二又树来实现命令的查找过程,最后提交命令内码和参数,供系统执行相应的操 

作。因此SCPI命令解释器的设计工作主要包括2个部分:a)建立内置命令存储结构;b)编写查找分析程序。 

2.1命令树的创建 

创建命令树的过程,就是把数字示波器的SCPI命令集按照一定的结构,创建成供查询使用的命令树。这个 

阶段要求实现:输入的是包含数字示波器所有的SCPI命令关键字的1个格式化文本文件,输出的是1棵按规则 

创建的命令树【5】。 

SCPI命令格式为树状层次结构,具有多个子系统,每个子系统又具有多个子命令。因此创建数字示波器命 

令树,首先要了解数字示波器的SCPI命令集,根据示波器要实现的功能,选定相关的命令子系统(包括10个命 

令子系统:CONFigure,FETch/READ/MEASure,CALCulate,FORMat,INPUt,SENSe,STATus,SYSTem,TRACeIDATA, 

第3期 韦荣昌等:SCPI命令解释器的实现 

CONFig ̄e—— — [:voltage] 

379 

TRIGger),根据选定的命令子系统建立数字示波器的SCPI命令集_6j。 

每一个命令子系统都是一棵多叉树,都是分层树形结构,图3为 

CONFigure的树形结构(图中箭头指示了命令结点间的层次关系)。 

SCPI命令树是多棵多又树的结构形式。创建SCPI命令树,常见 

的方法是将命令树直接存储为多叉树结构,结点包含了父指针、兄弟 

指针和孩子指针,这样的存储比较混乱,对实现命令树的存储、删除、 

插入和遍历都比较麻烦。将多又树转化为二叉树形式是实现树的持久 

存储和计算的常用方法,二叉树的存储结构主要有2种,即链式结构和顺序结构。顺序结构仅适用于满二叉树。 

链式结构虽不能任意访问某一结点的双亲,但对于已知结点孩子的查找十分方便,并且易于扩展树的空间、添加 

Fig.3 CONFigure command tree 

图3 CONFigure命令子系统多叉树结构图 

和删减命令,十分利于SCPI命令的查询遍历、命令集的移植以及扩展。因此本设计采用链式二叉树结构一一孩 

子兄弟表示法来创建SCPI命令树。将每一个命令子系统构建为一棵二叉树,公用命令则是一棵只有根结点的二 

叉树;将每一个子系统根结点及公用命令结点作为命令树右链结点,左链为各个子系统下的孩子结点,合并构成 

棵完整的SCPI命令树。构建后的CONFigure命令子系统二叉树如图4所示: 

Fig.4 Binary tree of CONFigure command 

图4 CONFigure命令子系统二叉树结构图 

每个命令结点的结构[ 为: 

结点类型定义: 

typedef struct btreenode 

{ 

TreeData data; 

struct btreenode LC; 

struct btreenode RC; 

}bnode; 

结点中数据部分类型定义: 

typedef struct 

//结点数据 

//左指针 

//右指针 

{ 

char cmdname[40]; 

e d e 

//命令关键字 

//命令关键字缩写形式 

//命令内码 

char cmdname2[40]; 

int code; 

int iparatype; 

int idefault; 

)TreeData; 

//参数类型 

//缺省节点标记 

因为数字示波器的SCPI命令集是已选定的,构建命令树时, 

如果采用手动一个一个地输人命令关键字等信息,既耗时又易出 

错。因此创建一个包含数字示波器所有SCPI命令关键字等信息 

的文本文件,采用一边扫描文本,一边创建命令树的方法,效率 

要高很多。列举文本片段如下:(第1个“/”后面的数字代表内 

码;第2个“/”后面的数字代表参数类型;“r代表有别名;@ 

代表默认结点。1 

:CONFigure/100I/1 

:VOLTagetVOLTagel@/1100/1 

:DC@/1 1 10/1 

:AC/1 120/1 

————

:FREQuency/1 1 30/1 Fig.5 Flow chart of command tree 

图5创建命令树流程图 

380 

一一

信息与电子工程 第10卷 

:PERiod/1 140/1 

:PHASe/1 150/1 

一一

创建命令树的过程:从文本文件中读取关键字和命令编码等信息,遍历树,填人相应的命令结点信息(包括 

关键字及其编码),输出一棵链式二叉树结构的完整的SCPI命令树,创建命令树的流程图如图5所示。 

2.2命令查找 . 

命令查找的过程就是根据用户输入的SCPI命令,遍历命令树,得到命令的内码和参数信息,通过进行字符 

串比较,在同一层次中由前到后,对命令树结点遍历来完成的。 

具体的查找过程如下:对用户输入的SCPI命令字符串,按空格分离关键字和参数,并把参数和单位保存到 

个参数表中;取第1个关键字,从命令树右链开始查找,若不匹配,则在此结点的右分支(同一等级)下查找; 

若匹配,则在此结点的左分支进行下一等级结点的查找,直至最后1个关键字的查找结束;完全匹配后,判断参 

数信息,最后保存参数。完成上述查找过程后,得到仪器可以识别并且能够执行的命令内码和参数,最后提交命 

令内码和参数,供系统执行相应的操作。 

当结点查找首次出现不匹配时,查看当前结点是否有缺省结点,如果有,则把缺省结点作为当前结点,继续 

进行结点的查找;如果没有缺省结点,则给错误报告信息,并结束本次查找过程。 

例如输入1条SCPI命令:“:CONFigure:VOLTage:AC 10”,首先分离关键字和参数,同时把参数和单位保存 

到1个参数表中。参考图4 CONFigure命令子系统二叉树结构图,查看查找的具体过程:取第1个关键字: 

:CONFigure”,从命令树的右链开始查找,若找到与之匹配的字符串,则取下一等级关键字:“:VOLTage”, 

在:CONFigure的左链查找,依次直至最后1个关键字“:AC”的查找结束,完全匹配后,判断参数信息,最后保 

存参数,返回命令内码和参数,本次查找结束。 

2.3 SCPI命令解释器的验证 

设计验证程序,验证SCPI命令解释器的正确性。创建一个格式化文本文档,包含要验证的SCPI命令字符 

串,验证过程通过一边扫描文本中的命令字符串,一边对命令字符串进行解析来实现。验证程序实现的功能:对 

于输入的正确的SCPI命令字符串,解释器能够正确解析,给出仪器可识别的命令内码和参数等信息,同时显示 

其输出并提交系统执行相应的操作,实现解析SCPI命令的功能;如果输入错误的SCPI命令,如格式、符号或 

者参数等出错,给出相应错误的状态报告。 

3 结论 

数字示波器在现代测量控制领域的应用十分广泛 J。为增强数字示波器SCPI命令集的可移植性和通用性, 

设计一种扩展性良好的命令集存储结构和实现高性能命令解析的SCPI命令解释器是十分重要的。本文设计和实 

现了数字示波器的SCPI命令解释器,对数字示波器的SCPI命令进行判断和查询,完成了数字示波器的控制和 

测量。对于其他仪器模块只需要修改SCPI命令关键字等信息的格式化文本,即可得到不同的内置命令树,这种 

方法设计的SCPI命令解释器不仅命令树结构清晰,而且具有较好的可扩展性和可移植性,具有一定的通用性, 

对于其他仪器模块的SCPI命令集解释器的设计,也具有很好的参考意义。 

参考文献: 

[1] 王浩,王子斌.一种2 Gsps数字示波器数据采集系统的设计….信息与电子工程,2009,7(4):257—260.(WANG Hao, 

WANG Zibin.Design of a 2 Gsps digital oscilloscope data acquisition system[J].Information and Electronic Engineering, 

2009,7(4):257—260.) 

【2] 陈长龄,田书林,师奕兵,等.自动测试及接口技术[M】.北京:机械T业 版社,2005.(CHEN Changling,TIAN Shulin, 

SHI Yibing,et a1.Automated Test System&Interface Technology[M].Beijing:China Machine Press,2005.) 

[3] IEEE488.2.Standard Commands for Programmable Instruments(SCPI)[S].USA:IEEE,1999. 

[4] Agilent Technologies Inc.Agilent InfiniiVision 6000 Series Oscilloscopes programmer’s Guide[Z].USA:Agilent Technologies 

Ine.,2008. 

[5] 井涛,郭永瑞.一种实用的SCPI语法分析设计方法[J].国外电子测量技术,2006,25(2):42—44.(JING Tao,GUO Yongrui .

Useful parsing design method of SCPI[J].Foreign Electronic Measurement Technology,2006,25(2):42—44.) 


本文标签: 命令 仪器 结点 结构 数字