IVI技术研究
发布时间:2006-10-14 4:13:52   收集提供:gaoqian
方案综述:
引言
  长期以来,互换性成为许多工程师建造测试系统的目标。因为在很多情况下,仪器硬件不是过时就是需要更换,因此迫切需要一种无需改变测试程序代码就可用新的仪器硬件改进系统的方法。针对这一问题,在1998年9月成立了IVI(Interchangeable Virtual Instrument)基金会。IVI基金会是最终用户、系统集成商和仪器制造商的一个开放的联盟。目前,该组织已经制订了五类仪器的规范一一示波器/数字化仪(IVIScope)、数字万用表(IVIDmm)、任意波形发生器/函数发生器(IVIFGen)、开关/多路复用器/矩阵(IVISwitch)及电源(IVIPower)。美国国家仪器公司(简称NI)作为IVI的系统联盟之一,积极响应IVI的号召,开发了基于虚拟仪器软件平台的IVI驱动程序库。
  IVI基金会成员经常召开系统联盟会议,来讨论仪器类的规范和制订新仪器类规范。在适当的时候,将会成立专门的工作组来处理特殊技术问题,如:
  为新仪器类建立规范;
  结合仪器规范,模括应用程序的标准(如设立标准波形的文件格式和帮助文件);
  定义仪器驱动程序的测试步骤;
  建立故障报告和分布式更新机制;
  调查计算机的工业标准,为软件通信、软件封装制订规范
  IVI基金会努力从基本的互操作性(Interoperability)到可互换性(Interchangeability),为仪器驱动程序提升了标准化水平。通过为仪器类制订一个统一的规范,使测试工程师获得更大的硬件独立性,减少了软件维护和支持费用、缩短了仪器编程时间、提高了运行性能。运用IVI技术可以使许多部门获益。例如使用IVI技术的事务处理系统可以把不同的仪器用在其系统中,当仪器陈旧或者有升级的、高性能或低造价的仪器时,可以任意更换,而不需要改变测试程序的源代码;在电信和电子消费产品中,当仪器出现故障或者需要修复时,可以保持他们的生产线正常运行;各种大的制造公司可以很容易地在部门和设备之间复用及共享测试代码,而没有必要强迫用同样的仪器硬件。
IVI规范及体系结构
  因为所有的仪器不可能具有相同的功能,因此不可能建立一个单一的编程接口。正因为如此,IVI基金会制订的仪器类规范被分成基本能力和扩展属性两部分。前者定义了同类仪器中绝大多数仪器所共有的能力和属性(IVI基金会的目标是支持某一确定类仪器中95%的仪器);后者则更多地体现了每类仪器的许多特殊功能和属性。以下简要地把这五类规范作一介绍:
  IVI示波器类把示波器视为一个通用的、可以采集变化电压波形的仪器来使用。用基本能力来设置示波器,例如设置典型的波形采集(包括设置水平范围、垂直范围和触发)、波形采集的初始化及波形读取。基本能力仅仅支持沿触发和正常的采集;除了基本能力外,IVI示波器类定义了它的扩展属性:自动配置、求平均值、包络值和峰值、设置高级触发(如视频、毛刺和宽度等触发方式)、执行波形测量(如求上升时间、下降时间和电压的峰,峰值等)。
  IVI电源类把电源视为仪器,并可以作为电压源或电流源,其应用领域非常宽广。IVI电源类支持用户自定义波形电压和瞬时现象产生的电压。用基本能力来设置供电电压及电流的极限、打开或者关闭输出;用扩展属性来产生交、直流电压、电流及用户自定义的波形、瞬时波形、触发电压和电流等。
  IVI函数发生器类定义了产生典型函数的规范。输出信号支持任意波形序列的产生,包括用户自定义的波形。用基本能力来设置基本的信号输出函数,包括设置输出阻抗、参考时钟源、打开或者关闭输出通道、对信号的初始化及停止产生信号:用扩展属性来产生一个标准的周期波形或者特殊类型的波形,并可以通过设置幅值、偏移量、频率和初相位来控制波形。
  IVI开关类规范是由厂商定义的一系列VO通道。这些通道通过内部的开关模块连接在一起。用基本能力来建立或断开通道间的相互连接,并判断在两个通道之间是否有可能建立连接;用扩展属性可以等待触发,来建立连接。
  IVI万用表类支持典型的数字万用表。用基本能力来设置典型的测量参数(包括设置测量函数、测量范围、分辨率、触发源、测量初始化及读取测量值);用扩展属性来配置高级属性,如自动范围设置及回零。万用表类定义了两个扩展的属性:IVIDmmMultipoint扩展属性对每一个触发采集多个测量值;IVIDmmDeviceinfo查询各种属性。
  NI开发的IVI驱动程序库包括IVI基金会定义的五类仪器的标准Class Driver 、仿真驱动程序和软面板。该软件包为仪器的交换做了一个标准的接口,通过定义一个可互换性虚拟仪器的驱动模型来实现仪器的互换性,
  IVI驱动程序比VXIPlug&Play(简称VPP)联盟制订的VISA规范更高一层。它扩展了VPP仪器驱动程序的标准,并加上了仪器的可互换性、仿真和状态缓存等特点,使得仪器厂商以继续用他们的仪器特征和新增功能。因此,IVI基金会是对VPP系统联盟的一个很好的补充。
  测试程序可以直接调用仪器Spmile Driver,也可通过Class Driver来调用SpmikDriver。采用直接调用方式时,可以执行状态缓存、范围检查及简单的仿真。但是如果更换仪器,需要修改测试程序;采用间接调用方式时,应用程序通过调用IVI Configuration UtiIIty中的WIDEnEEl-Configure函数,来调用仪器的Specific Driver,因此不用修改测试代码。例如在图1中,测试程序可以不用直接调用Fluke 45-Configure或者HP34401-Configure。这样,当系统中使用的是Fluke 45Dmm时,程序在运行中会动态地自动装载到Fluke 45-Configure。如果以后将测试系统中的Fluke 45Dmm换成了HP34401Dmm,IVIDmm驱动程序自动定向到调用HP34401-Configure。按照这种“虚拟”方式把同一类仪器中的不同仪器的特性差异“封装”起来,保证应用程序完全独立于硬件仪器,也就同时保证了仪器的可互换性。
  对于一个标准的仪器驱动程序,状态跟踪或者缓存是其最重要的特点。状态缓存命令可以以IVI的状态缓存特性在Spedile Driver下执行,因此不会影响Class Driver的运行。IVI Engine通过控制仪器的读写属性,来监测IVI驱动程序。通过状态缓存,存储了仪器当前状态的每一个属性设置值,消除了送到仪器的多余命令,当试着设置一个仪器已经有了的属性值,IVI引擎将会跳过这个命令,从而提高了程序运行速度。
  因为IVI仿真驱动程序有内置的许多仿真数据产生算法,因此可以对仪器硬件进行仿真。当程序员在仪器不能运行或者不完整时,可以用软件仿真前端仪器的采集、计算和验证。同时,仿真驱动程序也可以对仪器的属性值进行范围检查。即当写测试代码而没接仪器时,IVI仿真驱动程序自动识别所发送的值是否有效。同时,当输入参数超过范围时,强迫给一个正确值。仿真功能在Spmile Driver的控制下发生,有没有Class Driver,都可以用这个特性。因此通过仿真,降低了测试的开发成本,缩短了仪器的编程时间。
  软面板检查所用的仪器是否正常工作,并保证简单、交互式测量。IVI驱动程序库已经有五类仪器的软面板。
