基于HP-VISA库的VXI总线测试应用编程

发布者:喜茶我要七分糖最新更新时间:2013-03-30 来源: dzsc关键字:HP-VISA库  VXI  总线测试 手机看文章 扫描二维码
随时随地手机看文章
一、引言 
  VXI总线是一种基于模块化概念的标准仪器控制总线技术体系。经过十年来的发展,目前已在自动测试、虚拟仪器及其它相关专业领域内得到了广泛应用。随着这一概念及技术的高速发展,在大型应用系统的设计中,往往会碰到不同厂商仪器模块,不同接口类型等之间的兼容性与互操作性问题。为此,VXI即插即用联盟为VXI模块专门制定了统一的软、硬件标准,并于1996年底开发了一套VISA(Virtual Instrument Software Architecture)库。它为用户提供了一套独立且易用的低层I/O库及相应的函数接口,使用户可以方便地开发与仪器、接口类型无关的测试应用。目前,VXI库可以支持的操作系统包括:WIN、WIN95/NT、SUN、HP-UX等。支持的语言及开发环境有:C/C++(VC、BC)、VB、Labview、Labwindows/CVI、HP VEE等。同时,作为一种通用的I/O标准,VISA与仪器、接口类型无关的特性,也为开发人员提供了方便,并大大缩短了开发周期。 
  本文将结合HP VISA1.0中的有关内容,以Win95平台上的VC语言为例详细讨论VXI总线测试应用编程中的有关细节。 
二、基于VISA库的编程细节 
  1.相关的头文件及库文件 
  在应用源程序的开头应包含对VISA库头文件Visa*h的引用,一般该文件在../Vxipnp/Win95/include子目录下。Visa*h头文件中主要是对VISA库函数的原型声明及相关常量、错误码的定义。它还自动包含了另一个头文件Visatype*h,该文件中包括了VISA库中用到的数据类型的定义。 
  另外,在工程文件中还需加入VISA静态库Visa32.lib。该文件在../Vxipnp/Win95/lib/Msc子目录下。 
  2.会话的建立与关闭 
  会话(session)即与设备进行通讯的通道。在基于VISA库编程中,与任何一个设备(包括仪器、PC机甚至打印机等)通讯之前,都必须首先与之建立一个会话。通讯结束后,应关闭这一会话。 
  最先建立的应是由资源管理器之间的会话,它管理所有的资源,并成为其后打开的所有会话的“文”会话。这由以下函数调用完成: 
   Vi OpenDefault RM(sesn); 
  sesn是一个Vi Session类型的变量指针,所指的值为资源管理会话句柄。 
  接下来,为每一个需要与之通信的设备建立一个会话:Vi Open(sesn,rsrc-name,accessmode,timeout,Vi);rsrcname为设备地址,Vi指向设备会话句柄。 
  设备地址为标识某一设备的字串,通常由VISA接口类型标识及设备的逻辑地址两部分组成。具体内容可参见下表: 
  

