visa操作表doc.docx
《visa操作表doc.docx》由会员分享,可在线阅读,更多相关《visa操作表doc.docx(100页珍藏版)》请在冰豆网上搜索。
visa操作表doc
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):
释放内存分配。
第三章虚拟仪器系统I/O接口软件——VISA
(1)
XLPE项目相关2007-12-0617:
01:
53阅读1019评论0 字号:
大中小 订阅
发信站:
饮水思源(2003年05月04日13:
17:
43星期天),站内信件
第三章虚拟仪器系统I/O接口软件——VISA
VISA是虚拟仪器系统的I/O接口软件,为虚拟仪器系统的统一性和扩展性奠定了基础。
本章介绍了VISA的概念和特点,论述了VISA的结构模型,重点分析了VISA资源与资源类的定义与描述,并结合实例,详细讨论了各资源的属性、事件与操作规范与软件实现。
在本章结束,还讨论了VISA的实际设计思路与方法。
3.1VISA的概念与特点
3.1.1VISA的由来
随着虚拟仪器系统的出现与发展,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.2VISA模型结构
VISA是虚拟仪器软件结构(VirtualInstrumentSoftwareArchitecture)的缩写,实质是一个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.1VISA结构模型概图
VISA结构模型自下往上,构成一个金字塔结构,最底层为资源管理器,其上为I/O级资源、仪器级资源与用户自定义资源集。
其中,用户自定义资源集的定义,在VISA规范中并没有规定,它是VISA的可变层,实现了VISA的可扩展性与灵活性,而在金字塔顶的用户层应用,是用户利用VISA资源实现的应用程序,其本身并不属于VISA资源。
3.1.3VISA的特点
基于自底向上结构模型的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结构考虑到了多种仪器类型与网络机制的兼容性,因此以VISAI/O接口软件为基础的虚拟仪器系统,不仅可以与过去已有的仪器系统(如GPIB仪器系统及串行接口仪器系统)结合,也完全可以将仪器系统从过去的集中式结构过渡到分布式结构。
VISA的兼容性与互操作性,保证了新一代仪器完全可以加入到虚拟仪器系统中去,同时也保证了仪器系统的投资者不会因为新仪器的出现而将过去的系统抛弃,从而可以不使投资浪费。
系统集成时,不必再选择某家特殊的软件和硬件产品,可以根据自己的需要,在所有的VPP产品中作出最佳选择,系统的兼容性与强健性大大增强了,系统的标准化与统一性也找到了最基础的保障。
3.1.4VISA应用实例
下面通过分别调用非VISA的I/O接口软件与VISA函数,对GPIB器件与VXI消息基器件进行简单的读/写操作(主要完成向器件发送查询器件标识符命令,并从器件读回响应值操作过程),进行VISA与其它I/O接口软件的异同点比较。
所有例子中采用的编程语言均为C语言。
例3.1用非VISA的I/O接口软件(NI公司的NI-488)实现对GPIB器件的读/写操作:
程序说明:
1、声明区:
声明程序中所有变量的数据类型,用C语言数据类型声明。
2、开启区:
进行GPIB器件初始化,确定GPIB器件地址,并为每个器件返回一个对应的器件句柄。
在初始化过程中,器件句柄作为器件的标志以输出参数形式被返回,在其它的I/O功能函数中,器件句柄则作为函数的输入参数,以标志特定的GPIB器件。
3、器件I/O区:
在本例程中,器件I/O主要完成命令发送,并从GPIB器件中读回响应数据。
主要完成向器件发送查询器件标识符命令,用标准命令符“*IDN?
”,并从器件读回响应值,即器件的标识符。
在NI-488函数集中,分别用ibwrt函数与ibrd函数进行器件写操作与读操作。
4、关闭区:
GPIB的I/O软件将本身的数据结构存于内存中,当系统关闭时,所有仪器全部自动关闭,无需对I/O软件本身作关闭操作。
也就是说,GPIB的I/O软件(如NI-488)无关闭机制。
例3.1用NI-488实现对GPIB仪器的读/写操作
例3.2用非VISA的I/O接口软件(NI公司的NI-VXI)实现对VXI消息基器件的读/写操作:
例3.2用NI-VXI实现对GPIB器件的读/写操作程序说明:
1、声明区:
声明程序中所有变量的数据类型,用C语言数据类型声明。
2、开启区:
进行VXI消息基器件初始化,确定VXI消息基器件的逻辑地址。
在对VXI器件操作中,逻辑地址取代了GPIB器件操作中的器件句柄,作为器件操作的标志,在初始化操作中返回唯一的值。
3、器件I/O区:
在本例程中,主要完成对命令发送,并从VXI消息基器件读回响应数据。
同样完成向器件发送查询器件标识符命令,用标准命令符“*IDN?
”,并从器件读回响应值,即器件的标识符。
由初始化得到的器件逻辑地址在器件I/O操作中作为函数的输入参数被使用。
程序通过对逻辑地址的处理,完成对器件的一对一操作。
在VXI消息基器件的操作中,分别用WSwrt函数与WSrd函数进行器件的写操作与读操作,其中这两个函数中的mode参数均表示数据传输方式,retCount参数表示实际传送的字节数。
4、关闭区:
对于VXI器件,存在着一个关闭机制,要求在结束器件操作的时候,同时关闭I/O接口软件。
例3.3用VISAI/O接口软件实现对GPIB器件与VXI消息基器件的读/写操作:
例3.3用VISA实现对GPIB器件与VXI消息基器件的读/写操作
程序说明:
1、声明区:
声明程序中所有变量的数据类型。
与以上两例不同的是,在这儿声明的数据类型均为VISA数据类型,其是与编程语言无关的。
而VISA数据类型与编程语言数据类型的对应说明,均包含在特定文件中。
如VISA数据类型的C语言形式的包含头文件为本章附录文件visatype.h和visa.h。
由于程序中没有涉及到具体某种语言的数据类型,故程序本身具有良好的兼容性与可移植性,各种编程语言调用VISA的数据类型与操作函数的参数调用格式相差甚少。
2、开启区:
进行消息基器件初始化,建立资源管理器及器件与VISA的通信关系。
对所有器件进行初始化均调用viOpenDefaultRM()与viOpen()函数。
在此例中,对于GPIB器件的初始化与对于VXI器件的初始化的函数调用形式是一致的,只是输入参数中器件描述符的值区别。
在调用viOpen()函数时,器件硬件接口形式(计算机结构形式)是无需特别说明的,该初始化过程完全适用于各种器件硬件接口类型。
初始化过程中返回的vi参数,类似于器件句柄,可作为器件操作的标志与数据传递的中介。
3、器件I/O区:
在本例程中,主要完成对器件发送命令,并从器件读回响应数据。
对于GPIB的读/写操作与对于VXI消息基器件的读/写操作,调用的VISA函数是一样的。
其中vi是操作函数的输入参数。
4、关闭区:
在器件操作结束时,调用viClose()函数,关闭器件及资源管理器与VISA的关联。
通过以上三个例程的分析,可以发现两个事实:
第一、VISA函数的调用与其它接口软件函数的调用形式上并无太多不同,学习功能强大的VISA软件并不比一般的I/O接口软件任务重。
而且VISA的函数参数意义明确,结构一致,在理解与应用仪器程序时,效率较高。
第二、VISA用户只需学习了VISA函数应用格式,就可以对多种仪器实现统一控制,不必再象以前学会了用NI-488对GPIB器件操作之后,还得学会NI-VXI对VXI器件进行操作。
与其它的I/O接口软件相比,VISA体现的多种结构与类型的统一性,使不同仪器软件可以运行在同一平台上,为虚拟仪器系统软件结构提供了坚实的基础。
3.2VISA资源描述
3.2.1VISA资源类与资源
自底向上的VISA模型内部是由面向对象程序(OOP)软件模块构成的。
在VISA中,最基本的软件模块是定义在资源类上的资源。
VISA的资源类概念类似于面向对象程序设计方法中类的概念。
类是一个实例外观和行为的描述。
类通过构造函数来建立新的实例,因为不管怎样,先得建立一个实例才能使用它、操作它。
当向类提出要建立一个实例的要求时,它会通过一个特定的构造函数创建并初始化一个新的实例。
然而,类并不对销毁一个实例负责,这就要求实例要自己负责,它们通过调用一个方法来申请自我的销毁。
类的声明定义了类的实例结构以及一组可以由该实例执行的有效操作。
VISA资源类是一种抽象化的器件特点功能描述,是对资源精确描述的专用术语。
VISA的资源概念类似于面向对象程序设计方法中对象的概念。
对象实例不仅包含数据实体,而且是一个服务提供者。
做为一个数据实体,一个对象很象一个记录,由一些相同或不同类型的域构成。
这些域的整体被称为一个对象的状态。
改变这些域的值,逻辑上讲就是改变一个对象的状态。
作为服务提供者,或者说是一个过程实体,一个对象是一些在其域上进行操作的方法或子程序的集合。
从这个角度看来,它有点象一个子例程库。
方法定义了对象的行为,激活一个对象方法的实际结果就是让对象做一个动作。
这两种互相补充的角色使对象这种概念变得非常强大。
使用对象,可以使抽象非常方便:
一个对象的内部可以看成一个“黑匣子”,只能通过精心设计的由方法组成的接口来访问。
对象的可见部分成为它的协议。
VISA中资源与OOP对象一样,也由三个要素组成:
属性集、事件集与操作集。
以读资源为例,其属性集包括结束字符串、超时值及协议等,事件集包括用户退出事件,操作集包括各种端口读取操作。
3.2.2VISA资源描述格式
VISA资源是独立于编程语言与操作系统的,在VISA本身的资源定义与描述中并不包含任何操作系统或编程语言相关的限制。
VISA源代码是唯一的,只为不同的操作系统编程语言提供了不同的API接口。
VISA资源类共分为五大类:
VISA资源模板、VISA资源管理器、VISA仪器控制资源、VISA仪器控制组织器、VISA特定接口仪器控制资源。
在每一类中定义与描述的VISA资源都遵循同样的格式。
VISA资源描述格式
如表3.1所示。
VISA资源描述格式是一种抽象定义,与具体编程语言无关,资源内所有元件的定义也均与编程语言无关。
VISA通过提供不同的API接口,适用于不同的操作系统与编程环境。
在不同的编程语言环境之中调用VISA,均需在应用程序头部引入说明文件。
在C语言环境下,VISA资源说明文件为visatype.h和visa.h文件(详见本章附录)。
唯一的VISA源程序通过不同的引入接口与文件说明,实现了不同环境下的适用性。
VISA资源描述格式不仅适用于现在VISA包含的所有资源,也为VISA将来资源扩充定义了一个标准格式。
现定义的VISA资源类型定义如表3.2所示。
X.1资源概述
X.2资源属性表及属性描述
X.3资源事件集
X.4资源操作集
所含每个操作包括:
X.4.Y 名字(含形参名)
X.4.Y.1目标
X.4.Y.2参数表
X.4.Y.3返回状态值
X.4.Y.4描述
X.4.Y.5相关操作项
X.4.Y.6实现要求
表3.1 VISA资源描述格式
资源 缩写名 标准名
VISA资源管理器资源 VRMVI_RSRC_VISA_RM
VISA仪器控制组织器资源 VICO VI_RSRC_VISA_IC_ORG
写资源 WR VI_RSRC_WR
读资源 RD VI_RSRC_RD
格式化I/O资源 FIOVI_RSRC_FMT_IO
触发资源 TRIG VI_RSRC_TRIG
清除资源 CLRVI_RSRC_CLR
状态/服务请求资源 SRQVI_RSRC_SRQ
高级存取资源 HILA VI_RSRC_HL_ACC
低级存取资源 LOLA VI_RSRC_LL_ACC
器件特定命令资源 DEVC VI_RSRC_DEV_CMD
CPU接口资源CPUI VI_RSRC_CPU_INTF
GPIB总线接口控制资源 G