开发IVI的Specific Driver
  由于NI开发的IVI驱动程序库已经包含了仪器的Class Driver,因此,程序员只要按照IVI的规范开发自己仪器的Specific Driver,就可以实现仪器的互换性。IVI驱动程序库,可以在任何能够产生32位DLLs的环境下运行,如Lab Windows/CVI、Visual Basic和Visual C等。不过,在LabWindows/CVI环境下开发比较容易,因为这个软件包容纳了开发驱动程序的许多工具,并有一个自动的开发向导可以创建一个包含大多数驱动程序代码的模板,这样,开发和测试驱动程序代码就很容易了。
  在开发仪器的Specific Driver以前,首先要熟悉仪器的有关命令,然后根据其功能进行分类。在Lab Windows/CVI下创建仪器的Specific Driver,需要按以下步骤进行程序开发。下面针对ACMELXYZ示被器做一详细介绍。
  1.创建一个驱动程序模板
  Lab Windows/CVI有一个内置的开发向导提示程序员输入有关的信息,根据输入的信息,自动地创建一个代码模板和函数目录。代码模板包含了许多修改指令以及实现各种属性的例子;函数目录包含了每一个函数、控制和指示的规范。
  2.移走不用的扩展属性
  根据IVI的规范,ACME-XYZ示波器应该支持IVI示波器类的基本属性,扩展属性仅仅支持沿触发,因此与别的触发类型有关的扩展属性就必须从驱动程序的代码文件和头文件中移走。
  3.确定独立属性
  独立的属性就是指不受别的属性设置影响的属性,如采集类型、输入阻抗、触发类型、触发藕合等。
  4.调用指定的属性
  就采集类型来说,ACME-XYZ示波器支持正常采集模式、峰值检测以及高分辨率等模式。表1列出了其具有的各种模式,范围表为存储有效的硬件设置,提供了一个简单和方便的方式。用属性编辑器可以编辑范围表或者寄存器的值。完成了范围表的编辑,接着就可以进行读、写操作以设置或读取硬件属性值。
  5.确定属性的失效规则
  IVI引擎用一个相对简单的机制来维护状态缓存的完整性。在许多情况下,一个属性的值有可能影响另一个属性值,例如示波器的垂直范围和偏移量依赖于探头对输入信号的衰减。改变探头衰减的同时也就改变了垂直范围和偏移量。这意味着当探头的衰减改变时,必须给垂直范围和偏移量的缓存值一个失效值或者更新值。这个问题很容易解决,只要在属性的失效目录中,为探头的衰减属性选择其衰减值。
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50