好文档 - 专业文书写作范文服务资料分享网站

基于最优解空间树的SCPI解析器设计

天下 分享 时间: 加入收藏 我要投稿 点赞

基于最优解空间树的SCPI解析器设计

SCPI( Standard Commands for Programmable Instruments)是一种标准化的程控仪器编程语言,采用标准语法格式描述仪器功能,为所有仪器仪表提供了一个广泛兼容的编程和数据使用环境。SCPI命令具有纵向兼容性,横向兼容性和功能兼容性,最大限度的保证了SCPI命令在控制仪器中的灵活性。根据SCPI99规范,SCPI指令同时具有长命令名和短命令名,命令中某些节点可以作为缺省节点忽略,导致SCPI命令使用灵活,会产生大量的变形等效命令。如何将这些等效命令编译成同一条执行指令是SCPI解析器设计的一个难点。 目前常见的SCPI解析器,如文献将SCPI指令提前写入应用程序,如果修改SCPI指令或者将SCPI解析器移植到其他程序,就需要重新修改程序,使用不灵活。文献虽然提出用XML文件描述SCPI指令,但是在描述SCPI指令的时候,没有充分发挥XML的自描述性和树形结构,因而无法识别全部的等效命令。本文将解空间树这一技术引入到SCPI解析器设计,通过设计相应的贪心算法,解决了SCPI的等效命令问题。

本文结构如下,第2节介绍SCPI语法和解空间树的基本概念与模型;第3节提出基于解空间树的SCPI解析器生成算法;第4节最后介绍研究意义和进一步的研究方向。 2.SCPI语法与解空间树 2.1 SCPI语法简介

SCPI是一个基于标准*****.2建立的,适合所有仪器的命令集。其主要目的是为了使相同功能具有相同的程控命令,以实现程控命令的通用性。整个SCPI命令可以分为两个部分:一部分*****.2公用命令,以“* ”开头,要求仪器必须执行;另一部分SCPI仪器特定控制命令。特定命令是以树型结构组织的字符串集,以“:”开头, 节点之间也是以“:”间隔。每个节点的字符串都有长格式和短格式两种写法, 而且根

据仪器需要, 部分命令还会有独立的后缀。对于缺省节点,还可以省略。SCPI命令使用一个相似于文件系统的结构,这种命令结构被称为命令树。最靠近顶端的命令称为根命令,其次为第一级命令,第二级命令等。因而,对于一条特定的SCPI命令必须根据一个特定的路径才能到达下一层命令。 2.2 解空间树

解空间树又称为状态树。 它是一棵树,在这棵树中,包含着问题的所有解。对于给定的问题,如何在解空间树上寻找问题的最优或者次优解,一般需要用到贪心算法作为空间树回朔的依据。解空间树的解是一条从根节点到问题解叶节点的路径。SCPI命令本身以命令树的形式存在,因而,给定一条SCPI命令字符串,能否完全在命令树上找到其对应的解路径,成为解析SCPI命令的关键。在本文中,将XML文件引入到SCPI解析中,采用XML描述系统的SCPI命令集。解析该XML文件,在计算机内存中形成一棵解空间树。对于从程控端收到的SCPI指令,通过搜索该解空间树,判断接收到的SCPI命令是否合法。对于合法的SCPI指令编译其执行码,执行SCPI命令。不合法的SCPI命令则返回相应的编译错误。 3.SCPI解空间树算法实现 3.1 SCPI命令配置文件

通过编写不同的SCPI命令脚本可以生成不同的SCPI指令集。SCPI命令脚本采用XML描述SCPI指令,不同命令节点分配不同的属性。这样一棵命令树就形成了一个解空间,通过搜索解空间树,来解释不同的命令。SCPI命令配置文件部分如图1所示。 图1 SCPI命令配置脚本 3.2 脚本节点属性

SCPI命令配置脚本采用XML语言描述。由于XML具有非常突出的自描述性,为动态配置SCPI指令集提供了方便。

配置脚本根节点为“scpi”,子命令节点全部为“cmd”。根节点仅有一个“version”属性,表示此SCPI配置脚本当前的版本号,用于向上兼

容SCPI解析器引擎。“cmd”节点有5种节点属性,具体如下: 1)name:SCPI命令符。配合cmd节点层次,用于区分不同的SCPI命令。

2)type:SCPI命令类型。命令符在SCPI命令串中是否为缺省节点。取值为“mandatory”,该命令符不可省略节点;取值“optional”,可以省略节点。按照SCPI规范,处于同一层的SCPI命令符有且仅有一个节点可以作为默认节点。如果同一层出现多个默认节点,应当给出编译错误。

3)canQuery:该SCPI命令是否支持询问。取值“true”,可以询问;取值“false”不可以询问。该属性省略时,默认为该命令不可询问。 4)argsType:该SCPI命令所带参数类型。用于检验接收到的SCPI命令是否符合标准规范。该节点取值类型与SCPI-99命令规范取值一致。该属性仅在SCPI叶节点有效。

5)code:SCPI叶节点命令编译执行代码。该属性仅在叶节点命令有效。对于等价的SCPI命令会编译出同一个执行代码。 该脚本文件被解析器解释成一棵解空间树,如图2所示。图中“[]”内的命令符表示该节点是缺省节点,可以省略。 图2 SCPI命令解空间树

在该命令树中,一级节点MEASure的子节点SCALar、VOLTage均为可省略节点。一级节点SOURce是可省略节点。 3.3 算法实现

SCPI解释器工作流程分两个阶段。第一阶段词法分析。该阶段会分析收到的SCPI命令字符串,并按照SCPI-99规范对命令进行语法检查,如发现语法错误则返回错误代码;否则将命令字符串按照SCPI语法规则分割成命令符集合和参数集合。第二阶段搜索解空间树。根据第一阶段得到的命令字符集和参数集合,搜索解空间树,编译出指令码。流程如图3所示: 图3 SCPI命令解析流程

贪心算法:如果解空间树某一层没有对应的节点命令,且该层有

基于最优解空间树的SCPI解析器设计

基于最优解空间树的SCPI解析器设计SCPI(StandardCommandsforProgrammableInstruments)是一种标准化的程控仪器编程语言,采用标准语法格式描述仪器功能,为所有仪器仪表提供了一个广泛兼容的编程和数据使用环境。SCPI命令具有纵向兼容性,横向兼容性和功能兼容性,最大限度的保证了SCPI命令在控制仪器中的灵活性。根据SCP
推荐度:
点击下载文档文档为doc格式
82hfi8el094yj364q360565jb3urvy01137
领取福利

微信扫码领取福利

微信扫码分享