跳到主要内容

可互换虚拟仪器驱动程序的开发

· 阅读需 18 分钟

原文发表在《测控技术》

阮奇桢

摘 要:

可互换虚拟仪器驱动程序是最新的仪器驱动程序标准,它的出现大大提高了测试系统的开发和运行效率。本文论述了可互换虚拟仪器驱动程序的体系结构、优势、开发步骤和应用实例。

关键词:

虚拟仪器,仪器驱动程序, IVI, LabVIEW, LabWindows/CVI

IVI Specific Driver Development

Qizhen Ruan

Abstract:

IVI is a revolutionary standard for instrument driver software technology.  It features increased performance and flexibility for the test system.  The excellent IVI architecture is introduced in this paper as well as its implementation process.

Keywords

IVI, Instrument Driver, LabVIEW, LabWindows/CVI

一. 仪器驱动程序的发展

    仪器驱动程序是连接仪器硬件与高层应用程序的桥梁。使用仪器驱动程序可以把高层应用函数从仪器接口函数中分离出来,从而简化了高层应用软件的开发难度,提高了应用软件的可维护性。
    仪器驱动程序的发展大致经历了以下几个阶段:
    1. 早期仪器驱动程序 没有任何统一的规范,功能较为简单、直接。由于不同的仪器驱动程序的实现方法和接口函数大相径庭,用户往往觉得它们难以琢磨,结果使得它们很难被应用和修改。用户需要的是容易使用,便于修改,并且遵循相同标准的驱动程序。只有这样,他们才有可能把不同厂商的仪器集成在同一系统中使用。为了实现这一目标,针对仪器驱动程序制定的标准陆续出现,比如下文提到的这几种比较重要的规范。
    2. IEEE 488.2规范 定义了用于仪器的辨认和自检等的命令,但是仅有这几种命令还远远不能解决仪器驱动程序编写繁复、阅读困难等缺点。
    3. SCPI(Standard Commands for Programmable Instruments)规范 定义了通用的仪器命令结构,对命令按功能进行了归类分组。目前,绝大多数新仪器都是基于字符串命令的仪器,并且采用了SCPI规范。遗憾的是,虽然他们都使用了SCPI的结构,但具体到每个功能,不同厂商仍然使用各不相同的命令字符串。
    4. VXI总线即插即用(VXIplug&play)规范(简称VPP规范)由VPP系统联盟制定。VPP规范侧重于仪器的“互操作性(interoperability)”,即用户可以方便地把不同厂商的仪器集成到自己系统中。为此,VPP规范详细定义了仪器驱动程序的内部设计模型与外部接口模型,规定了虚拟仪器驱动程序的设计要求及与系统中其他程序模块之间的相互关系。但是,VPP规范仍然没能解决工程师建造测试系统时遇到的困扰:一是软件的开发和维护费用过于昂贵,二是难以快速升级已有的系统。解决这样的问题需要仪器驱动程序具有“互换性”。
    5. IVI(Interchangeable Virtual Instrument)驱动程序规范 扩展了VPP仪器驱动程序的标准,并增加了仪器的可互换性、仿真和状态缓存等特点。IVI驱动程序规范由IVI基金会(Interchangeable Virtual Instrument Foundation)制定。它是由最终用户、系统集成商和仪器制造商共同组成的一个开放联盟,几乎所有的大型仪器生产公司(诸如:National Instruments,Agilent,Tektronix)都已经成为其成员。其职能是为测试仪器制定编程规范,从而实现不同型号仪器之间的互换,并且提高系统性能、降低开发成本。

二. IVI系统结构

    为了实现互换性,IVI基金会将同类仪器的共性提取出,并作了规范。目前已经发布的八类仪器规范是:示波器(IviScope)、数字万用表(IviDmm)、信号发生器(IviFGen)、直流电源(IviDCPower)、开关矩阵/多路复用器(IviSwitch)、功率表(IviPwrMeter)、频谱分析仪(IviSpecAn)和射频信号发生器(IviRFSigGen),其他类型仪器的规范也将被陆续制定发布。每一类的仪器都有各自的类驱动程序(IVI Class Driver)。类驱动程序包含了该类仪器通用的各种属性和操作函数。运行时,类驱动程序通过调用每台仪器的专用驱动程序(IVI Specific Driver)中相应的函数来控制仪器。


