一种通用虚拟仪器接口实现方法

文档序号:6474995阅读:163来源:国知局
专利名称:一种通用虚拟仪器接口实现方法
技术领域
本发明属于计算机自动测试领域,特别是涉及一种通用虚拟仪器接口实现方法。
背景技术
长期以来,互换性成为许多工程师建造计算机自动测试系统的目标。因为在很多 情况下,仪器硬件不是过时就是需要更换,因此迫切需要一种无需改变测试程序代码就可 用新的仪器硬件改进系统的方法。随着PC计算机功能、性能的迅速发展,以及面向对象和可视化编程技术在软件领 域为更多易于使用、功能强大的软件开发提供了可能性,图形化操作系统Windows成为PC 机的通用配置。在这种背景下,虚拟仪器的概念在世界范围内得到广泛的认同和应用。VI (虚拟仪器,Virtual Instrument)通过应用程序将通用计算机与仪器硬件结合起来,用户 可以通过友好的图形界面(通常叫做虚拟前面板)操作这台计算机,就象在操作自己定义、 自己设计的一台单个传统仪器一样。VI以透明的方式把计算机资源(如微处理器、内存、 显示器等)和仪器硬件(如A/D、D/A、数字I/O、定时器、信号调理等)的测量、控制能力结 合在一起,通过软件实现对数据的分析处理、表达以及图形化用户接口。在虚拟仪器得到人 们认同的同时,虚拟仪器的相关技术规范也在不断地完善。美国NI公司、Agilent公司、 Tektronix公司、Racal公司等相继推出了基于GPIB总线、Serial串行总线、ISA总线、 PCI/CompactPCI总线、VXI总线、PXI总线和LXI总线等多种虚拟仪器与通用计算机系统的 物理总线接口。软件接口是完成计算机和仪器间通信的通道,通常称为仪器驱动程序。为了给种 类繁多物理总线接口的虚拟仪器方便的开发仪器驱动程序,VPP系统联盟制定了新一代的 接口软件规范,即虚拟仪器软件体系(Virtual Instrument Software Architecture,简称 VISA),使得各个厂商均以该接口软件作为I/O控制的底层函数库来开发仪器驱动程序。这 样,不同厂商的软件就可以在同一平台上协作运行,大大减少了软件的重复开发。VISA是 在不同的总线上作了一个统一的编程接口,使用VISA接口编写的程序可以对使用不同总 线的仪器进行控制。对仪器驱动器和应用程序而言,VISA库函数是一套可方便调用的函 数,其核心函数能够控制各种类型器件,无需考虑器件的接口类型和软件的兼容性。尽管如此,在仪器编程和测试系统软件应用方面,仍存在一些亟待解决的问题,比 如,能否做到在更换系统中一些陈旧仪器时测试软件无需改动;一个测试软件包能否适应 不同类型仪器硬件构成的测试系统;测试代码能否被移植到不同的仪器上;当仪器故障或 需要校准时,测试系统能否不间断运行。基于以上问题,NI公司提出了一种可互换的仪器 驱动编程模型,联合众仪器厂商成立了 IVI基金会,致力于在VPP兼容框架的基础定义上 定义一系列标准仪器编程模型。IVI驱动比VISA规范更高一层,是在同类仪器不同的产品 间作了一个统一的编程接口。使用IVI仪器驱动器可以对支持IVI规范的同类仪器进行控 制。使用IVI仪器驱动器最重要的目的就是使得在不更换应用程序代码、不进行源程序重 新编译的条件下实现测试系统中仪器的更换。为了实现互换,IVI仪器驱动器必须要有标准的程序接口。目前,IVI基金会定义了 8类驱动器功能组。但是,在实际多个项目的技术保障系统研制过程中,在实现虚拟仪器的软件接口 时,仍存在一些亟待解决的问题。主要问题是
a)国内外具有IVI驱动程序开发能力的厂家非常有限,导致可选择的具有IVI驱动 程序的测试仪器产品种类不全,给仪器设备的选型带来现实的困难;
b)由于IVI基金会目前仅定义了8类驱动器功能组,其他大量的仪器设备(如通讯类 仪器)不能涵盖,导致无法将IVI驱动作为主要的软件接口使用;
c)IVI驱动规范体系复杂,配置方法繁琐,不同厂家之间的IVI驱动程序的兼容性无 法保证,也限制了 IVI标准规范在世界范围内的推广使用。

