IVI 驱动程序的开发过程
一、 驱动程序的发展背景:
1、 测试系统的工作方式:
在工业生产中,往往需要使用到各种各样的测试仪器。现代的大规模生产线更是需要用到成百上千的测试仪器,要实现自动化测试就必须使用计算机控制这些仪器。
在用计算机控制仪器的初期,仪器与仪器之间、仪器与计算机之间的接口大多用的是GPIB接口总线;编程采用的是BASIC语言的I/O操作语句。每一台仪器都有自己的一套ASCII码的命令集。测试程序的编写者在编写测试程序前,需要熟悉硬件设备及其一大套命令,这对于一般的软件人员来说是较为困难的。编程也就常常成为开发自动检测系统中最耗费时间的一项工作。当检测系统使用到多种不同型号的仪器时,情况会更糟。同时,编程人员还会发现,当他们在为一台仪器编写新的应用程序时,需要做大量的重复性工作,耗费了大量的时间和精力。
2、 解决办法:
显而易见,如果编程人员在编写程序时,可以只调用一些例行程序的高层函数,而不需要直接面对低层的函数命令,则开发费用和开发时间都会大大下降。这些可被重复调用的例行函数就是仪器驱动程序。
二、 设备驱动程序的发展历史:
1、 GPIB接口总线标准。计算机与仪器之间的接口总线以GPIB(通用并行接口总线)最为常见,其它还有RS232、485、VXI等。GPIB总线的雏形是惠普公司(Hewlett Packard)在60年代制定的公司内部总线标准HP-IB。在此基础上,美国国家工程师协会于1975年制定了意在统一接口总线结构的IEEE488接口总线标准。1978年,又对IEEE标准在编码、格式、传输协议方面作了修订,这就是IEEE488.2标准。我们现在开发的GPIB设备驱动程序都必须遵循以上标准。此类标准中的最新版本是于1990年制定的SCPI(Standard Commands for Programmable Instruments)标准。
2、 VXI plug&play标准。VXI是一种仪器工业中常见的总线结构,通常我们把采用这种接口总线进行信息传送的集成卡式仪器也称为VXI。由于这种卡式仪器没有用户界面,通常被用来与计算机配合使用。VXI plug&play 标准的产生是为给VXI板卡制造商们提供一个统一的接口标准。后来VXI plug&play 标准被引用到整个仪器及计算机板卡制造业。现在大多数仪器制造商的产品都支持VXI plug&play 标准。
VXI plug&play 标准也为驱动程序的编写提供了固定格式。如驱动程序向仪器发送命令时必须遵守以下步骤:1〉初始化仪器。2〉设置变量参数。3〉设置测量命令。4〉进一步数据分析。5〉关闭进程。
使用诸如LabWindows/CVI一类的编程语言可以方便地编写出满足VXI plug&play结构框架的驱动程序。 VXI plug&play标准的出现极大的推动了现有仪器的发展。
3、 VISA标准。 VXI plug&play 标准制定了驱动程序的结构框架,但这还不够完全。现在,许多驱动程序的数据类型都采用的是VISA(Virtual Instrument Software Architecture)标准。VISA标准还统一了驱动程序中一部分用户的接口函数,这就为设备的互换奠定了基础。
4、 IVI标准。VXI标准并不是最新的设备驱动程序标准。IVI(Interchangeable Virtual Instrument)驱动程序标准在此基础上又向前迈进了一步,IVI标准产生的时间是1998年7月。
三、 IVI驱动程序的特点和优点:
1、 可互换性: IVI驱动程序完全符合VXI plug&play和VISA标准,是对以上两种标准的发展和完善。“IVI协会”为五大类仪器(数字万用表、示波器、信号发生器、开关、
电源)定义了标准属性(Classic attribute)和标准用户接口函数(Classic func
tion)。因此,使用IVI驱动程序的仪器设备在标纯特性范围内可以实现互换。对于每种型号仪器的独特性能,可以通过非标准属性和非标准用户接口实现。
2、 智能化与状态缓存功能:IVI驱动程序引入了状态缓存(State Cache)功能。现代设备控制中,影响系统速度提升的主要瓶颈是仪器与计算机间的信息传输速率。VXI p&p标准的驱动程序缺少状态缓存功能,因此,每执行一条测量函数都必须对仪器进行一次设置,即便仪器已经设置正常也得如此。而IVI的驱动程序可以自动将仪器状态放入缓冲区,并根据此次状态截断向仪器发送的冗余设置命令,以优化命令结构,提高系统效率。
3、模拟功能:指在缺少真实仪器的情况下,IVI驱动程序可以产生一个模拟的输出值,以保证高层程序正常工作。使用模拟功能可以帮助我们在尚无仪器的情况下开发驱动程序;编写、检查测试程序;以及检测新的仪器是否与测试程序匹配。
4、 安全的多线程工作方式:这使得测试工程师可以充分利用多线程程序的优点。
5、 数据范围检测和状态检测功能:这些工具减轻了测试程序编写人员的工作量并提高了程序的可靠性。
四、 IVI驱动程序的结构和工作原理:
1、 IVI驱动程序是建立在由“国际IVI协会”制定的仪器属性模型的基础上的,它对五大类仪器(数字万用表类、示波器类、信号发生器类、开关类、电源类)分别定义了其属性模型,使其具有可互换性,状态缓存等功能。
仪器设备上的每一个参数设置都对应一条属性。如信号发生器,我么可以把它的输出波形,频率电压等都定义为其属性。IVI驱动程序的“SetAttribute”和“GetAttribute”两个低层函数是对用户开放的。高级用户可以直接在他们的测试程序中设置仪器的某个独立属性。在大多数情况下,仪器的各个属性之间是有联系的,IVI驱动程序提供了高层函数来一次性设置一组相关联的几个属性。这些高层函数减轻了用户的任务。
2、 IVI驱动程序的工作过程:
IVI结构的核心是IVI引擎对仪器属性的读写。
IVI驱动程序利用CallBack函数(回调函数)对仪器设置进行读写操作,利用RangTable(取值范围表)核查仪器属性的取值是否合法。IVI引擎会自动选择时间访问RangeTable和CallBack函数。
例如:我们要使用FG300_ConfigureTriangleSymmetry函数来设置仪器产生的三角波的对称度,并假设其对称度为30(30%)。
当用户调用FG300_ConfigureTriangleSymmetry函数后,驱动程序和IVI引擎需要作以下工作:
1〉驱动程序调用Ivi_SetAttributeViReal64()函数,对属性FG300_ATTR_FUNC_TRIANGLE_SYMMETRY的值进行设置。同时,SetAttribute函数将会激发IVI引擎。
2〉 如果继承属性(Ingerent attribute)FG300_ATTR_RANGE_CHECK的值为VI_TRUE(值为真,允许值范围检查),IVI引擎则自动调用属性FG300_ATTR_FUNC_TRIANGLE_SYMMETRY的RangeCheckCallBack函数。检查值30是否在属性的RangTable的允许范围内。如果取值超出范围,SetAttribute函数会结束任务,并将出错代码作为返回值返回。有时,IVI引擎还利用RangeTable把输入值强行转换至某一范围内。
3〉如果继承属性FG300_ATTR_CACHE的值为VI_TRUE(允许状态缓存),IVI引擎会检查属性FG300_ATTR_FUNC_TRIANGLE_SYMMETRY的当前值是否就是30。如果是这样,SetAttribute函数立即结束任务,并正常返回。
4〉如果继承属性FG300_ATTR_SIMULATE的值为VI_TRUE(允许模拟状态),IVI引擎将值30赋给属性FG300_ATTR_FUNC_TRIANGLE_SYMMETRY后即正常返回,不进行任何I/O操作。
5〉如果以上情况都不成立,IVI引擎会调用属性FG300_ATTR_FUNC_TRIANGLE_SYMMETRY的CallBack函数,通过CallBack函数中的I/O操作命令设置值输出至仪器。
6〉如果继承属性FG300_ATTR_QUERY_INSTR_STATUS的值为VI_TRUE(允许状态检查),IVI引擎会调用CheckStatusCallBack函数读取仪器的状态
1