新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于HP-VISA库的VXI总线测试应用编程

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

作者:时间:2013-03-30来源:网络收藏
一、引言
  总线是一种基于模块化概念的标准仪器控制总线技术体系。经过十年来的发展,目前已在自动测试、虚拟仪器及其它相关专业领域内得到了广泛应用。随着这一概念及技术的高速发展,在大型应用系统的设计中,往往会碰到不同厂商仪器模块,不同接口类型等之间的兼容性与互操作性问题。为此,即插即用联盟为模块专门制定了统一的软、硬件标准,并于1996年底开发了一套VISA(VirtualInstrumentSoftwareArchitecture)库。它为用户提供了一套独立且易用的低层I/O库及相应的函数接口,使用户可以方便地开发与仪器、接口类型无关的测试应用。目前,VXI库可以支持的操作系统包括:WIN、WIN95/NT、SUN、HP-UX等。支持的语言及开发环境有:C/C++(VC、BC)、VB、Labview、Labwindows/CVI、HPVEE等。同时,作为一种通用的I/O标准,VISA与仪器、接口类型无关的特性,也为开发人员提供了方便,并大大缩短了开发周期。
  本文将结合HPVISA1.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机甚至打印机等)通讯之前,都必须首先与之建立一个会话。通讯结束后,应关闭这一会话。
  最先建立的应是由资源管理器之间的会话,它管理所有的资源,并成为其后打开的所有会话的“文”会话。这由以下函数调用完成:
   ViOpenDefaultRM(sesn);
  sesn是一个ViSession类型的变量指针,所指的值为资源管理会话句柄。
  接下来,为每一个需要与之通信的设备建立一个会话:ViOpen(sesn,rsrc-name,accessmode,timeout,Vi);rsrcname为设备地址,Vi指向设备会话句柄。
  设备地址为标识某一设备的字串,通常由VISA接口类型标识及设备的逻辑地址两部分组成。具体内容可参见下表:


接口类型设备地址示例
VXIVXIO::24
GPIB-VXIGPIB-VXI::128
GPIBGPIBO::7::0
ASRLASRL::INSTR

  在与设备通讯结束后,应调用ViClose(Vi)函数关闭会话。这样可以释放会话所占用的数据结构资源。
  最后,应关闭资源管理会话。
  3.资源
  如前所述,资源管理会话负责管理所有的资源。可以通过它来查询指定资源及与其相关的会话。
  ViFindRsrc函数:对某一接口查询指定的设备资源,并返回匹配项。
  ViFindNext函数:与ViFindRsrc配对使用,用于对有多个匹配项的列表。
  4.I/O命令
  一旦与设备的会话建立之后,就可以利用VISA库中的I/O函数与设备进行通讯,VISA库中提供了两类I/O方式。
  ①格式化I/O
  提供了一种类似于ANSI-C语言Stdio中格式化输入输出方式的操作能力。包括:
  ViPrintf函数:将格式化的数据写入设备。
  ViVprintf函数:与ViPrintf函数功能类似。
  ViScanf函数:从设备中读出数据并按照给定的格式转换。
  ViQueryf函数:向设备写入一个格式化后的数据串,并接受及转换响应数据。
  其它ViVscanf及ViVQueryf函数分别与ViScanf及ViQueryf函数功能类似。
  数据的格式是由一个格式字串确定的,具体格式与ANSI-C语言相同。
  ②无格式I/O
  无格式I/O直接发送或接收原始数据,不经过格式转换过程。它所执行的是一种低层的I/O操作,因此在对同一个会话的I/O中,不能混用格式化I/O与无格式I/O两种方式。
  ViRead函数:从设备读出数据并存放于缓冲区;
  ViWrite函数:将缓冲区中数据写入设备。
  这两个函数执行的是同步操作方式,另外:
  ViReadAsync函数:功能与ViRead相似,只是以异步方式读数据,即在读操作结束之前就可以返回。函数返回一个jobId用以标识尚未完成的操作。可以利用ViTerminate函数强制结束它,或直到操作完成。
  ViWriteAsync函数与此类似。

c++相关文章:c++教程



上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