基于脚本的通用自动测试系统设计与实现

2018-03-06 03:45:41朱望纯张大伟
火力与指挥控制 2018年2期
关键词:关键字脚本命令

朱望纯,王 丽,张大伟

(1.桂林电子科技大学电子工程与自动化学院,广西 桂林 541004;2.解放军91872部队,北京 100000)

0 引言

随着测试技术不断发展和对测试要求的不断提高,自动测试系统(Automatic Test System,ATS)组建难度不断增加,尤其在测试任务改变和测试平台换代更新的情况下,经常需要重新构建新的测试系统来满足测试需求,造成资源和资金的浪费[1]。因此,构建一个架构开发灵活,软硬件通用,可扩展、易升级的通用ATS平台成为国内外ATS研究的趋势[2]。脚本语言作为一种可在测试平台上直接运行的可执行语言,具有可灵活编程、可复用、易维护的特点,关键字驱动的测试脚本将常用的ATS测试方法包装为关键字,提高测试脚本的复用性[3],为实现在ATS硬件环境基本不变,依据不同测试需求编写相应测试脚本完成测试任务,提供了一个良好的解决方案。

1 通用测试平台总体结构

通用ATS集成了测试信号与测试仪器,由软件平台控制完成各种状态、性能测试。系统构建基于PCI总线的通用ATS硬件平台,如图1所示,主要包括各类PCI板卡和控制开关网络组合的测控仪器、主控计算机等[4]。

主控计算机用于实现系统测试脚本编写和解析、数据管理和显示,以及软件平台管理、测试资源控制等;各类PCI板卡包括IO卡、AO卡、采集卡、定时计数器卡等,用于实现模拟量或者数字量的输入或输出,完成各种测试所需激励、测量、输出测试等操作;连接器、适配器由软件控制信号切换和连接UUT与测试资源,实现测试资源的合理分配和调用,增强了系统通用性[5]。

测试系统具有良好的通用性和开放性,针对不同被测对象,测试时主控计算机和测控仪器通用,配合灵活的软件设计,只需更换适配器即可实现平台重构,完成多种信号和接口的测试任务,使系统具有良好的扩展性、易升级。

2 软件平台总体方案

测试系统软件平台如图2所示,包括应用系统管理层、脚本解析、脚本指令功能函数等[6]。

系统软件平台是系统设计的关键,首先根据测试需求设计测试脚本,经解析模块,将解析出的脚本指令和参数带入对应的关键字脚本指令功能函数,进而调用仪器或板卡驱动执行相应的测试操作,完成测试任务。系统应用管理层的主要功能是管理平台的软硬件资源,测试任务脚本管理模块完成对不同测试任务的脚本设计、增删和保存等;系统配置模块完成仪器或板卡资源的通道配置、采样率配置、输入/出模式配置等;数据处理模块对测试结果评估、存储和报表打印;数据显示模块对测试数据、测试参数进行波形或图形显示[7]。

系统设计中引入了关键字测试脚本,其编程便捷灵活,可重用或相互调用,可完成多种测试任务,使得搭建的ATS具有更好的通用性。

3 关键技术

3.1 脚本命令关键字体系搭建

脚本命令是由关键字组成的森林结构,分为命令节点关键字和参数关键字,脚本词法语法的设计是系统设计的一个关键,直接关乎到系统软件的健壮性和可操作性[8],设计中的脚本命令关键字的词法、语法规则如下:

1)词法格式:一个英文单词或短语构成一条命令关键字

举例:AO(AO),SAMP(SAMPle),VOLT(VOLT-age),DWAV(DWAVe),CALC(CALCulate)...

2)语法格式:根结点关键字:一级节点关键字:二级节点关键字:···:n 级节点关键字[+‘空格’+参数 1[+ 单位]+‘,’+ 参数 2[+ 单位]···]+‘;’[+···+‘;:’]

说明:节点分隔符为“:”,命令分隔符为“;”,参数分割符为“,”,节点与参数分隔符为“(空格)”,不同层次命令(前后两条命令有不同的根节点)分割符为“;:”,“[]”内的部分是可选的。

举例:AO:CCH Dev2/ao2,-10 V,10 V;CONF:VOLT:DC 3V;SAMP 10000,500,CSAM;

其中:AO:根结点关键字;CCH、CONF、SAMP:AO的一级节点关键字;VOLT:AO的二级节点关键字;DC:AO 的三级节点关键字;Dev2/ao2,-10 v,10 v:指令CCH的3个参数,10 000,500,1:指令SAMP的3个参数。

根据通用ATS测试任务和软件平台设计方案,设计的脚本命令关键字主要包括信号类型(模拟/数字、输入/输出)、测量控制(电压/电流/频率等)、采样配置、数据计算、数据显示、结构控制(选择/循环)等。下页图3仅列出本文设计的模拟信号输入AI根节点下的部分关键字逻辑结构图(根结点及其子节点已排序)。