接口类型   设备地址示例  
VXI         VXIO::24  
GPIB-VXI    GPIB-VXI::128  
GPIB        GPIBO::7::0  
ASRL        ASRL::INSTR  

  在与设备通讯结束后,应调用Vi Close(Vi)函数关闭会话。这样可以释放会话所占用的数据结构资源。 
  最后,应关闭资源管理会话。 
  3.资源 
  如前所述,资源管理会话负责管理所有的资源。可以通过它来查询指定资源及与其相关的会话。 
  Vi Find Rsrc函数:对某一接口查询指定的设备资源,并返回匹配项。 
  Vi Find Next函数:与Vi Find Rsrc配对使用,用于对有多个匹配项的列表。 
  4.I/O命令 
  一旦与设备的会话建立之后,就可以利用VISA库中的I/O函数与设备进行通讯,VISA库中提供了两类I/O方式。 
  ①格式化I/O 
  提供了一种类似于ANSI-C语言Stdio中格式化输入输出方式的操作能力。包括: 
  Vi Printf函数:将格式化的数据写入设备。 
  Vi Vprintf函数:与Vi Printf函数功能类似。 
  Vi Scanf函数:从设备中读出数据并按照给定的格式转换。 
  Vi Queryf函数:向设备写入一个格式化后的数据串,并接受及转换响应数据。 
  其它Vi Vscanf及Vi VQueryf函数分别与Vi Scanf及Vi Queryf函数功能类似。 
  数据的格式是由一个格式字串确定的,具体格式与ANSI-C语言相同。 
  ②无格式I/O 
  无格式I/O直接发送或接收原始数据,不经过格式转换过程。它所执行的是一种低层的I/O操作,因此在对同一个会话的I/O中,不能混用格式化I/O与无格式I/O两种方式。 
  Vi Read函数:从设备读出数据并存放于缓冲区; 
  Vi Write函数:将缓冲区中数据写入设备。 
  这两个函数执行的是同步操作方式,另外: 
  Vi Read Async函数:功能与Vi Read相似,只是以异步方式读数据,即在读操作结束之前就可以返回。函数返回一个jobId用以标识尚未完成的操作。可以利用Vi Terminate函数强制结束它,或直到操作完成。 
  Vi Write Async函数与此类似。  [page]
  5.属性 
  属性(Attribute)是与会话或资源相关的,可以通过查询或设备属性的值来获取或改变会话、资源的状态(某些属性是只读的,另有一些属性则是可读写的)。属性可分为以下几类: 
  ①资源属性 
  包括与资源的制造商及VISA库版本有关的信息,以及资源管理会话的状态。 
  ②一般仪器属性 
  与会话相关的,主要用于确定诸如超时设置、缓冲区是否清除、接口类型等信息。 
  ③特定接口类型相关的属性 
  包括与VXI、GPIB、ASRL、GPIB-VXI等接口类型相关仪器的状态信息。 
  ④事件属性 
  这是一些只读的属性,可以查询如当前允许的事件、触发线设置等信息。 
  6.事件及句柄 
  事件指需要应用程序进行处理的一些情况,一般有三类:服务请求(SRQs)、中断及硬件触发器(Trigger)。事件只有在被设置为允许状态后才能被接收和处理。 
  这可以通过两种方式完成: 
  ①首先装载一个事件句柄(Vi Install Handler函数),设置事件为允许状态(Vi Enable Event)。这样,当指定的事件发生后,就可以转到事件句柄回调函数中进行处理(通常是提供一些提示信息)。 
  ②用Vi Enable Event函数设置事件为允许,然后在程序中适当的地方调用Vi Wait On Event函数以等待事件的发生,这将暂停程序的执行过程直到事件发生并被处理或超时。(这两种方法在同一个会话中也不能并用)。 
  另外,在事件响应完之后,设置为允许的事件应在适当的地方重新调为禁止,并卸载事件句柄(Vi UNInstall Handler函数和Vi Disable Event函数)。 
  7.出错处理 
  在程序中考虑对出错的处理是一种好的编程风格。VISA库对此也提供了支持。一般可以在每一个VISA库函数的调用后通过检查返回值(与VI-Success常量比较)来判别是否有错误发生。同样,这里也需要定义相应的错误句柄回调函数,完成对错误的处理(如显示提示信息、关闭会话、退出应用等)。 
  8.锁机制 
  在VISA库编程中,可以同时对同一个设备保持多个会话,同样,多个应用也可以通过不同的会话对同一个设备或资源访问。在某些情况下,这将带来问题(与数据库中的并发操作以及完整性概念相似)。这样,可能某一应用在访问资源时就希望能限制其它应用对这一资源的访问。这时,就需要用到加/解锁函数调用。 
  Vi Lock函数:对资源加锁,可以有两种类型的锁:排他锁与共享锁。 
  Vi UnLock函数:解锁。 
  9.对VXI设备编程 
  VISA库中对VXI仪器模块的应用开发提供了丰富的函数,并可以支持VXI、GPIB及GPIB-VXI三种接口类型。 
  VXI仪器模块可分类为两种:消息基设备和寄存器基设备。前者拥有自己的处理器,因而可以直接解释并执行SCPI命令,在VISA库函数调用中,这只需把SCPI命令字串作为相应的调用参数即可。同时,VISA库中还提供了直接对其寄存器操作的函数。后者则没有自己的处理器,因而不能解释SCPI命令。 
  VISA库中为VXI仪器模块提供了两级内存操作函数接口: 
  ①高级内存函数 
  它屏蔽了低层的内存映射及寄存器访问机制,向用户提供了简单易用的函数调用接口,从而可以方便地访问VXI接口上指定的内存空间。 
  Vi Inxx函数:读入指定内存空间的值 
  Vi Outxx函数:向指定内存空间输出值 
  Vi Move Inxx函数:对指定内存处成块数据的读入 
  Vi Move Outxx函数:向内存输出成块数据 
  xx分别对应8、16或32位数据,相应为8、16、32。 
  ②低级内存函数 
  高级内存函数简单易用,但其缺陷在于速度上的损失(内部的地址映射及寄存器访问带来的影响),因而在某些对速度有较高要求的场合,还需使用VISA库中的低层内存函数。 
  Vi Map Address函数:完成内存空间的映射 
  Vi Peekxx函数:读入寄存器内容 
  Vi Pokexx函数:向寄存器中写入 
  Vi UnMap Address函数:释放内存映射 
  xx同样代表8、16或32位后缀。 
  10.应用示例 
  前面几小节中分别讨论了基于HP-VISA库的VXI总线测试应用开发中的一些细节,下面,通过给出一个具体的程序实例进一步说明: 
  //示例程序example.c源代码清单 
  #include<visa.h>    //包含VISA库头文件 
  #include<stdio.h> 
  voidmain O 
  { 
  Vi Session default Rm,Vi;  //定义保存会话句柄的变量 
  doubleres; 
  double list【2】=(1,0.001); 
  Vi Open Default RM(& default RM);//打开缺省资源管理器会话 
  //打开仪器会话(接口类型为VXIO,逻辑地址24) 
  Vi Open(default RM,“VXIO∶∶22∶∶INSTR”,VI-NULL,VI-NULL,&Vi); 
  //设置对会话的独占锁 
  Vi Lock(Vi,VI-EXCLUSIVE-LOCK,2000,VI-NULL,VI-NULL); 
  /*下面一段代码为格式化I/O函数演示*/ 
  Vi Printf(Vi,“*RST\n”);//利用格式化I/O函数,初始化仪器 
  Vi Printf(Vi,“CALC∶DBM∶REF50\n”);//利用格式化I/O函数向仪器发送命令, 
  VI Printf(Vi,“MEAS∶VOLT∶AC?%,2f\n”,list);//本例为进行直流电压测量 
  Vi Scanf(Vi,“% lf”,& res);//利用格式化I/O函数读出测量结果 
  printf(“Measurement Results:% lf\n”,res);  [page]
  /*下面一段代码为无格式I/O函数演示 
    Vi Write(Vi,(ViBuf)“RST\n”,5,& actual);//设备初始化 
    Vi Write(Vi,(ViBuf)“CALC∶DBM∶REF 50\n”,16,& actual);//直流电压测量 
    Vi Write(Vi,(ViBuf)“MEAS∶VOLT∶AC?1,0.001\n”23,& actual); 
    Vi Write(Vi,(ViBuf)strres,20,& actual); //读出测量结果 
    strres[actual]=0;  //用空字符结束串 
    printf(“Measurement Results:% s\n”,strres); 
  */ 
  //利用属性设置函数激活触发线 
  Vi Set Attribute(Vi,VI-ATTR-TRIG-ID,VI-TRIG-TTLO); 
  Vi Install Handler(Vi,VI-EVENT-TRIG,my Hdlr,(Vi Addr)10);//装载事件句柄 
  Vi Enable Event(vi,VI-EVENT-TRIG,VI-HNDLR,VI-NULL);//设置事件为允许 
  Vi Assert Trigger(Vi,VI-TRIG-PROT-SYNC);//引发触发线 
  Vi Disable Event(Vi,VI-EVENT-TRIG,VI-HNDLR);//处理完成,设置事件禁止 
  Vi Uninstall Handler(Vi,VI-EVENT-TRIG,my Hdlr,(Vi Addr)10);//卸载事件句柄 
  Vi Unlock(Vi);//解锁 
  Vi Close(Vi);//关闭设备会话 
  Vi Close(Default RM);//关闭资源管理器会话 
  } 
  //触发器事件句柄函数 
  Vi Status-VI-FUNCH my Hdlr(Vi Session Vi,Vi Event Type event Type,VI Eventctx,Vi Addreser Hdlr) 
  { 
  Vi Int16 trigId; 
  if(event Type!-VI-EVENT-TRIG){  //检查事件类型 
  return VI-SUCCESS; }  //其它事件被忽略 
  printf(“Trigger Event Occurred ! \n.Original Device Session=%ld\n”,Vi”); 
  //通过属性读取函数,获取被引发的触发器 
  Vi Get Attribute(ctx,VI-ATTR-RECV-TRIG-ID,& trigId); 
  printf(“Trigger that fired:”); 
  switch(trigId){  case VI-TRIG-TTLO: 
           printf(“TTLO”); 
           break; 
           default 
           printf(“<other Ox % x>”,trigId); 
           break; 
  } 
  printf(“\n”); 
  return VI-SUCCESS; 
  } 