图1: IVI体系结构

    图1是IVI体系结构框图:
    应用程序可以直接调用专用驱动程序来控制仪器。但是为了实现仪器互换,应用程序应该首先调用类驱动程序,类驱动程序检查IVI配置文件以确定应该使用的专用驱动程序。若系统中的仪器被更换,只需适当修改IVI配置文件,而应用程序无需任何改动,因而实现了测试系统的通用性。

三. IVI驱动程序的特点和优势

    1. 互换性。IVI驱动程序的互换性至少为我们带来了以下几大好处:
        a) 易于使用。所用的IVI驱动程序都使用通用的接口,易于理解,也就不再要求应用程序的开发人员必须掌握某一特定仪器的编程方法,从而系统开发获得了更大的硬件独立性。
b) 降低了系统的维护和升级费用。IVI构架系统可以适用不同的仪器,当仪器陈旧或者有了升级的、高性能或低造价的仪器时,可以任意更换,而不需要改变应用程序。
        c) 代码共享。IVI构架允许部门和设备之间方便地复用及共享测试代码,并且不需使用相同型号的仪器硬件。
    2. 模拟功能。每个仪器专用驱动程序都具有专门针对本型号仪器的模拟功能。这些模拟功能使得工程师在缺少真实仪器的情况下,可以使用IVI驱动程序的模拟功能来开发、调试应用程序。还可以使用美国国家仪器公司(National Instruments,简称NI)提供的类模拟驱动程序以获得更强大的模拟功能。
    3. 状态缓存功能。IVI驱动程序可以保存仪器每一属性设置的当前状态。当应用程序试图发送一些冗余命令到仪器时(例如,将仪器的某一属性重新设置为当前值,这些命令显然不会让仪器产生任何变化或动作),IVI驱动程序会跳过这些命令。当前的测试系统中,影响软件执行速度的瓶颈通常在于仪器与计算机接口总线的传输速率,IVI驱动程序的此项功能大大减少了仪器与计算机之间的通讯,从而提升了系统性能。
    4. 源码开放。高级用户可以直接修改IVI驱动程序的源代码,以对其进行优化或添加功能。
    5. 免费得到大量的驱动程序。除了生产厂商自行开发的IVI驱动程序,NI公司也为各类常用仪器开发了大量IVI驱动程序,这些程序都可以从NI的网站上免费下载。 此外,NI还提供了用于开发驱动程序的工具包,以简化用户的IVI驱动程序的开发过程。

