一种scpi命令定义、解析、执行和测试的方法
【技术领域】
[0001]本发明涉及程序控制领域,特别涉及一种SCPI命令定义、解析、执行和测试的方法。
【背景技术】
[0002]SCPI (Standard Commands for Programmable Instruments)作为智能仪器程控命令的业界标准,已经得到广泛的应用。
[0003]由于SCPI规范和IEEE488规范的专业性较强,且不同仪器的命令和参数等方面存在较大差异。目前,常规的SCPI解析器可实现SCPI命令的解析,SCPI命令树的创建需要另一个单独的工具,尚没有一套完整的解决方案。
[0004]上述方案存在一定的局限性:
[0005](1)、功能单一,可扩展性不强;
[0006](2)、SCPI命令的解析与SCPI命令树的生成相互独立,这给程控命令的后续维护和版本管理带来不便;
[0007](3)、缺乏SCPI命令的定义、解析、执行到测试的完整的解决方案,往往造成中间环节脱节;
[0008](4)、缺乏SCPI命令的自动测试和全面验证,为仪器软件的开发埋下了诸多隐患。
【发明内容】
[0009]为解决上述现有技术的不足,本发明提出一种SCPI命令定义、解析、执行和测试的方法。
[0010]本发明的技术方案是这样实现的:
[0011]—种SCPI命令定义、解析、执行和测试的方法,包括以下步骤:
[0012]步骤(1)、设计SCPI命令定义规则,定义命令的命令码、主体、参数、命令选项;
[0013]步骤(2)、预处理规则文件;
[0014]步骤(3)、根据SCPI数组,在内存中动态创建经过排序的命令树;
[0015]步骤(4)、将用户输入的命令解析成内部可识别的命令码,并根据命令码执行预定义的命令函数,对于无效命令,给出符合SCPI规范的错误码和错误信息,包括:预处理、命令解析、命令执行;
[0016]步骤(5)、将规则文件定义的命令分解成相应形式,对每种形式进行解析,包括创建SCPI数组、创建命令树、解析执行。
[0017]可选地,所述步骤(1)中,命令码是唯一标识命令的整数,按命令的升序从1开始递增;
[0018]命令主体由以分号隔开的命令关键字组成;对于每个关键字,定义其长格式规范、短格式规范、数值后缀规范、缺省规范、等价规范;
[0019]参数定义命令的参数清单,包括参数类型、参数单位、参数范围;
[0020]命令选项包括命令的操作选项、用户选项。
[0021]可选地,所述步骤(2)中,预处理规则文件具体包括以下步骤:
[0022]步骤(21)检查规则是否有效,无效时定位错误位置,并给出错误信息;
[0023]步骤(22)如果规则文件有效,则产生加密后的SCPI格式化命令数组。
[0024]可选地,所述步骤(3)具体包括:预处理、规则解析与处理、命令树的管理。
[0025]预处理:对SCPI数组进行解密操作;
[0026]规则解析与处理:包括命令解析、参数解析与单位解析;
[0027]命令树的管理:包括创建、插入、删除、拷贝和查询操作;其中,
[0028]创建操作:创建新的命令树节点,将新命令树节点信息存储到关键字结构数组中;
[0029]插入操作:在指定位置插入新的节点,插入位置是通过查询命令树获取;
[0030]删除操作:删除指定节点及其子节点;
[0031]拷贝操作:拷贝一个节点的所有信息到另一个节点,节点的短格式首先加入命令树,长格式直接拷贝短格式节点;
[0032]查询操作:从命令树的指定位置查找用户指定节点,如果存在,则返回找到的节点,否则返回查找前的节点。
[0033]可选地,所述步骤(4)中,
[0034]预处理:对命令单元进行词法分析,将满足SCPI规范的命令单元存入命令缓冲区,对于不满足规范的命令单元进行错误处理;
[0035]命令解析:执行命令的解析,将解析结果存入解析结果缓冲区;
[0036]命令执行:根据命令解析产生的解析结果,执行预定义的命令函数。
[0037]可选地,所述步骤(5)具体包括:
[0038]创建SCPI数组:在内存中动态创建格式化的命令数组,用于创建命令树;
[0039]创建命令树:在内存中动态创建命令树;
[0040]解析执行:对待测试的命令进行解析,统计解析用时。
[0041 ] 可选地,所述步骤(6)具体包括:
[0042]生成器产生框架代码的初始源代码,该代码可直接与仪器软件一起编译;
[0043]通过SCPI库封装的程控命令函数指针设置函数将函数列表传给SCPI库,SCPI库在完成用户命令的解析后,直接根据命令码,索引该列表,并执行;
[0044]通过SCPI库封装的SCPI库装载函数将SCPI数组传给SCPI库,SCPI库进行用户命令树的动态创建;
[0045]仪器编程人员将接收到的命令信息存入命令接收缓冲区,调用执行框架中的函数进行解析执行。
[0046]本发明的有益效果是:
[0047](1)、操作简单,实现了一键式生成SCPI命令的完整解决方案,简化了仪器的程控软件设计流程,提高了仪器软件的开发效率;
[0048](2)、通过制定一整套SCPI命令规则,可以定义不同风格和需求的SCPI命令,满足不同智能仪器的需要;
[0049](3)、通过将SCPI命令树的创建、命令的解析、测试和执行与仪器软件高度集成,降低了用户的使用门槛;
[0050](4)、SCPI命令树的创建和解析是独立于仪器软件的,可应用于不同操作系统、不同编程环境的仪器中,具有很强的可移植性、可扩展性和可维护性;
[0051](5)、通过SCPI命令的测试与验证,保证了 SCPI命令的完整解决方案的功能和性能可靠。
【附图说明】
[0052]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0053]图1为本发明一种SCPI命令定义、解析、执行和测试的方法的流程图。
【具体实施方式】
[0054]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0055]本发明设计了一种SCPI命令定义、解析、执行和测试的完整解决方案,包括SCPI命令定义、SCPI命令树的创建、SCPI命令解析与执行、SCPI命令自动测试、SCPI执行框架自动产生。
[0056]下面结合附图对本发明的方法进行详细说明。
[0057]如图1所示,本发明的SCPI命令定义、解析、执行和测试的方法包括以下步骤:
[0058]步骤(1)、设计SCPI命令定义规则,定义命令的命令码、主体、参数、命令选项等。
[0059]其中,命令码是唯一标识命令的整数,按命令的升序从1开始递增。
[0060]命令主体由以分号隔开的命令关键字组成。对于每个关键字,定义其长格式规范、短格式规范、数值后缀规范、缺省规范、等价规范。下面对各种规范进行详细说明:
[0061]长格式规范:以字母开头,大小写混合表示,可含下划线。长型助记符由一个单词或短语构成。如果是单词,则整个单词构成助记符;如果是短语,则前面单词的第一个字符和最后一个单词构成助记符。
[0062]短格式规范:是长型助记符的缩写,用大写字母或下划线表示,不超过4个字符。通常为长格式的前4个字符;长格式不足4个字符时,全部大写;例外情况是长格式超过4个字符,且第4个字符为元音,则短格式为前3个字符。
[0063]数值后缀规范:“[d]nl0-nll|n20-n22|...”,其中,d,nlO,nil,n20,n22 等代表整数值;后缀的范围为0到255,递增排列,不得重复;“ [d] ”表示缺省后缀为d 表示相邻后缀是连续的;“ | ”表示分段后缀区间。
[0064]缺省规范和等价规范:缺省关键字用“[]”表示,等价关键字用“ | ”隔开,如[:SENSe]:BANDwidth|BWIDth,第 1 个关键字可省略,BANDwidth 和 BWIDth 等价。
[0065]参数定义命令的参数清单,包括参数类型,参数单位,参数范围。参数类型包括:整型、浮点型、字符型、字符串型、表达式、数据块等;除了 IEEE488.2规定的标准单位外,还可以定义用户特有单位。参数范围包括参数的最小值、最大值、缺省值、步进值。
[0066]命令选项包括命令的操作选项、用户选项。操作选项规定命令的查询和设置属性,包括仅设置、仅查询、可设置可查询;用户选项规定命令是否对普通用户开放。
[0067]步骤⑵、规则文件的预处理,具体包括以下步骤:
[0068]步骤(21)检查规则是否有效,无效时定位错误位置,并