三、小结 
  VISA标准及库的开发为用户提供了简捷易用的函数接口,有效地提高了应用开发效率,并能保证一致性与良好的可移植性。而功能还处于不断的完善和发展中,是一种有别于已有I/O软件标准的大有前途的I/O软件标准构架。 

参考文献 

1 HP VISA User’s Guide 
2 VISA-虚拟仪器软件构架的结构及应用。《国外电子测量技术》1997.NO.1  
关键字:HP-VISA库  VXI  总线测试 引用地址:基于HP-VISA库的VXI总线测试应用编程

上一篇:VXI总线仪器系统
下一篇:基于CAN总线的工厂电力监测分析网络系统设计

推荐阅读最新更新时间:2024-05-02 22:36

建立使用PXI、VXI和LXI的混合型测试系统
产品生命期内的更好延续   产品生命期的不同阶段往往使用不同类型的仪器。例如在研发中通常使用台式仪器,因为它能提供对测量的互动控制和快速反馈。而当产品投入制造时,为减小自动测试系统的体积,有时会采用PXI或VXI的模块化解决方案。   可惜在从台式仪器转到模块化仪器时,硬件、软件和测试策略往往因没有延续性而造成时间和资金的浪费。 LXI 解决方案则通过提供具有不同外形尺寸的仪器,如台式仪器、模块化仪器、合成仪器的相关和同一产品,有可能改变这种状况,从而在产品整个生命期更容易地沿用已有的测试策略和系统软件。   建立使用 PXI 、 VXI 和LXI的混合型测试系统是本系列应用指南中的第四篇,它帮助您处理从GP
[测试测量]
建立使用PXI、<font color='red'>VXI</font>和LXI的混合型<font color='red'>测试</font>系统
基于LXI的多总线融合的自动测试系统
  1 引言   随着我军战略指导方针向信息化方向转变,高新技术在武器装备全寿命周期内得到广泛应用,导致武器装备的复杂程度与日剧增。传统基于单总线的测试系统结构变得难以满足武器装备的维护保障需求,主要表现在以下方面。   1) 测试系统单通信接口难以满足武器装备多数字接口通信的需要。为使武器装备具备高性能的作战能力,人们常将现代计算机技术、电子技术、通信技术的最新研究成果应用到其中,武器装备与外界接口通常包含1553B、RS422和RS232等多种,接口形态呈现多样化,测试系统需配置多种通信总线接口才能满足武器装备的测试需求。   2) 单总线测量仪器功能覆盖范围有限。由于武器装备的测试项目繁多,测试参数复杂,测试资源需求比较广
