logo资料库

VISA汇总,编程,各种操作.doc

第1页 / 共86页
第2页 / 共86页
第3页 / 共86页
第4页 / 共86页
第5页 / 共86页
第6页 / 共86页
第7页 / 共86页
第8页 / 共86页
资料共86页,剩余部分请下载后查看
虚拟仪器系统I/O接口软件——VISA
VISA操作表
读资源
写资源
VISA资源定义
VISA应用实例
虚拟仪器系统 I/O 接口软件——VISA................2 VISA 操作表...........................................................5 读资源....................................................................8 写资源..................................................................39 VISA 资源定义.....................................................45 VISA 应用实例.....................................................74 续..........................................................................84
虚拟仪器系统 I/O 接口软件——VISA VISA 是虚拟仪器系统的 I/O 接口软件,为虚拟仪器系统的统一性和扩展性奠定 了基础。本章介绍了 VISA 的概念和特点,论述了 VISA 的结构模型,重点分析了 VISA 资源与资源类的定义与描述,并结合实例,详细讨论了各资源的属性、事 件与操作规范与软件实现。在本章结束,还讨论了 VISA 的实际设计思路与方法。 3.1 VISA 的概念与特点 3.1.1 VISA 的由来 随着虚拟仪器系统的出现与发展,I/O 接口软件作为虚拟仪器系统软件结构中承 上启下的一层,其模型化与标准化越来越重要。I/O 接口软件驻留于虚拟仪器系 统的系统管理器——计算机系统中,是实现计算机系统与仪器之间命令与数据传 输的桥梁和纽带。许多仪器生产厂家在推出硬件接口电路的同时,也纷纷推出了 不同结构的 I/O 接口软件,有的只针对某类仪器(如 NI 公司用于控制 GPIB 仪器 的 NI-488 及用于控制 VXI 仪器的 NI-VXI),有的在向统一化的方向靠拢(如 HP 公司的 SICL—标准仪器控制语言),这些都是在仪器生产厂家内部通用的、优 秀的 I/O 接口软件。 一般的 I/O 接口软件的结构都采用了自顶向下的设计模型:首先列出该 I/O 接口 软件需要控制的所有仪器类型,然后列出了各类仪器的所有控制功能,最后将各 类仪器控制功能中相同的操作功能尽可能地以统一的形式进行合并,并将统一的 功能函数称为核心功能函数(如将 GPIB 仪器的读/写与 RS232 串行仪器的读/写 统一为一个核心功能函数)。所有统一形式的核心函数与其它无法合并的、与仪 器类型相关的操作功能函数一起构成了自顶向下的 I/O 接口软件,实现不同类型 的仪器的互操作性与兼容性。然而,这种构成方法只适用于消息基器件的互操作 性(如消息读、消息写、软件触发、状态获取、异步事件处理等功能),对于如 中断处理、内存映射、接口配置、硬件触发等属于器件特有的操作,根本无法得 到统一的核心函数,消息基器件与寄存器基器件无法在自顶向下的 I/O 接口软件 中得到统一。核心函数集在整个 I/O 接口软件中只有一个小子集,特定操作函数 集是一个大子集。自顶向下结构的 I/O 接口软件实质上是建立在仪器类型层的叠 加,并没有真正实现接口软件的统一性。同时应该说,自顶向下的设计方法为真 正统一的 I/O 接口软件的设计与实现提供了经验借鉴与尝试。VPP 联盟在考察了 多个 I/O 接口软件之后,提出了一种自底向上的 I/O 接口软件模型,也就是 VISA。 3.1.2 VISA 模型结构 VISA 是虚拟仪器软件结构(Virtual Instrument Software Architecture)的 缩写,实质是一个 I/O 接口软件及其规范的总称。一般情况下,将这个 I/O 接口 软件称为 VISA。 如上所说,VISA 的构成是采用了自底向上的结构。与自顶向下的方法不同的是, VISA 的实现首先定义了管理所有资源的资源(在这儿,资源的概念相当于面向 对象程序设计中的对象,具体的定义与描述见下节),这个资源称为 VISA 资源 管理器,它用于管理、控制与分配 VISA 资源的操作功能。各种操作功能主要包
括: 1、 资源寻址; 2、 资源创建与删除; 3、 资源属性的读取与修改; 4、 操作激活; 5、 事件报告; 6、 并行与存取控制; 7、 缺省值设置。 第二步是在资源管理器基础上,列出了各种仪器各自的操作功能,并实现操作功 能的合并。在这个基础上实现的资源实质可以包括不同格式的操作,如读资源包 括了消息基器件的读,也包括了寄存器基器件的读;既可以包括同步读操作,又 可以包括异步读操作。每一个资源内部,实质是各种操作的集合。这种资源在 VISA 中即为仪器控制资源,包含各种仪器操作的资源称为通用资源,而将无法 合并的功能,称为特定仪器资源。 第三步,需要定义与创建一个用 API 实现的资源,为用户提供单一的控制所有 VISA 仪器控制资源的方法,在 VISA 中称为仪器控制资源组织器。 与自顶向下的构成方式相比,VISA 的构成模型是从仪器操作本身开始的,它实 现的统一是深入到操作功能中去而不是停留于仪器类型之上。在 VISA 的结构中, 仪器类型的区别体现到统一格式的资源中的操作的选取,对于 VISA 使用者来说, 形式上与用法上是单一的。在理论层次上,自顶向下的方法属于归纳范畴,而自 底向上的方法则属于演绎范畴。因此,自顶向下是对过去所有仪器类型的总结, 而不可能提供扩展接口,而自底向上的结构是从共性到个性的推广,它的兼容性 不仅仅是过去、现在,还可以包括将来。正由于这种自底向上的设计方法,VISA 为虚拟仪器系统软件结构提供了一个共同的、统一的基础,来自于不同供应厂家 的不同的仪器软件,可以运行于同一平台之上了。 VISA 的结构模型如图 3.1 所示。 图 3.1 VISA 结构模型概图 VISA 结构模型自下往上,构成一个金字塔结构,最底层为资源管理器,其上为 I/O 级资源、仪器级资源与用户自定义资源集。其中,用户自定义资源集的定义, 在 VISA 规范中并没有规定,它是 VISA 的可变层,实现了 VISA 的可扩展性与灵 活性,而在金字塔顶的用户层应用,是用户利用 VISA 资源实现的应用程序,其
本身并不属于 VISA 资源。 3.1.3 VISA 的特点 基于自底向上结构模型的 VISA 创造了一个统一形式的 I/O 控制函数集,它是所 有现存的 I/O 接口软件的功能超集,在形式上与其它 I/O 接口软件十分相似。一 方面,对于初学者或是简单任务的设计者来说,VISA 提供了简单易用的控制函 数集,在应用形式上相当简单。另一方面,对于复杂系统的组建者来说,VISA 提供了非常强大的仪器控制功能与资源管理功能,能提供仪器间的互操作性与兼 容性。它是易用性、可扩展性、互操作性、兼容性的完全统一体。 与其它现存的 I/O 接口软件相比,VISA 具有以下几个特点: 1、 VISA 的 I/O 控制功能适用于各种仪器类型,VISA 包含了 VXI 仪器、GPIB 仪 器、RS232 串行接口仪器等各类仪器的控制操作,也包含了消息基器件、寄存器 基器件、存贮器件等仪器的操作,其形式上是统一的。 2、 VISA 的 I/O 控制功能适用于各种仪器硬件接口类型,以 VXI 仪器系统为例, 无论采用嵌入式计算机结构、GPIB 接口外挂式结构、MXI 接口外挂式结构,还是 采用 IEEE1394 接口外挂式结构,对于 VXI 仪器的操作函数是一样的。同样,无 论 VXI 仪器在系统中的逻辑地址是多少,仪器操作函数也是一样的。 3、 VISA 的 I/O 控制功能适用于单处理器系统结构,也适用于多处理器结构或 分布式网络结构。 4、 VISA 的 I/O 控制功能适用于多种网络机制,无论虚拟仪器系统网络构成为 VXI 多机箱扩展网络还是以太网,仪器操作是一致的。 5、 VISA 的 I/O 软件库的源代码是唯一的,其与操作系统及编程语言无关,只 是提供了不同形式的 API 文件作为系统的引出。 由于 VISA 结构考虑到了多种仪器类型与网络机制的兼容性,因此以 VISA I/O 接口软件为基础的虚拟仪器系统,不仅可以与过去已有的仪器系统(如 GPIB 仪 器系统及串行接口仪器系统)结合,也完全可以将仪器系统从过去的集中式结构 过渡到分布式结构。VISA 的兼容性与互操作性,保证了新一代仪器完全可以加 入到虚拟仪器系统中去,同时也保证了仪器系统的投资者不会因为新仪器的出现 而将过去的系统抛弃,从而可以不使投资浪费。系统集成时,不必再选择某家特 殊的软件和硬件产品,可以根据自己的需要,在所有的 VPP 产品中作出最佳选择, 系统的兼容性与强健性大大增强了,系统的标准化与统一性也找到了最基础的保 障。
VISA 操作表 操作表: 1、VISA 资源模板: viClose(vi):关闭特定的对话通道。 viGetAttribute(vi,attribute,attrState):获取资源属性状态值。 viSetAttribute(vi,attribute,attrState):设置资源属性状态值。 viStatusDesc(vi,status,desc):获取返回状态描述字符串。 viTerminate(vi,degree,jobId):请求 VISA 资源终止一个或所有对话通道 的正常运行。 viLock(vi,lockType,timeout,requestId,accessKey):设置资源存取模 式。 viUnlock(vi):取消资源存取模式。 viEnableEvent(vi,eventType,mechanism,context):允许特定事件通知。 viDisableEvent(vi,eventType,mechanism):不允许特定事件通知。 viDiscardEvents(vi,eventType,mechanism):刷新一个对话通道上事件发 生。 viWaitOnEvent(vi,ineventTypeList,timeout,outEventType,outContext): 等待特定事件的发生。 viInstallHandler(vi,eventType,handler,userHandle):安装回调事件句 柄 。 viUnInstallHandler(vi,eventType,handler,userHandle):卸载回调事件 句柄。 2、VISA 资源管理器: viOpenDefaultRM(sesn):打开缺省资源管理器资源对话通道。 viOpen(sesn,rsrcname,accessMode,timeout,vi):打开特定资源的对话 通道。 viFindRsrc(sesn,expr,findList,retcnt,instrDesc):查询 VISA 系统进
行资源定位。 viFindNext(findList,instrDesc):返回前一个查询操作查得的资源。 3、仪器控制管理: viRead(vi,buf,count,retCount):从器件同步读取数据。 viReadAsync(vi,buf,count,jobId):从器件异步读取数据。 viWrite(vi,buf,count,retCount):将数据同步写入到器件中。 viWriteAsync(vi,buf,count,jobId):将数据异步写入到器件中。 viAssertTrigger(vi,protocol):用特定协议确认硬件或软件触发。 viReadSTB(vi,status):读取服务请求状态字节。 viClear(vi):清除器件。 viSetBuf(vi,mask,size):设置格式化 I/O 缓冲区大小。 viFlush(vi,mask):手动刷新格式化 I/O 缓冲区。 viPrintf(vi,writeFmt,arg1,arg2…):按设定格式将数据传送到器件中。 viVPrintf(vi,writeFmt,params):按设定格式将数据传送到器件中。 viScanf(vi,readFmt,arg1,arg2…):按设定格式从器件中读取数据。 viVScanf(vi,readFmt,params):按设定格式从器件中读取数据。 viQuery(vi,writeFmt,readFmt,arg1,arg2…):按设定格式对器件进行数 据读写。 viVQuery(vi,writeFmt,readFmt,params):按设定格式对器件进行数据读 写。 viIn8(vi,space,offset,value):从接口总线读取 8 位(字节)单位。 viIn16(vi,space,offset,value):从接口总线读取 16 位(字)单位数据。 viIn32(vi,space,offset,value):从接口总线读取 32 位(双字)单位数 据。
viOut8(vi,space,offset,value):向接口总线写入 8 位(字节)单位数据。 viOut16(vi,space,offset,value):向接口总线写入 16 位(字)单位数据。 viOut32(vi,space,offset,value):向接口总线写入 32 位(双字)单位数 据。 viMoveIn8(vi,space,offset,length,buf8):从器件存储器向当地存储器 移动 8 位(字节)单位数据。 viMoveIn16(vi,space,offset,length,buf8):从器件存储器向当地存储 器移动 16 位(字)单位数据。 viMoveIn32(vi,space,offset,length,buf8):从器件存储器向当地存储 器移动 32 位(双字)单位数据。 viMoveOut8(vi,space,offset,length,buf8):从当地存储器向器件存储 器移动 8 位(字节)单位数据。 viMoveOut16(vi,space,offset,length,buf8):从当地存储器向器件存储 器移动 16 位(字)单位数据。 viMoveOut32(vi,space,offset,length,buf8):从当地存储器向器件存储 器移动 32 位(双字)单位数据。 viMapAddress(vi,mapSpace,mapBase,mapSize,access,suggested,address): 映射内存空间。 viUnMapAddress(vi):取消内存映射。 viPeek8(vi,addr,val8):从特定地址读 8 位数据。 viPeek16(vi,addr,val16):从特定地址读 16 位数据。 viPeek32(vi,addr,val32):从特定地址读 32 位数据。 viPoke8(vi,addr,val8):向特定地址写 8 位数据。 viPoke16(vi,addr,val16):向特定地址写 16 位数据。 viPoke32(vi,addr,val32):向特定地址写 32 位数据。 viMemAlloc(vi,size,offset):从器件存储器分配内存。 viMemFree(vi,offset):释放内存分配。
读资源 n 读资源(VI_RSRC_RD): 1. 资源概述:控制器从器件读出任意数据块,控制器可以将接收到的数据块解 释为消息、命令或二进制编码数据。 2. 资源属性表及属性描述: 属性名 描述 VI_ATTR_FDC_ACCESS_MODE FDC(高速数据通道)缓冲区存取模式 VI_ATTR_FDC1_AVAIL FDC 版本 1 是否有效 VI_ATTR_FDC2_AVAIL FDC 版本 2 是否有效 VI_ATTR_FDC_CHNL FDC 数据传送通道 VI_ATTR_FDC_GEN_SIGNAL_EN 是否允许通过 FDC 传送数据 VI_ATTR_FDC_MODE FDC 模式 VI_ATTR_FDC_USE_PAIR 一对或一个 FDC 有效 VI_ATTR_FDC_USE_VER FDC 协议版本 VI_ATTR_PHYS_ADDR 器件地址 VI_ATTR_7_8_BIT_CMP 终止符有效位 VI_ATTR_NRDY_ABORT_EN 器件不再输出数据时是否被通知 VI_ATTR_OUTP_RDY_NOTIFY_EN 数据有效是否被通知 VI_ATTR_RD_PROT 传送协议 VI_ATTR_REPEAT_ADDR_EN 是否使用重复地址 VI_ATTR_SUPPRESS_END_ON 终止符是否被禁止 VI_ATTR_TERMCHAR 终止符 VI_ATTR_TERMCHAR_EN 终止符是否被允许 VI_ATTR_TMO_UNIT 超时值单位
分享到:
收藏