四. IVI驱动程序的设计和开发

    按照提供给用户的接口形式的不同,IVI驱动程序分为:C语言驱动程序, LabVIEW驱动程序,COM驱动程序。虽然同一仪器可以存在接口形式不同的驱动程序,但它们的功能完全相同,用户可以选择使用自己最擅长的形式。目前最普遍使用的仍然是C语言驱动程序;LabVIEW驱动程序是在C语言驱动程序生成的DLL动态库的基础上生成的; 而COM驱动程序则需要重新编写代码。
    IVI驱动程序规范已经详细制定了驱动程序的构架和接口,因此开发人员不必另行设计程序结构,这避免了驱动程序结构不合理或用户使用不便等问题。但是,开发人员要特别注意和精心设计仪器的功能、控制命令与IVI规范不兼容的部分。
    使用LabWindows/CVI作为C语言驱动程序的开发工具具有独特的优越条件,因为CVI集成了许多驱动程序开发工具,比如:IVI驱动程序生成向导、属性编辑器等。另外还可以选用NI公司的IDT工具包作为补充。

    下面以较为常用的Fluke 45 数字万用表为例,简单介绍一下开发IVI仪器驱动程序的具体步骤:
    1. 熟悉仪器与IVI规范。在开发仪器的IVI驱动程序以前,首先要熟悉仪器的有关命令,然后根据其功能进行分类。并且将仪器命令与IVI规范制定的属性、函数对应起来。
    2. 使用CVI的“仪器驱动程序开发向导”生成驱动程序的框架。开发向导生成的文件一共有4个,其中,“fl45.c”和“fl45.h”分别是C语言源文件和头文件;“fl45.fp”记录函数面板信息;“fl45.sub”记录仪器“属性(attribute)”的信息。
    3. 删除仪器不支持的扩展功能组。可能会出现仪器不支持某些IVI规范定义的功能组的情况,比如说fl45不具备温度测量功能,这时应该把所有与温度测量有关的函数和属性移出。
    4. 完善代码。实现IVI规范中仪器可以支持的功能组。“仪器驱动程序开发向导”已经生成了大部分属性和函数的代码。用户需要做的只是到属性的回调函数(Attribute Callback Function)中修改相应的仪器命令。由于每台仪器的命令体系都有其特殊性,用户也不能够完全依赖“开发向导”生成的程序结构,函数和属性的实现需要参照仪器的具体命令体系来实现。
    5. 编写支持仪器特殊功能的代码。“仪器驱动程序开发向导”不能够生成支持IVI规范定义之外的仪器功能。比如Fl45有对测量值进行修正的功能,IVI规范没有相应的定义,实现这部分功能需要自己设计和编写相应的属性及函数。
    6. 测试。除了要确保IVI驱动程序函数功能正确,还要验证它是否完全符合IVI规范。IVI驱动程序的开发人员也可以请求NI公司帮助完成程序的最终测试。
    7. 编写LabVIEW驱动程序。如果已经有了C语言IVI驱动程序,只需要使用NI公司在其网站上提供的 LabVIEW Interface Generator for LabWindows™/CVI™ Instrument Drivers 工具即可方便地生成相应的LabVIEW仪器驱动程序。

    IVI类驱动程序的开发。如果用户希望使用IVI规范定义的八类仪器之外的仪器,并且还要实现通用性(可互换性),那么则需要客户自己开发类驱动程序。类驱动程序的开发与仪器驱动程序的开发过程完全不同,由于用户很少遇到类驱动程序的开发,本文不作详细介绍。

五. IVI驱动程序的应用实例

    IVI驱动程序相对于传统仪器驱动程序而言,比较适合于高端应用和大型测试系统的搭建。下面是两个IVI体系的典型应用。

    1. 2002年波音公司在其新设计的测试系统中应用了IVI技术。由于对测试稳定性的要求,波音公司的测试系统一经投入使用,往往要求连续工作几十年而且不能做大的改动。在这么长的使用期内,许多最初设计时使用的仪器都可能停产。一旦仪器损坏,根本无法找到同型号的仪器进行替换,只能使用类似的仪器进行替代。如果使用传统仪器驱动程序,每次更换仪器时,测试软件也必须做相应更新。这样一来不但需要花费大量时间在测试软件的更新上,更重要的是对软件结构的改动很可能会破坏它的一致性。
    在使用IVI体系结构后,每次替换仪器,只需要在IVI配置文件中指明新的驱动程序即可,测试软件不需要作任何改动。这样既节约了时间,又不会对测试结果产生任何影响。

    2. NI公司在其2005年推出的校准系统中也使用了IVI体系结构。该校准系统将提供给世界各地校准实验室使用,因此,该校准系统必须能供控制型号千差万别的各类标准仪器。IVI体系结构保证了该系统在不改变代码的前提下适应任何实验室的仪器设备。

参考文献:

    [1] Dany Cheij, The Anatomy of an Interchangeable Test System, http://www.ni.com/idnet, 3-2002
    [2] National Instruments, IVI Driver Development Course, 10-2003
    [3] IVI Foundation, IVI Specifications, http://www.ivifoundation.org, 2005
    [4] 用 LabVIEW 编写 Wizard 类型的应用程序, 阮奇桢, 2006
    [5] 其他相关技术文章
    [6] 一个 IVI 驱动程序的开发过程, 阮奇桢, 1999
    [7] 回答一个关于 IVI 仪器驱动程序的问题