您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > IVI技术规范及其工作原理
1.1IVI技术规范及其工作原理1.1.1IVI技术的特点为了进一步提高仪器的可互换性和测试代码的可重用性,降低系统升级的难度和成本,由NI公司、GEC马可尼公司、朗讯技术公司、GDE系统公司等十几家仪器生产厂商成立了IVI基金会并发布了IVI技术规范。IVI技术规范是IVI基金会在VPP规范的基础上定义仪器的标准接口、通用结构和实现方法,用于开发一种可互换、高性能、更易于开发维护的仪器的编程模型。IVI技术主要具有以下特点。1)通过仪器的可互换性,节省测试系统的开发和维护费用IVI技术提升了仪器驱动器的标准化程度,使仪器驱动器从基本的互操作性提升到了仪器类的互操作性。通过为各仪器类定义明确的API,测试系统开发者在编写软件时可以做到最大程度的与硬件无关,当替换过时的仪器或采用更高性能的新仪器进行系统升级时,测试程序源代码可以不用做任何更改或重新编译,这大大提高了代码的可重用性,同时也缩短了测试系统开发周期以及系统维护费用。2)通过状态缓存,改善测试性能IVI引入了属性管理机制,其模型中的IVI引擎可实现状态存储功能。VPP驱动程序总是假设仪器状态是未知的,因此,每个测量函数在进行测量操作之前都要对仪器进行设置,而不管仪器在此之前是否被配置过。而IVI驱动器通过状态缓存能自动存储仪器的当前状态。一个IVI仪器驱动程序函数只有在仪器当前设置和函数所要求的值不一致时,才执行I/O操作,而不是每次都对仪器的所有参数进行重新配置,这样IVI引擎可以避免发送冗余的仪器配置命令,从而优化程序运行时的性能,极大的缩短测试时间。3)通过仿真,使测试开发更容易、更经济利用IVI仪器驱动器的仿真功能,用户可以在仪器还不能用的条件下,使用驱动程序建立应用程序,这种情况下,驱动程序不执行仪器I/O而仅利用软拷贝来进行处理,它检查输入参数并且产生仿真的输出结果。有了这些仿真数据,开发者在没有仪器硬件的情况下也能为仪器开发应用程序代码。1.1.2IVI驱动器的类型及互换性的实现原理如图4所示,IVI驱动器分为IVI类驱动器和IVI专用驱动器两大类型。IVI类驱动器提供符合已定义IVI仪器类规范的仪器驱动器API,通过IVI类兼容专用驱动器间接实现与仪器硬件的通信连接。实际上,可以将IVI类驱动器理解为一种抽象的、具有过渡性质的仪器驱动器,类似于面向对象编程技术中的虚拟基类,而IVI类兼容专用驱动器则是它的派生类。IVI专用驱动器封装了用于控制某一类或某一种仪器所需的信息和函数,能够直接与底层硬件通信,它又包括IVI类兼容专用驱动器和IVI定制专用驱动器。IVI类兼容专用驱动器与某一类已定义的IVI仪器类兼容,使用已定义仪器类的标准API,但同时又增加了一些其他特性,以满足用户对仪器互换性的要求;IVI定制专用驱动器使用用户化的API,不与任何已定义的仪器类标准兼容,不能实现硬件的互换性,主要用于一些特殊场合。图1IVI驱动器分类IVI规范把仪器驱动器分成类驱动器和专用驱动器的目的是为了实现仪器的互换性。为了确保在进行仪器替换时不修改测试代码,不再做重新编译或链接,做到完全的互换性,IVI规范规定用户需要直接用仪器类API编程而不是用特定的IVI类兼容专用驱动器编程,与特定仪器相关的驱动器和硬件资源配置不能在测试程序中完成,于是IVI技术规范提出了一种被称为“配置仓”的软件结构。IVI驱动器IVI专用驱动器IVI类驱动器类兼容专用驱动器定制专用驱动器图2IVI仪器驱动器互换性原理图IVI配置仓是用来实现仪器互换性的外部软件,具有动态加载特定仪器驱动器的能力,通过建立类驱动器和特定仪器驱动器的映射关系来实现仪器的互换和测试程序的代码重用。图5解释了仪器互换性的实现方法。IVI配置仓中包括了一系列逻辑名以及与各逻辑名一一对应的驱动器通话配置器,在应用程序通过某个逻辑名来访问IVI类驱动器时,IVI类驱动器通过逻辑名的匹配得到实际的IVI类兼容专用驱动器通话配置器,并实现该驱动器的动态加载,然后通话配置器建立与专用驱动器和仪器的通话链路,同时也决定一些可配置属性的配置,如仿真、状态缓存状态检查等,当用户更换仪器时,只需将IVI配置仓中对应的逻辑名重新定位到另一个通话配置器,从而实现仪器的互换。1.1.3IVI驱动器的工作原理用户应用程序IVI类驱动器IVI类兼容专用驱动器GUIIVI配置仓IVI驱动器的工作机制如图6所示。IVI模型中把每一个可读写的仪器设置定义为一个属性。IVI引擎与驱动程序一起参与对图3IVI仪器驱动器工作机制仪器属性的管理,主要包括记忆和跟踪属性值、属性范围检查和强制设定、控制属性值的读写等。组成IVI仪器驱动程序的高层函数主要包括以下四个部分:(1)用于读写某个仪器属性的IVI标准属性函数;(2)用于规定每一个仪器属性有效范围的范围表;(3)属性回调函数(读回调函数、写回调函数、范围检查回调函数等);(4)全局通道回调函数(如状态检查回调函数等)。当驱动程序在高层函数中设置属性时,IVI引擎被激活并访问属性范围表进行范围检查和设置仪器属性范围检查和强制设定与缓存值比较存储当前属性值检查仪器状态VISAI/O库函数(访问仪器)用户应用程序驱动器高层函数属性回调函数(读、写)属性范围表进程回调函数(状态检查等)仪器驱动器IVI引擎强制设定值,在设置值与缓存值不同时激活属性回调函数,执行仪器I/O操作,否则直接返回成功。如果执行了I/O操作,则高层函数还要在驱动程序中调用状态检查回调函数,查看是否有错误发生。由于IVI引擎运行在计算机内部,而驱动程序只有在对仪器进行硬件操作时才花费较多时间,因此,通过在高层函数和低层I/O操作之间引入属性管理机制,可以在不影响仪器工作的条件下增强对仪器操作的灵活性和安全性,并大大提高驱动程序的效率。以通道配置函数dsoes1452_ConfigureChannel配置垂直灵敏度为5V/div为例,IVI驱动器和IVI引擎将执行以下几步:函数dsoes1452_ConfigureChannel中调用标准IVI属性设置函数Ivi_SetAttributeViReal64(),将属性DSOES1452_ATTR_VERTICAL_RANGE的值设置为5.0。如果IVI内置属性IVI_ATTR_RANGE_CHECK(范围检查)的值为真VI_TRUE,IVI引擎调用属性范围检查回调函数,判断5.0是否超出了垂直灵敏度属性范围表。如果超出了有效范围,属性设置函数返回一个错误代码,或者调用强制回调函数强制设定为有效范围内的数值。如果IVI内置属性IVI_ATTR_CACHE(状态缓存)为真VI_TRUE,IVI引擎比较5.0与当前缓存中的值是否相等,如果相等,属性设置函数直接返回执行成功代码。如果IVI内置属性IVI_ATTR_CACHE(仿真)为真VI_TRUE,属性设置函数直接返回执行成功代码。如果5.0与缓存值不等且不是执行的仿真,则调用垂直灵敏度属性写回调函数dsoes1452AttrVerticalRange_WriteCallback(),通过VISAI/O函数访问底层硬件,写入5.0对应的命令,并更新当前缓存值为5.0。如果属性IVI_ATTR_QUERY_INSTR_STATUS(仪器状态检查)为真VI_TRUE,同时IVI引擎调用了写回调函数,则函数dsoes1452_ConfigureChannel调用状态检查回调函数,该回调函数读取仪器的状态寄存器信息,以检查是否有错误发生。1.1.4IVI仪器驱动器的开发流程考虑到IVI规范是在VPP规范基础上提出来的,IVI仪器驱动器与VPP驱动器的区别就在于IVI驱动器多了IVI引擎,IVI引擎通过属性管理来控制硬件,而VPP驱动器是直接调用VISA函数访问仪器,所以我们的开发是直接用LabWindows/CVI的开发向导开发IVI驱动器,同时就可以实现VPP仪器驱动器的开发。IVI仪器驱动器的开发流程大致如下:启动IVI驱动程序开发向导,按照向导的提示设置仪器驱动器的相关信息,生成驱动程序框架代码,生成的框架代码中,包含了符合IVI规范的示波器类驱动器的大部分标准函数。分析生成的各个属性,对相应属性进行编辑、删除或新建;对独立属性实现属性回调函数,这些属性可用来设置和访问硬件,写回调函数用来设置硬件属性值,在状态存储机制无效时,写回调函数总是被调用,此时IVI驱动的工作过程与VPP驱动类似,读回调函数用来获取属性值。明确属性的无效值,IVI引擎采用属性无效列表作为保持状态存储完整性的一种技术,它用来解决高级属性之间的相关性问题,例如某一属性的无效列表中可以包含受其影响的属性,当这一属性的值改变而导致被其影响的属性无效时,IVI引擎就可以修改它们的属性值。分析驱动程序的各组成文件,编辑和修改函数树与函数面板、删除不用的扩展代码,根据本模块的实际需要修改生成的函数代码,添加本模块所需要的特殊函数代码。设计软面板程序,对IVI驱动程序的各函数进行测试并调试,在确保正确性的前提下生成安装文件。1.1.5仪器驱动器属性的设置运行LabWindows/CVI的IVI仪器驱动器开发向导,按照向导的提示,输入所需要的本模块的相应信息,最后点击Generate按钮即可生成IVI仪器驱动器所需的基本文件,包括函数面板文件PREFIX.fp,源代码文件PREFIX.c,头文件PREFIX.c,仪器属性文件PREFIX.sub。这里PREFIX代表在向导中输入的仪器驱动器前缀名称,生成的所有驱动器函数和属性名称都以此前缀开头,以表明此驱动器是某一型号特定仪器的特定驱动器。打开属性编辑器,可以看到自动生成的IVI驱动器的所有属性列表,其中有一些属性是IVI固有属性,即不管是什么类型的仪器都必须要有的属性,在CVI中这些属性不能被用户随意更改,开发者不能对这些属性做任何编辑。其余大部分属性需要我们根据仪器的实际需要,进行重新编辑修改,删除不需要的属性,增加本模块所特有的设置属性。图7所示为本信号采集模块的部分属性列表。整个系统分为信号采集、通道、水平、触发、参数测量以及时钟同步六个子系统,在开发过程中,无论哪个阶段我们都是按照这六个子系统分别进行开发,这是IVI驱动器在横向上的模块化体现,而在纵向上,IVI驱动器的体系结构从底层的VISA接口库到上层的测试软件也是模块化的结构,这种多重模块化的结构正是IVI规范的一大特点,既简化了整个系统的复杂性也大大降低开发难度。属性列表中每一个属性代表一种可以配置的仪器设置或参数,属性的编辑对象主要包括数据类型、属性范围表、默认值、属性描述、回调函数选择、属性标志以及属性无效列表等,其中属性范围表和属性无效列表的设置是重点和难点,属性范围表决定了属性的取值范围和数值类型,是范围检查和强制设定回调函数的依据,也是读、写回调函数进行数值和命令字符串转化的依据。而属性无效列表的编辑则要求必须对整个系统的工作流程和不同设置参数之间的相互关系有清楚地认识。对于上层用户来说,要设置仪器的某个参数,只需调用驱动器中相应的高级函数,或者直接调用IVI属性设置库函数来设置相应属性的值即可,而根本不用关心驱动器是怎么把这个属性值写入仪器的,这部分工作由我们编写属性读、写等回调函数来实现。图4信号采集模块驱动程序的属性列表这部分代码主要是设置属性回调函数的代码,自动生成的代码中也包含相应的回调函数代码框架,回调函数中的实现代码再具体编写完成。
本文标题:IVI技术规范及其工作原理
链接地址:https://www.777doc.com/doc-8339863 .html