《基于vxi总线io模块驱动器的开发》由会员分享,可在线阅读,更多相关《基于vxi总线io模块驱动器的开发(4页珍藏版)》请在金锄头文库上搜索。
1、基于V X I 总线I o 模块驱动器的开发 冉瑞黄建国李力 电子科技大学自动化学院,成都,6 1 0 0 5 4 摘要结合自主开发的关于寄存器基的V X I I O 序列模班的研制,按照V P P 规范中对权器驱动器的要 求,说明了在L a b W l n d o w s c V I 平台下如何开发仪器驱动器的方法。 美键词V P P ,仪器驱动程序,L a b w i n d o w s c V I ,虚拟仪器软件结构 引言 仪器驱动程序是仪器应用的核心,在编写仪器应用程序或利用仪器模块组建测试系统时就需要利用仪器 驱动程序。所以当自行研制仪器模块时就必须编写驱动程序。V X I 总线即插
2、即用( V X I P l u g b , P l a y ,简称 V P P ) 联盟提出的V X I 即插即用规范是对V X I 总线系统的朴充和发展,目的在于定义和推行标准化准则和操 作规程,解决V X I 总线规范中尚未包含的系统级问题。V X I 即插即用规范明确了仪器驱动程序的概念,下面 就按照V P P 规范的要求,结合自主开发的V X I I O 模块,介绍在L a b W i n d o w s C V I 平台下开发仪器驱动器的 方法。 2 仪器驱动程序简介 2 1仪器驱动程序结构 V P P 规范对仪器驱动程序开j 者编写驱动程序提出了一系列要求。遵循V P P 规范,可
3、使多个厂家仪器 驱动程序能够在个系统中共同使用,增强了系统级的开放性、兼容性和互换性。V P P 规范提出了两个基本 结构模型:一个是外部接口模型;另一个是内部设计模型。V P P 仪器驱动程序都是围绕这两个模型编写的。 2 2 外部接口模型 仪器驱动器的外部接口模型共可分为5 部分:( 1 ) 函数体。它是仪器驱动程序的主体,为仪器驱动程序的 实际源代码。( 2 ) 交互式开发者接口。这一接口通常是一个图形化的功能模板。( 3 ) 编程式开发者接口。它 是应用程序调用驱动程序的软件接口。( 4 ) V I S AI 0 接口。仪器驱动程序通过本接口调用V I S A 这一标准 的I O 接口
4、程序库,从而解决了仪器驱动程序与仪器的通信问题。( 5 ) 子程序接口。它是仪器驱动程序调用 其他模块( 如数据库、F F T 等软件) 的软件接口。 2 3 内部接口模型 仪器驱动器的内部模型定义了驱动程序模块化的内部组织结构,V P P 仪器驱动器的源代码根据此设计模 型编写。 V P P 仪器驱动程序内部设计模型包含两级函数模块。这两级函数模块分别提供对仪器功能的高级访问 和低级访问,第级是应用函数,表示如何使用仪器驱动程序中所有函数的功能子集来完成面向应用的仪器 操作,这些函数是最高层次上执行完整的测试操作的高级函数的联合体。第二级是一组部件函数,包括初始 化、配置、作用状态、数据、实
5、用和关闭功能函数。这些函数用来在较底层次上控制仪器的某一特定功能。模 块化的应用函数和部件函数为应用程序的开发提供了多种灵活的仪器控制方式。 3 C V I 平台下的仪器驱动程序的编写 自主开发的基于V X I 总线的数字1 1 0 模块的仪器驱动程序,严格按照V P P 规范中关于仪器驱动程序的 外部接u 模型和内部模型来进行设计。首先根据仪器模块的应用目标和功能指标,确定函数树结构和设计函 数面板,然后根据具体的测试需求编写函数体源代码和帮助文件,最后还应生成动态链接库文件,以便用户 使用。 3 1 开发平台的选择 本数字I 0 模块的软面板开发选用的是L a b W i a d o w
6、s C V I 。之所以选择L a b W i n d o w s C V l ,是因为它具 1 0 8中国西部嵌入式系统与单片机技术论坛2 0 0 5 学术年会论文集 有如下优点:集成的开发平台,设计用户图形界面轻松自如,交互式编辑方法町自动生成源代码,程序调试手段 方便、灵活而且具有丰富的库函数。 因此,L a b W i n d o w s C V I 不失为一种功能强大、使用方便、编程效率高同时又可使用户对程序的工作细节 进行控制的一种W i n d o w s 环境下的编程环境。本T o 模块采用I 。a b W i n d o w s C V l 作为软件开发环境。下面 详细介绍在
7、L a b W i n d o w s C V l 平台下本模块仪器驱动器的树结构、驱动函数的设计以及动态链接库的生成。 3 2基于V X I 总线的数字I O 模块介绍 任何仪器驱动程序的开发都是基于仪器的应用目标和功能指标。为了更有效地创建仪器驱动程序,我们 需要对自主开发的V X II O 模块有一定的了解。 本模块是专门为自动测试系统设计的:o 接口模块,在自动测试中起着重要的作用。该模块具有数据发 生和数据采集的功能,在通用接口的基础上添加了通信接口测试和逻辑数据测试等;用于控制、智能检测和数 字系统故障诊断领域非周期性地产生任意编码的数字序列作为激励信号源,同时还可“对响应序列进行
8、分析。 3 3 确定数字I O 模块驱动器的树结构 在了解了V X I 总线的数字I O 模块应用目标的基础卜,确定仪器驱动程序的组成结构,即设计功能面板 的树形结构,从上到下由仪器节点( 根节点) 、类节点( 枝节点) 与函数节点( 叶节点) 层次化构成。功能面板树形 结构的确定,也就确定了驱动程序所需包括的所有功能函数,也就是仪器驱动程序内部设计模型的表达。根据 需要,本模块驱动器的功能面板树包含所有部件函数,即初始化、配置、作用状态、数据、实用和关闭功能函数, 以及一些高层应用函数。阻1 描述了函数树的部分内容。 C 口3 0 9 h m 池忉拮化 o o n m l 穗类 W e 血I
9、 _ 血d e 工怍梗式琵置 s o n c 啦咄h 设戤口工愀湖蠕* 出攫式下 s o n c 仰舳m设置神口工作在软件时控输入镬式下 H 蝴口恤设置端口工作莅礁件时控辆出梗式下 眦e l l n i V l o d t 设置稿口工作在硬件时控输入橇式下 m 0 L r I 十嘴檀词 Pnbm序列设置 D e f h P 咂锄设置序列拘起拮地址、缚止地址 f h P 州印m 量谆厚豌聃起嫱地址、缚止地址 m 蛐P a 伽m 删除序列敬据 D e f 晡舢e H c W N设置序兜哺珥1 0 C r o c k 时钟设置 c 】k s d选择工怍时钟 C 】k F n q 琳v 设置时 嘏辜
10、F z 1 | c t m n 6 t a t e自毹J 状赫 E h d 山D n m 开拍数据输出 E 曲m d n开拍数据输入 陆女k D n 由 停止数据输出 胁女k m d n 停止数豁凡 E r l 出k E x n 眶允许外- 拄 D b 出kE ) c t h l 不兜许,l 齄盐 m 岫口础 报青数据的输出和辅 是否掊柬 图1 数字I O 模块的仪器驱动程序基本函数树结构【部分) 殛函数说明 3 4 仪器函数面板的设计 在完成仪器驱动器树结构设计的基础上,实现函数面板的设计将为后面函数体源程序的编写搭起一个基 本框架。 3 4 1 仪器驱动器函数面板树的设计 函数面板的设计分
11、两步进行,先是建立函数面板树,然后在函数编辑窗口编辑各个函数的参数控件,确定 各参数的数据类型和默认值等。 函数面板树建立与功能面板树结构相似,就不在此重复列举。根节点定义了仪器节点,笔者开发的V X I I O 模块命名为C A T l 3 0 9 ,此名称即用来命名根结点。此步骤可以通过C r e a t e 一 n s t r u m e n t 建立一个仪器, 兰三苎兰:奎竺竺:至2 全 : 在本设计中它表示此仪器驱动器面板是为I 0 模块设计的;当由函数面板生成驱动函数框架时,此信息将包含 在函数名中。根结点的下一层是类结点,类结点还可以包含下级类结点,例如:在本模块的函数树设计中,
12、配置 类结点C a n f i g 岍下面还包含了下级类结点W o r k M o d e 、P a t t e r n 及C l k 。类结点的下一层是函数结点,如数据 处理函数类的S o f t C t r l D a t a l n 、& ) f t C t r l D a t a O u t 、H a r d C t r l D a t a l n 和H a r d C t r l D a t a O u t 等。在为函数结点取名时 应注意函数名不能超过3 1 个字符。最后将文件保存为C A T l a 0 9 f p 。 3 4 2 仪器驱动器函数面板的设计 在完成仪器驱动器函数面板
13、树设计的基础上,为每个函数设计一个函数面板。这是实现仪器驱动程序交 互式操作接口的重要环节。 积击C A T l 3 0 9 f p 文件中的厨数节点,蒋出现一个空的函数窗口,需要在此窗口中添加函数的所有参数控 件和返回值控件。这些控件包含很多类型,如输入类型、游标类型和布尔类型等。每个控件又包含了控件标号 和控件位置号等参量信息。设计函数面板时应根据函数功能确定函数的参数及返回值,选择函数的参数控件。 醋数面板树的每一级结点都应该有帮助文档;在设计函数面板的同时,也应该同时给出帮助文档,这些文档将 方便仪器使用者对驱动程序的理解和编程。 在L a h W i n d o w s C V I
14、的编程环境中,可以利用函数面板很方便地生成驱动函数的头文件( h ) 和源程序文 件( c ) 的框架。这样就免去了驱动程序开发人员的许多麻烦,比如编写头文件和在源程序文件中输A 函数名 称及参数,也避免了在此过程中许多出错的可能。因为我们要设计的是V X I 总线的驱动器所以在函数面板 编辑窗口中用G e n e r a t eN e wS o u r c eF o rF u n c t i o nT r e e 生成源代码程序框架,利用G e n e r a t eF u n c t i o nP r o t o t y p e s 来生成头文件。注意,在这个过程中要在o p t i o
15、n s 菜单中选上V X Ip l u g g :p l a yS t y l e 。图2 就是本I O 模 块的初始化函数面板。 圈2 初始化函数面板 3 5 操作函数设计 完成函数面板的设计后,操作函数的设计工作就是在源代码文件中编辑豳数体。c 文件的编辑实现是仪 器驱动程序开发的核心和关键。基于V X I 总线的I 0 模块的操作函数的编写须调用V I S A 这一标准的I O 接口程序库。 初始化函数的代码实现如下t V i S t a t u sC A T l 3 0 9 一i n k ( V i R s r el n s t r D e s c ,V i B o o l e a n
16、i dq u e r y ,V i B o o l e a nd o r e s e t ,V i P S e s s i o nv i ) 打开缺省的资源管理器 :士苎耋耋圭全当量兰主兰兰兰苎主竺兰:兰兰:兰耋苎 e r r S t a t u s = v i O p e n D e f a u h R M ( s e s n ) : i f ( e r r S t a t u s O ) r e t u r ne r r S t a t u s ; 为指定器件打开一个会话 e r r S t a t n s = v i O p e n ( s e s n ,I n s t r D e s e ,V L N U I ,I 一,V L N U l I - ,v i ) f r e t u r ne r r S t a t u s 初始化函数用于建立驱动程序与仪器的通信联系。 3 6生成动态链接库