| 基于LabWindows/CVI的测试引擎设计与实现 |
|
| 2001-11-29 |
1、引言
目前,VXI、PXI、PC-DAQ三种体系结构的虚拟仪器、数据采集模块和GPIB仪器,以及LabVEW、LabWindows/CVI、HP VEE等测试软件为研制大型测试系统提供了良好的开发环境,尽管如此,由于VXI的复杂性、CVI软件的过于庞大,装备测试人员依然无法在短期内进入开发状态,为此课题组在测试流程与具体仪器控制之间建立测试引擎,不但简化了程序设计,也将仪器控制与测试程序完全隔离,同时实现了硬件平台的变化不会影响程序的目的。
如图1所示,虚拟仪器测试系统的通用结构由混合总线测量仪器及数据采集模块、专用转接及信号调理模块、被测对象三大部分组成。虚拟仪器主要由VXI、PXI、IPC总线的仪器模块及其驱动程序构成,测试系统中往往要采用一些GPIB总线的台式仪器,比如直流稳压电源、频谱分析仪等。专用转接及信号调理模块是根据具体被测对象由课题组自行设计的专用模块,包括被测对象信号变换、功率驱动、模拟负载等电路组成。被测对象包括武器装各中各种电子组合,例如制导雷达的时钟组合、视频接收机、发射机、显示器、数据处理组合等。我们定义测量仪器部分与专用转接模块的接口称为Ai(A1~Aa〉,专用转接模块与被测对象的接口称为Bi(B1~Bn),测试程序通过控制仪器的输入输出实现所有的测试功能。
2、测试引擎层次结构
测控系统一般由人机界面、数据处理、测试引擎即数据采集引擎、故障诊断引擎四部分组成,随着可视化开发软件功能的不断提高,人机界面的建立变成轻而易举的事情:数据处理程序因具体测试而异,并有CVI提供的数据处理库支持,仍然可以得到很好的解决。所以开发测控系统的关键是完成测试引擎和故障诊断引擎。
测试引擎结构如图2所示,可以分为功能层、逻辑层、仪器操作层、接口配置文件、接口配置工具五个部分。
2.1功能层
功能层是整个结构的最高层,面向测试系统开发的最终用户,测试系统开发完全针对B接口进行,功能层不用出现任何与仪器有关的信息,因此与测试系统完全隔离,描述的都是有关测试流程及结果判定的过程。
2.2逻辑层
逻辑层将功能层的功能映射到具有逻辑名称的仪器和通道,该逻辑名可以指向测试系统中一台特定设备,当该仪器模块更换时,只需要改变逻辑名的指向为了新型设备即可,具有仪器无关性。
2.3仪器操作层
仪器操作层利用仪器驱动程序或随仪器模块提供的动态链接库控制硬件的所有操作,仪器驱动程序包括VPP规范、IVI(Interchangeability Virtual Instrumentation)规范、底层接口驱动程序三种。
2.4接口配置文件
接口配置文件存储A、B接口映射信息,接口所属仪器及通道,通道具备的操作功能,操作仪器应具备的其它附加条件等。
2.5接口配置工具
接口配置工具用于交互式配置A、B接口映射关系、多路开关与数字多用表及示波器等连接方式等信息,并存储在配置文件中,供测试引擎使用。
3、测试引擎数据模型
测试引擎是二套封装了虚拟仪器具体功能实现细节,对外提供标准功能接口的函数库和配置工具的软件包,将所有仪器(最小集合是本测试系统中的仪器〉可实现的功能进行分类,忽略各个仪器的实现细节,比如数字多用表与A/D模块测量电压的功能接口是一样的,具体调用哪个仪器操作视仪器接口与被测对象的连接关系而定,连接关系由引擎根据配置文件自动获得。
通用测试引擎的功能是将测试流程中所描述的功能映射为具体的仪器控制例程,为了完成映射关系首先引入如下数据模型:
功能集合:F={fi|
数据参数集合:D={Di|1
仪器逻辑名:N={ni|1
仪器对应通道分类:C={ci|1
每类仪器及通道所具备的功能集合:FU={fui|1
4、测试引擎的实现
测试引擎的核心是仪器控制、接口映射、状态缓存,采用LabWindows/CVI软件开发。
4.1仪器控制
大多数VXI、GPIB、RS232、PXI总线的仪器都具有自己的仪器驱动程序和函数面板,可以在CVI集成环境中通过Instruments>>Load菜单加载后交互式引入函数,对没有提供符合VPP规范的驱动程序的模块,则采用VISA I/O库函数,通过SCPI命令对仪器进行控制。
由于大多数国产ISA、PCI、PCMCIA等总线的数据采集卡没有提供可以在CVI中加载的函数面板,因此,测试引擎中通过调用相应的*.DLL库函数来控制采集卡的操作。
4.2功能映射
映射功能通过函数指针的方法实现,在头文件中声明函数如下:
typedef void(*menufun)(void);//定义函数类型
void select_fun(menufun f);//功能选择函数
void m1(),m2(),m3(),m4(),m5(),m6(),m7(),m8(),m9();//执行不同子功能的函数
在源文件中设置函数名为如下变量:
menufun opt[9]={m1,m2,m3,m4,m5,m6,m7,m8,m9};
int record;
通过下面语句根据操作码不同分别调用相应的函数:select_fun(opt[record]);
采用函数指针的方法太太缩短了源代码长度,提高了程序执行效率。
4.3状态缓存
每个仪器都有一定的属性集,比如采样率、输入值范围、测量状态等,为了避免程序每进行一次测量都要重新设置仪器的状态(有时仪器状态的变换是靠继电器等实现的,设置一次时间较长),程序需要跟踪仪器状态,只有仪器状态与要操作的状态不同时才进行改变,为了实现这一功能,CW提供了一系列IVI函数,程序中通过调用如下函数实现仪器属性的跟踪和缓存:
Ivi_SetAttribute***(…);
Ivi_GetAttribute***(…);
其中***为VISA中定义的各种数据类型,比如ViBoolean、ViReal64\ViInt32等。
4.4配置工具
配置工具采用CVI对文本文件操作的功能建立和管理接口映射信息、仪器逻辑名、仪器功能。配置文件中具有以下字段:
(1)[LogicalNames]:本区信息指定逻辑名对应的虚拟仪器名称。
(2)[Vinstr->somevinstr]:定义和配置虚拟仪器
(3)[Driver->somedriver]:定义和配置一个驱动程序文件〈driver.dll〉。
Description=描述一个具体仪器驱动程序
ModulePath=驱动程序路径i如果路径缺省则设定为C:\VXIPNP\WINxx\BIN\
InteIface=例如GPIB或SERIAL等
Function={功能字符串}
(4)[Hardware->somehardware]:描述一个仪器的物理位置。
ResourceDesc=正确的VISA资源字串,例如“GPIB::1::INSTR”,仪器驱动程序通过该名称找到硬件仪器。
Channell=A1通道名称。
(6)[Port->map]B接口到A接口的映射列表。
5、结束语
虚拟仪器通用测试引擎是为适应目前复杂的武器系统测试和缩短开发周期、降低维护费用、提高维护效率而设计的,可以使测试系统具有硬件无关性,目前已在“某大型导弹综合检测维修系统”,项目中得到应用,并成为通用测控软件开发平台。
|
摘: |
|