基于IVI规范的CPCI 422驱动程序设计

2010-06-22 03:41田书林
现代电子技术 2009年22期
关键词:配置文件驱动程序专用

杨 雪 田书林 李 力

摘 要:结合自研CPCI 422模块,参照已经发布的IVI类驱动规范,探讨422驱动函数的规划方案。由于IVI有关422通信类仪器尚未制定类驱动规范,在此尝试不借助NI公司提供的驱动向导开发422类驱动库,制定一种较为简单通用的422仪器类驱动规范,并针对自研模块开发专用驱动库,同时自己研制简易的能代替NI公司配置引擎的程序,实现通过编辑配置文件链接类驱动和专用驱动,并且自动加载专用驱动库的功能。该方法和规则对于其他虚拟仪器驱动程序的开发具有参考与推广价值。

关键词:CPCI 422;驱动设计;模块互换;IVI规范

中图分类号:TP311.11

0 引 言

可互换虚拟仪器(Interchangeable Virtual Instrument,IVI)驱动程序规范是由IVI基金会在VPP‐[1]基础上为仪器驱动制定的编程接口规范。它扩展了VPP仪器驱动程序的标准,并增加了仪器的可互换性、仿真和状态缓存等特点,从而实现不同型号仪器之间的互换,在测试系统硬件组成发生变化时,测试程序代码可以重用。RS 422总线通常用于串行数据通信,采用平衡的差分数据传输方式,最大传输速率能达到10 Mb/s,最大传输距离为300 m。目前有关422的接口模块种类很多,为了实现各种型号422模块的互换,使用IVI标准进行驱动设计是很必要的。

1 IVI驱动程序的结构

IVI驱动程序体系结构主要包括IVI类驱动库、IVI专用驱动库、IVI引擎、IVI配置实用程序、IVI配置信息文件。其中,IVI 类驱动器是仪器的功能和属性集,通过这些功能和属性集实现对一种仪器类进行控制。它是一组接口函数,并不直接控制仪器工作。目前,已经发布了示波器、数字万用表等8类仪器规范‐[2]。IVI专用驱动库封装了用于控制某一种仪器所需要的信息,能够直接与仪器硬件通信。IVI 引擎主要完成状态缓存、仪器属性跟踪、类驱动器到专用驱动器的映像功能,是实现 IVI 仪器驱动程序完成状态缓存和其他增强性能的关键支持库。IVI 配置实用程序用于配置仪器无关测试系统,创建和配置 IVI逻辑名称,在测试程序中通过传送逻辑名称将操作映像到具体仪器驱动程序。具体IVI体系层次结构如图1所示‐[3]。

[HT5”K][JZ]图1 IVI体系结构[HT5]

目前,国内外只有NI公司,比较系统地提出了实现仪器互换的体系结构。该公司已经实现了8类仪器的IVI驱动开发,而且也提供一个名为“MAX”的IVI配置程序,用于配置仪器无关测试系统。同时也提供了一个专用驱动库开发向导,用以开发专用驱动‐[4]。但该向导不能对已有驱动程序进行升级和IVI标准封装,NI公司也没有提供类驱动库的开发向导,加上类驱动库数量的局限性,导致部分模块无法用NI公司提供的开发向导进行IVI驱动设计,比如文中所涉及的〤PCI 422基于IVI标准的驱动开发‐[5]。

2 CPCI 422驱动开发

在此,以自研CPCI 422模块为例,介绍422驱动程序开发过程。CPCI 422模块具有CPCI总线接口,能通过422总线发送数据,并且能接收被测设备通过422总线传来的数据,并把数据传送给上位机进行处理。该模块具有8个通道,每个通道均能实现接收或者发送功能,通道能够单独工作也可一起工作,并且能对数据传输参数进行设置。

针对IVI体系结构,首先设计422类驱动函数库。然后在类驱动函数库基础上开发专用驱动函数库,驱动函数最后以.dll形式存在,采用 LabWindows/CVI,Visual Basic和 Visual C++等开发环境均可以开发。同时设计具备IVI引擎功能函数或者程序。对于IVI 配置信息文件可以通过专门的IVI配置实用软件(如NI公司提供的MAX)或者其他文本编辑器进行编辑。

基于IVI标准的驱动程序配置引擎是整个IVI体系中的核心支柱。其主要功能就是实现类驱动库到专用驱动库的映射,使应用程序在调用类驱动库时能自动加载相应配置的专用驱动库。

该设计中,IVI配置引擎设计的主要思路是通过读取配置信息文件,由配置文件中所设置的模块逻辑名找到对应的专用驱动库信息字段。此字段主要包括专用驱动库路径文件名、专用驱动库函数前缀等,然后通过这些一一对应的映射关系,自动加载专用驱动库。其工作流程如图2所示。

该设计运用函数ivi422Class_SpecificDriver实现自动加载功能。下面为具体的函数设计:

该函数核心是以代表专用驱动库文件名称为形式参数,调用LoadLibrary( )函数加载专用驱动库。应用程序只需通过类驱动库及模块的配置信息作为参数,调用ivi422Class_SpecificDrive()函数,即可实现专用驱动库的自动加载。根据上面介绍可知,读取配置文件以及根据配置文件自动加载专用驱动库,即可实现配置引擎的功能。

类驱动库是IVI体系的外观框架,用来控制一个特定类型仪器的一系列功能和属性。它是一组编程接口,而不对仪器进行直接操作。该设计中,为了实现422模块的正常通信,作为连接虚拟仪器硬件和应用测试程序的纽带,将422类驱动函数规划如表1所示。序号函数功能描述

1Init打开并初始化仪器

2Close关闭仪器

3SerialRead开始接收数据

4SetClock设置每个通道波特率模式

5SetUART通道工作参数设置

6SetDivisor通道具体波特率设置

7ChannelControl设置每个通道的工作状态

8SerialWriteData开始发送数据

9SpecificDriver动态加载专用驱动库[HJ0][HJ][HT5SS]

根据IVI规范,类驱动函数由函数名前缀加具体函数名构成。在参数设置上均采用VISA数据类型。在该设计中,类驱动函数均采用ivi422Class作为函数前缀名。现举例如下:

该函数的功能是提供仪器初始化函数接口,其中返回值定义为ViStatus型,具体表示形式,参照IVI标准,如IVI_SUCCESS。参数为ViSession型指针,用来返回仪器资源句柄。

根据前面介绍可知,类驱动函数只提供接口功能,不涉及具体仪器操作,现仍以初始化函数为例,介绍类驱动函数如何实现接口功能。其具体实现如下:

该函数的核心部分就是调用GetProcAddress(hDLL,FuncName)函数,获取专用驱动库函数对应函数地址。其中,hDLL为在配置引擎功能中调用ivi422Class_SpecificDriver()函数获取的专用驱动库句柄,FuncName为对应函数名称。

对于专用驱动动态链接库的开发,该设计未借助Labwindows/CVI中的专用驱动开发向导,而是直接在VC中进行编制。专用驱动库函数的主体函数名和参数类型与类驱动是完全一致的,否则类驱动和专用驱动之间的参数传递会出错‐[8]。为了与类驱动前缀名相区别,在该设计中,专用驱动函数前缀名一律为ivi422。举例如下:

函数则具体针对仪器操作,完成模块初始化功能。

对于上层应用程序,专用驱动函数隐藏了具体硬件工作细节,只以函数的形式提供了完成一项具体功能的接口。上层应用程序只需要通过类驱动库间接调用专用驱动库提供的函数,即可完成对硬件的操作控制。规划表中已经列出了422操控的基本函数,如果需要再增加函数,只需要在类驱动的专用驱动中同时增加,便能实现功能扩展。

[BT3]2.3 CPCI 422模块IVI驱动程序中配置文件编辑

对于IVI 配置信息文件,可以通过专门的IVI配置实用软件(如NI公司提供的MAX)进行编辑。在该设计中,利用图形化编程软件自己设计以对话框为基础的配置实用程序,通过此程序对配置文件进行编辑。图3为此程序的主界面。

通过此程序,修改配置文件中的逻辑名字段、描述字段、驱动库加载路径字段,以及驱动函数前缀字段、仿真调试字段。然后通过配置引擎对于配置文件的读操作,建立类驱动库和专用驱动库的正确映射。当改变模块时,只需要改变模块的逻辑名,以及模块专用驱动库的加载路径和前缀,而不需要修改类驱动库,也不会影响上层应用程序,从而实现了仪器的互换特性。

2.4 应用程序调用驱动工作流程

首先,应用程序通过一个逻辑名调用 IVI 类驱动库,配置引擎,将该逻辑名与配置文件中的所有逻辑名进行匹配,得到实际的 IVI专用驱动库指针,并实现该驱动器的动态加载;然后将 IVI 类驱动器中的函数和属性与IVI 类专用驱动器的对应函数和属性进行链接,使应用程序可以间接地访问这些函数和属性。在编制应用程序时,应同时包含类驱动库的动态链接库和头文件,编制过程中,对开发人员只需调用类驱动函数。┩4为应用IVI体系基于422模块的应用程序调用驱动工作流程。

3 结 语

在上述基于IVI规范的CPCI_422驱动程序设计的基础上,讨论了基于IVI标准的驱动体系结构,并且给出结合自研CPCI 422模块的IVI驱动库开发方法。重点讨论了类驱动库以及配置引擎的设计方案。目前,基于该驱动库的应用程序已经研制成功,能够通过类驱动库提供的函数接口对各种CPCI 422模块进行操作控制。随着仪器设备标准化的推广,以及虚拟仪器测试技

猜你喜欢
配置文件驱动程序专用
提示用户配置文件错误 这样解决
体能测试专用鞋
体能测试专用鞋
体能测试专用鞋
互不干涉混用Chromium Edge
忘记ESXi主机root密码怎么办
计算机硬件设备驱动程序分析
爱它就给它专用的设备
打印机设置
基于MPC8280的CPU单元与内部总线驱动程序设计