发明内容
鉴于以上问题,本发明的主要目的在于提供一种通用虚拟仪器接口实现方法,实 现在不更换应用程序代码、不进行源程序重新编译的条件下测试系统中仪器的更换。本发明提供的所述通用虚拟仪器接口实现方法,主要包括以下步骤
a、每种仪器的通用软件接口统一成windows系统中标准32位dll动态链接库型式;
b、所有仪器的通用软件接口dll动态链接库规定了 4个标准引出函数打开函数、关闭 函数、自检函数和测量函数;
c、每种仪器同时定义一个通用软件接口描述文件,统一以GDV作为文件扩展名;
d、根据每种仪器的通用软件接口描述文件分别定义4个标准弓I出函数的输入/输出参 数的数量和数据类型;
e、当在应用程序中使用该种仪器的某一功能时,由测试人员根据该仪器的通用软件接 口描述文件的描述,对仪器的功能进行配置;配置完毕后,由应用程序将配置结果作为传递 参数,动态调用仪器的通用软件接口 dll动态链接库规定的4个标准引出函数;
f、4个标准引出函数根据应用程序传递过来的参数,再次调用仪器的实际驱动程序或 其他应用程序模块,并将执行结果返回应用程序。其中,所述步骤b中所有仪器的通用软件接口 dll动态链接库规定的4个标准引 出函数打开函数、关闭函数、自检函数和测量函数的函数原型定义为
1 long UiDeviceOpen (char* resourceName) 函数名称打开函数
第1个参数输入参数指针,逻辑名或资源名或初始化字符串,直接从前面仪器管理数 据表的ResourceName字段读取
函数返回值如果>=0则函数执行成功,否则执行失败。1 long UiDeviceClose (void) 函数名称关闭函数
函数返回值如果>=0则函数执行成功,否则执行失败。1 long UiDeviceSelftTest(void) 函数名称自检函数
函数返回值如果>=0则函数执行成功,否则执行失败。1 long UiDeviceMeasure (char* InputParaListjint InputParaNumj char*ReturnParaList, int ReturnParaNum) 函数名称测量函数 第1个参数输入参数指针 第2个参数输入参数个数 第3个参数输出参数指针 第4个参数输出参数个数
函数返回值如果>=0则函数执行成功,否则执行失败。所述步骤e中动态调用仪器的通用软件接口 dll动态链接库规定的4个标准引出 函数的方法是
首先声明4个入口函数;
在应用程序里获取dll动态链接库及4个标准引出函数的地址; 调用打开函数,进行仪器的初始化; 调用自检函数,进行仪器的自检;
调用测量函数,传入参数,得到结果,传入参数的类型、顺序、个数都由通用软件接口描 述文件(简称GDV文件)动态定义;
最后调用关闭函数,进行关闭仪器操作。所述⑶V文件的编制规则
GDV文件为虚拟仪器通用软件接口的说明性文件,与虚拟仪器通用软件接口动态连接 库一起使用,作为应用程序调用虚拟仪器通用软件接口的依据;
GDV文件为纯文本文件,文件扩展名统一规定为” .gdv”,每一种仪器一个接口描述文
件;
文件分成6段落,即[程序]、[运行]、[函数]、[输入参数]、[输出参数]和[结 束],整个文件以[程序]开头,以[结束]为结尾;
每个段落包括若干行,每行采用“=”表达式的形式,表达式“=”左侧为属性,右侧为取 值,用来描述仪器驱动的不同属性和取值,每行以“;”作为结尾,注释均以“//”开头; [程序]段描述仪器的型号和仪器的功能; [运行]段落描述仪器动态链接库的文件名、版本号和类型;段落描述仪器驱动程序所包括的函数,若一种仪器驱动包括多个函数,则依次 按顺序全部列写在[函数]这个段落里;段落描述每个驱动函数输入参数的属性和取值,若一种函数包括多个输 入参数,则依次按顺序全部列写在[输入参数]这个段落里;段落描述每个驱动函数输出参数的属性和取值,若一种函数包括多个输 出参数,则依次按顺序全部列写在[输出参数]这个段落里; [结束]段落标识整个接口文件的结束。本发明提供的所述通用虚拟仪器接口实现方法,实现了在不更换应用程序代码、 不进行源程序重新编译的条件下测试系统中仪器的更换;一个测试软件包能够适应现有 的、甚至未来的不同类型仪器硬件和总线构成的测试系统;测试代码可以不加修改的被移 植到不同的仪器上。另外,使用本发明提供的所述通用虚拟仪器接口实现方法,也可以实现不同软件
6程序模块之间的数据通信功能。
具体实施例方式
以下结合具体实施例对本发明的技术方案进一步说明,但不作对其的限定 本发明提供的所述通用虚拟仪器接口实现方法,主要包括以下步骤
a、每种仪器的通用软件接口统一成windows系统中标准32位dll动态链接库型式;
b、所有仪器的通用软件接口dll动态链接库规定了 4个标准引出函数打开函数、关闭 函数、自检函数和测量函数;
c、每种仪器同时定义一个通用软件接口描述文件,统一以GDV作为文件扩展名;
d、根据每种仪器的通用软件接口描述文件分别定义4个标准弓I出函数的输入/输出参 数的数量和数据类型;
e、当在应用程序中使用该种仪器的某一功能时,由测试人员根据该仪器的通用软件接 口描述文件的描述,对仪器的功能进行配置;配置完毕后,由应用程序将配置结果作为传递 参数,动态调用仪器的通用软件接口 dll动态链接库规定的4个标准引出函数;
f、4个标准引出函数根据应用程序传递过来的参数,再次调用仪器的实际驱动程序或 其他应用程序模块,并将执行结果返回应用程序。其中,所述步骤b中所有仪器的通用软件接口 dll动态链接库规定的4个标准引 出函数打开函数、关闭函数、自检函数和测量函数的函数原型定义为
1 long UiDeviceOpen(char* resourceName) 函数名称打开函数
第1个参数输入参数指针,逻辑名或资源名或初始化字符串,直接从前面仪器管理数 据表的ResourceName字段读取;
函数返回值如果>=0则函数执行成功,否则执行失败; 1 long UiDeviceClose(void) 函数名称关闭函数
函数返回值如果>=0则函数执行成功,否则执行失败; 1 long UiDeviceSelftTest(void) 函数名称自检函数
函数返回值如果>=0则函数执行成功,否则执行失败;
1 long UiDeviceMeasure (char* InputParaListjint InputParaNumj char* ReturnParaListj int ReturnParaNum) 函数名称测量函数 第1个参数输入参数指针 第2个参数输入参数个数 第3个参数输出参数指针 第4个参数输出参数个数
函数返回值如果>=0则函数执行成功,否则执行失败。所述步骤e中动态调用仪器的通用软件接口 dll动态链接库规定的4个标准引出 函数的方法是
1 首先声明4个入口函数,示例代码如下typedef long (^ADDUiDeviceMeasure) (char氺 Input,int InputNumj char氺 Output, int OutputNum);
typedef long (^ADDUiDeviceSelftTest) (void); typedef long (^ADDUiDeviceOpen) (char* resourceName); typedef long (^ADDUiDeviceClose) (void); ADDUiDeviceMeasureUiDeviceMeasure;
ADDUiDeviceSelftTest UiDeviceSelftTest; ADDUiDeviceOpenUiDeviceOpen;
ADDUiDeviceCloseUiDeviceClose;
I在应用程序里获取dll动态链接库及4个标准引出函数的地址,示例代码如下 //获取动态链接库地址
HINSTANCE hlnst; hInst=LoadLibrary(m_filename);
if (!hlnst)
{
AfxMessageBox (〃 获取 dl 1 失败!“); return;
}
II获取测量函数地址 UiDeviceMeasure= (ADDUiDeviceMeasure) GetProcAddress (h Inst,"UiDeviceMeasure");
if (!UiDeviceMeasure)
{
AfxMessageBox (〃 获取 UiDeviceMeasure ()函数地址失败!“); return;
}
Il获取自检函数地址
UiDeviceSelftTest= (ADDUiDeviceSelftTest)GetProcAddress(hlnst, "UiDeviceSel ftTest〃);
if(!UiDeviceSelftTest)
{
AfxMessageBox (〃 获取 UiDeviceSelftTest 函数地址失败!“); return;
}
//获取打开函数地址 UiDeviceOpen= (ADDUiDeviceOpen) GetProcAddress (hlnst, 〃UiDeviceOpen〃);
if(!UiDeviceOpen)
{
AfxMessageBox (〃 获取 UiDeviceOpen 函数地址失败!“); return;//获取关闭函数地址 UiDeviceClose=(ADDUiDeviceClose)GetProcAddress(hlnst,〃UiDeviceClose〃);
if (!UiDeviceClose)
{
AfxMessageBox (〃 获取 UiDeviceOpen 函数地址失败!“); return;
}
调用打开函数,进行仪器的初始化; 调用自检函数,进行仪器的自检;
调用测量函数,传入参数,得到结果,传入参数的类型、顺序、个数都由通用软件接口描 述文件(简称GDV文件)动态定义;
最后调用关闭函数,进行关闭仪器操作。所述⑶V文件的编制规则
GDV文件为虚拟仪器通用软件接口的说明性文件,与虚拟仪器通用软件接口动态连接 库一起使用,作为应用程序调用虚拟仪器通用软件接口的依据;
GDV文件为纯文本文件,文件扩展名统一规定为” .gdv”,每一种仪器一个接口描述文
件;
文件分成6段落,即[程序]、[运行]、[函数]、[输入参数]、[输出参数]和[结 束],整个文件以[程序]开头,以[结束]为结尾;
每个段落包括若干行,每行采用“=”表达式的形式,表达式“=”左侧为属性,右侧为取 值,用来描述仪器驱动的不同属性和取值,每行以“;”作为结尾,注释均以“//”开头; [程序]段描述仪器的型号和仪器的功能; [运行]段落描述仪器动态链接库的文件名、版本号和类型;段落描述仪器驱动程序所包括的函数,若一种仪器驱动包括多个函数,则依次 按顺序全部列写在[函数]这个段落里;段落描述每个驱动函数输入参数的属性和取值,若一种函数包括多个输 入参数,则依次按顺序全部列写在[输入参数]这个段落里;段落描述每个驱动函数输出参数的属性和取值,若一种函数包括多个输 出参数,则依次按顺序全部列写在[输出参数]这个段落里; [结束]段落标识整个接口文件的结束。以上已对本发明的技术内容作了详细说明。对本领域一般技术人员而言,在不背 离本发明原理的前提下对它所做的任何显而易见的改动,都不会超出本申请所附权利要求 的保护范围。
权利要求
一种通用虚拟仪器接口实现方法,其特征在于,包括以下步骤a、每种仪器的通用软件接口统一成windows系统中标准32位dll动态链接库型式;b、所有仪器的通用软件接口dll动态链接库规定了4个标准引出函数打开函数、关闭函数、自检函数和测量函数;c、每种仪器同时定义一个通用软件接口描述文件,统一以GDV作为文件扩展名;d、根据每种仪器的通用软件接口描述文件分别定义4个标准引出函数的输入/输出参数的数量和数据类型;e、当在应用程序中使用该种仪器的某一功能时,由测试人员根据该仪器的通用软件接口描述文件的描述,对仪器的功能进行配置;配置完毕后,由应用程序将配置结果作为传递参数,动态调用仪器的通用软件接口dll动态链接库规定的4个标准引出函数;f、4个标准引出函数根据应用程序传递过来的参数,再次调用仪器的实际驱动程序或其他应用程序模块,并将执行结果返回应用程序;其中,所述步骤b中所有仪器的通用软件接口dll动态链接库规定的4个标准引出函数打开函数、关闭函数、自检函数和测量函数的函数原型定义为long UiDeviceOpen(char* resourceName)函数名称打开函数第1个参数输入参数指针,逻辑名或资源名或初始化字符串,直接从前面仪器管理数据表的ResourceName字段读取函数返回值如果>=0则函数执行成功,否则执行失败;long UiDeviceClose(void)函数名称关闭函数函数返回值如果>=0则函数执行成功,否则执行失败;long UiDeviceSelftTest(void)函数名称自检函数函数返回值如果>=0则函数执行成功,否则执行失败;long UiDeviceMeasure(char* InputParaList,int InputParaNum, char* ReturnParaList, int ReturnParaNum)函数名称测量函数第1个参数输入参数指针第2个参数输入参数个数第3个参数输出参数指针第4个参数输出参数个数函数返回值如果>=0则函数执行成功,否则执行失败;所述步骤e中动态调用仪器的通用软件接口dll动态链接库规定的4个标准引出函数的方法是首先声明4个入口函数;在应用程序里获取dll动态链接库及4个标准引出函数的地址;调用打开函数,进行仪器的初始化;调用自检函数,进行仪器的自检;调用测量函数,传入参数,得到结果,传入参数的类型、顺序、个数都由通用软件接口描述文件动态定义;最后调用关闭函数,进行关闭仪器操作。
2.根据权利要求1所述的一种通用虚拟仪器接口实现方法,其特征在于,所述通用软 件接口描述文件的编制规则通用软件接口描述文件为虚拟仪器通用软件接口的说明性文件,与虚拟仪器通用软件 接口动态连接库一起使用,作为应用程序调用虚拟仪器通用软件接口的依据;通用软件接口描述文件为纯文本文件,文件扩展名统一规定为” .gdv”,每一种仪器一 个接口描述文件;文件分成6段落,即[程序]、[运行]、[函数]、[输入参数]、[输出参数]和[结 束],整个文件以[程序]开头,以[结束]为结尾;每个段落包括若干行,每行采用“=”表达式的形式,表达式“=”左侧为属性,右侧为取 值,用来描述仪器驱动的不同属性和取值,每行以“;”作为结尾,注释均以“//”开头; [程序]段描述仪器的型号和仪器的功能; [运行]段落描述仪器动态链接库的文件名、版本号和类型;[函数]段落描述仪器驱动程序所包括的函数,若一种仪器驱动包括多个函数,则依次 按顺序全部列写在[函数]这个段落里;[输入参数]段落描述每个驱动函数输入参数的属性和取值,若一种函数包括多个输 入参数,则依次按顺序全部列写在[输入参数]这个段落里;[输出参数]段落描述每个驱动函数输出参数的属性和取值,若一种函数包括多个输 出参数,则依次按顺序全部列写在[输出参数]这个段落里; [结束]段落标识整个接口文件的结束。
全文摘要
本发明属于计算机自动测试领域,提供一种通用虚拟仪器接口实现方法,该方法在通常的仪器驱动程序与应用程序之间加入了一个通用软件接口层,将应用程序与实际仪器调用彻底隔离开来,通过定义统一标准的调用接口函数以及通用软件接口描述文件,从而实现了在不更换应用程序代码、不进行源程序重新编译的条件下测试系统中仪器的更换;一个测试软件包能够适应现有的、甚至未来的不同类型仪器硬件和总线构成的测试系统;测试代码可以不加修改的被移植到不同的仪器上。另外,使用本发明提供的所述通用虚拟仪器接口实现方法,也可以实现不同软件程序模块之间的数据通信功能。
文档编号G06F9/44GK101944026SQ20101028796
公开日2011年1月12日 申请日期2010年9月21日 优先权日2010年9月21日
发明者傅鹏程, 段俊斌, 邓启斌, 黄晓津, 龚安 申请人:中国人民解放军63961部队
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1