3.2 脚本命令设计

遵循脚本指令词法语法格式和搭建的基于关键字的脚本驱动体系,设计了6类功能脚本指令。

3.2.1 板卡操作指令

Card:Operate1 Para1,Para2...;Operate2 Para1,Para2...;

指令说明:Card:根结点,板卡类型,如“AO”(模拟输出)、“DI”(数字输入);Operate1、Operate2:分别是Card的子节点,按照树形逻辑结构引用,如“CCH”(创建通道)、“SAMP”(采样设置)、CONF(配置)、VOLT(配置电压)、SINe(配置正弦电压);Para1,Para2...:是命令节点Operate1或Operate2的参数,有设备/端口名、信号类型、采样率/点数、电压/电流幅值、电压/电流范围、周期等,其顺序关系确定后就被固定下来。

举例:AO:CCH Dev2/ao2,-10 V,10 V;CONF:VOLT:DC 3V;SAMP 10 000,500,CSAM;

功能说明:利用设备名为Dev2的AO卡,模拟输出电压端口ao2输出3 V直流电压,输出电压限制为±10 V,采样率为10 000,采样点数为500,采样方式为连续采样。

3.2.2 数据处理指令

Card:DProcess1 Para1,Para2...;DProcess2 Para1,Para2...;

指令说明:Card:为根结点,板卡类型;DProcess1、DProcess2:分别是Card的子节点,按照树形逻辑结构引用,如“CALC”(计算)、“AVER?”(计算平均值)、“RMS?”(计算有效值)、“VPP?”(计算峰峰值)、“SAVe?(存储)”[9];

举 例 :AI:CCH Dev1/ai1;CALC:AVER?;VPP?;RMS?;

功能说明:设备名为Dev1的AI卡,计算模拟输入通道ai1的数据平均值、峰峰值、有效值。

3.2.3 数据显示指令

Card:DDisplay1 Para1,Para2...;DDisplay2 Para1,Para2...;

指令说明:Card:根结点,板卡类型;DDisplay1、DDisplay2:分别是Card的子节点,按照树形逻辑结构引用,如“PORT”(选择端口)、“DIRection”(端口方向)、“STATus”(端口状态);Para1,Para2...:是命令节点DDisplay1或DDisplay2的参数,有端口名、输入/输出控制参数、端口状态参数等。

举 例 :DO:PORT Dev1/port0/line0:7;DIR#B11 010010;STAT#B10011110;

功能说明:设置板卡名为Dev1的DO卡,端口port0的第 0到 7位的端口方向及状态,“DIR#B11010010”设置第 0、2、3、5位端口方向为输出,其他位为输入,“STATus#B11011110”将第 0、2、3、5位端口状态分别设置为输出低、高、高、低电平,另外对DO卡的第1、4、6、7位输入端状态的设置无意义。

3.2.4 选择控制指令

IF、ELSe、SWITch、CASe、DEFault

指令说明:IF/ELSe语句是用来判定所给定的条件是否满足,若满足执行IF后的脚本语句,不满足执行ELSE后的脚本语句;SWITch/CASe/DEFault语句是用来实现多分支选择结构,如果CASe后的某个条件满足,则执行该语句,如果条件都不满足,执行DEFault后的脚本语句。

3.2.5 循环控制指令

DO、WHILe、BREak、UNTil、IF/GOTO

指令说明:IF/GOTO语句实现循环结构,GOTO后的参数为语句标号,当IF后的条件语句满足时,往下执行到GOTO:lable;:语句跳转到标号lable处继续执行;UNTil语句,执行UNTil后的条件语句,直到为真才能继续执行下面的脚本语句[10]。

3.2.6 脚本延时指令

DELay para1;:

指令说明:延时para1<s>

3.3 脚本命令解析

通过分析脚本命令的词法、语法规则,将脚本命令解析分为命令存储及查询、词法分析等6个模块,脚本解析的流程如下页图4所示。

3.3.1 脚本命令存储及查询

脚本命令选用数组链表存储结构,将根结点的每级子节点关键字按照字母大小顺序存储在命令节点数组中,数组记录了节点长/短型关键字、子节点个数、子节点对应的功能函数编号等。根据脚本命令的存储结构,选用二分查询算法,每次查询的时间复杂度是O(log2n),平均查找长度是(n+1)*log2(n+1)/n-1,n为子节点数组长度[11]。

3.3.2 词法分析模块

脚本命令词法分析分为命令分解和词法语法分析两个阶段,命令分解是按照脚本命令的词法规则,从首字符开始解析,遇到“;、;:、(空格)、:”便将脚本命令分解成命令节点和命令参数并分别存储。命令参数的词法语法分析,首先识别出首字符来判断参数类型,首字母为“#”、“+/-/数字”、“char型字母”的参数类型分别为二八十六进制类型、十进制数据类型、标识符类型,然后进入到相应的参数处理模块,有单位的进入到单位处理模块。

3.3.3 命令参数处理模块

在不同数据类型参数的处理模块中,首先通过语法分析判断是否符合该参数类型的语法格式,再分别存储。若是标识符类型,则通过二分查询算法与参数存储结构中的参数关键字比较;若是数值类型,则通过语法分析判断是否符合数值类型语法规则,若有单位,进入数值型数据单位处理模块。

3.3.4 参数单位处理模块

字符型和十进制参数字符串解析完,参数后的字符串即是该参数的单位,将单位字符串与单位存储结构中的单位参数关键字比较,如果一致,则参数单位正确[12]。

3.3.5 错误信息报告模块

当解析过程出现错误时,将错误信息字符串指针指向错误信息存储结构,报告错误信息[13]。

3.3.6 功能函数模块

脚本指令经解析,将得到的命令及参数引入到对应的功能函数中,通过调用仪器或板卡驱动函数,在函数中完成脚本指令的执行。

4 测试结果

为验证基于脚本设计的通用ATS平台的通用性和可行性,设计了两通道测试脚本——AnalogSamps2Ch,实现了两路电压输出,并实时采集通道1输出的5 V斜坡电压,当其电压最大值达到3 V时启动通道2采集。

设计采用NI公司的多通道高性能数据采集卡PCI-6259(设备名为Dev2)完成数据输出和采集,首先通道1和通道2分别由板卡端口ao0和ao1连续输出5 V斜坡电压和5 V正弦电压信号,启动通道1的ai0回采ao0的输出信号;直到ai0采样得到的电压最大值等于3 V时,配置ao0输出3 V直流电压,并启动通道2的ai1回采ao1的输出电压;绘制两路通道的波形图,同时计算波形峰峰值、有效值、平均值等参数信息,经延时10 s后停止测试任务。测试结果显示界面如图5,点击“脚本选择”,从路径中选择测试脚本,并分别在编辑框中显示脚本名称和脚本语句,脚本执行后,两通道的波形数据显示、配置信息、参数信息都由脚本解析得到并显示在用户界面中。

从执行结果可知,设计的基于脚本测试系统成功完成了脚本解析执行,各项指标和运行状态达到了期望,从而验证系统设计的可行性和通用性。

5 结论

本文设计并实现的基于脚本的通用ATS,具有灵活的编程方式和人性化的操作界面,可以满足ATS中各类复杂的测试任务需求,而且基于脚本的设计编程方式简单、灵活,具有较好的通用性和可扩展性。

[1]郭荣斌,赵秀才.自动测试系统的发展趋势[J].国外电子测量技术,2014,32(6):1-4.

[2]吕晓峰,马羚,冯小南.ATS软件平台的通用性研究与设计[J].计算机测量与控制,2012,20(2):538-540.

[3]张杲轩,张谊,李春雷.基于脚本的自动化软件测试框架[J].太赫兹科学与电子信息学报,2013,11(5):797-801.

[4]付莹,黄晓晴,缪永生.通用测试软件开发平台的设计方法及应用[J].计算机测量与控制,2014,22(12):4190-4193.

[5]谢化勇,肖明清,陈伟明,等.某型导发架通用测试系统软件复用性设计 [J].火力与指挥控制,2010,35(1):156-159.

[6]叶海明,周绍磊,王昆平.通用测试系统软件平台设计[J].国外电子测量技术,2010(2):54-57.

[7]刘阳,李玺.某型导弹测试系统模块化设计[J].火力与指挥控制,2015,40(7):168-169.

[8]黄威,聂藩,丁建完.关键字驱动的测试自动化框架模型与系统实现[J].计算机技术与发展,2012,22(4):57-60.

[9]祁琳莹,洪玫,冯丽云,等.一种针对单元测试框架的测试脚本重用方法 [J].计算机应用研究,2013,30(6):1764-1768.

[10]王军,孟凡鹏.基于关键字驱动的自动化测试研究与实现[J].计算机工程与设计,2012,33(9):3652-3656.

[11]陈效儒,何宇化.关键字驱动的嵌入式实时软件自动化测试框架研究[J].工业控制计算机,2014(2):46-47.

[12]李海龙,刘文文.基于VC++6.0的SCPI解释器设计[J].电子设计工程,2012,20(4):94-96.

[13]程专.数字示波器SCPI命令系统及程控软件的设计与实现[D].成都:电子科技大学,2014.

猜你喜欢
关键字脚本命令
酒驾
履职尽责求实效 真抓实干勇作为——十个关键字,盘点江苏统战的2021
华人时刊(2022年1期)2022-04-26 13:39:28
只听主人的命令
安奇奇与小cool 龙(第二回)
成功避开“关键字”
数据库系统shell脚本应用
电子测试(2018年14期)2018-09-26 06:04:24
移防命令下达后
快乐假期
中学生(2017年19期)2017-09-03 10:39:07
这是人民的命令
蓝色命令