[测试测量]
基于LXI的多<font color='red'>总线</font>融合的自动<font color='red'>测试</font>系统
深入分析本土测试测量企业的现状和挑战
测试测量 和仪器产业,是国防装备必须的保障,也是研发前沿科技的利器,同时更是任何电子技术都避不开的一个重要环节。然而,无论从国防还是民用需求,我们接触到的测试系统以及测试仪器,在高性能应用上无一例外都是进口品牌。 据统计,测试仪器产业所占电子工业的产值大约只有不足2%,而电子工业的产值不过占世界总产值的2%左右,但依靠测试仪器拉动的新技术带来的附加价值却可以占70%-75%的全世界每年新增的价值。作为一种应用遍及基础研究到生产线的基础性产品和技术,电子测试仪器行业的强大,完全可以拉动一个国家创新带动的新增价值。 作为一个高技术、资本密集、横跨多个学科并且强调多年技术积累的行业,我们在测试仪器方面与国外企业的差距是全方位
[测试测量]
基于VPP规范的VXI总线模块的软件开发
1.概述 VXIbus联合体在制定VXIbus规范时,成功地定义了基于VME总线的模块化仪器的标准。它定义了VXIbus兼容部件如主机箱、背板、电源和模块之间互联的电气、机械接口协议和模块间的通讯协议,这些协议能使来自不同厂商的产品组成系统。然而,VXIbus规范没有涉及系统级的软件标准,如选用何种操作系统、应用开发环境和编程语言,何种计算机,何种I/O软件接口,而这些产品的一些组合是不兼容的,这使得用户在设计、组建、编程和使用一个由计算机控制的仪器系统时,仍面临着许多问题。 为了最大限度地提供VXI总线系统级的易用性、多厂商开放式结构和互操作性,在1992年由多家仪器厂商成立了VXIplug&play系统联盟。plug&
[嵌入式]
基于VXI/GPIB总线的通信设备测试诊断系统
随着科学技术尤其电子技术的迅速发展,通信设备功能越来越强大,种类越来越繁多,对通信设备的维修测试提出了更高的要求。通信设备传统的维修主要采用分立测试仪器的方式来进行,如果实现多种通信设备的维修测试,往往需要很多分立的专用测试测量仪器,维护保障方式效率低,测试覆盖率、故障隔离率较低。适应通信设备的发展趋势,结合测试诊断领域的新技术、新进展,研制通信设备测试诊断系统滞满足各种通信设备的系统级和电路板级的测试和故障诊断,提高警惕测试覆盖率、故障诊断隔离率和维修保障效率,从而提高通信设备的维修保障能力,已成为通信设备维修保障的重要发展方向。 VXI总线接口不仅结构紧凑、标准开放、数据吞吐能力强、模块可重复使用,而且虚拟仪器软件结构(VI
[测试测量]
VXI总线专用中频信号源的设计
摘要:介绍了VXI总线C尺寸专用中频信号源的设计,重点描述了VXI总线接口电路和用DDS实现的幅度可控的捷变频信号源电路。该模块已成功应用于实际的VXI总线雷达自动测试系统中。 关键词:VXI 信号发生器 DDS FPGA VXI总线系统将计算机技术、测控技术和接口技术等多种高新技术紧密结合起来,具有结构紧凑、数据吞吐能力强、可靠性强等优点,成为自动测试系统的优秀平台。直接数字合成技术(DDS)提供传统频率合成方法难以实现的高分辨率、高频率转换速度及相位的连续性,这使得DDS具有广泛的应用前景。导弹雷达导引头的研制及生产是一个相当复杂和精密的过程。为实现导引头自动测试系统,研制了VXI专用信号源模块。这里采用VXI总线专用接口
[传感技术]
一种实用的VXI总线寄存器及接口电路的设计
VXI(VMEbus eXtention for Instrumentation)总线是一种完全开放的、适用于各仪器生产厂家的模块化仪器背板总线规范。它具有高速数据传输、结构紧凑、配置灵活、电磁兼容性好等优点,已成为高性能测试系统集成的首选总线。VXI总线器件主要分为:寄存器基器件、消息基器件和存储器基器件。目前寄存器基器件在应用中所占比例最大(约70%),其实现方法在遵守VME协议的前提下,根据实际需要各有不同。VXI接口电路用于实现器件的地址寻址、总线仲裁、中断仲裁和数据交换等。设计VXI接口首先需明确寻址空间和数据线宽度,VXI器件寻址有A16/A24、A16/A32和A16三种。A16/A24寻址支持16M字节空间,A16
[嵌入式]
可以处理6.4Gbps以上数据率的创新型串行总线测试方法
在高端运算(先进的微处理器)和消费电子(图形和游戏芯片组)设备中采用的半导体器件一般通过高速串行总线接口提供高达6.4Gbps的数据率,例如PCI Express 和 HyperTransport。根据2005年的国际半导体发展路线图(ITRS),到2010年,10Gbps以及更高速率的接口将被广泛采用。而业界一些专家预测在10年内,数据率将高达20Gbps,因此一些基本方法必须改变。远端环回是一种极具成本效益的创新技术。通过有效地帮助半导体厂商降低测试成本并缩短新一代半导体的开发周期,远端环回必将加速上述发展趋势。 目前高性能集成电路方面正在发生的架构改变将影响半导体产品的方方面面,包括从设计到终测和封装。这一变化背后的驱动因
[测试测量]
可以处理6.4Gbps以上数据率的创新型串行<font color='red'>总线</font><font color='red'>测试</font>方法
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved