📄 3.虚拟仪器系统io接口软件.txt
字号:
发信人: ilyfe (伊犁*飞), 信区: LabVIEW
标 题: 第三章 虚拟仪器系统I/O接口软件
发信站: 饮水思源 (2003年05月04日13:17:43 星期天), 站内信件
第三章 虚拟仪器系统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产品中作出最佳选择,系统的兼容性与强健性
大大增强了,系统的标准化与统一性也找到了最基础的保障。
3.1.4 VISA应用实例
下面通过分别调用非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 用VISA I/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.2 VISA资源描述
3.2.1 VISA资源类与资源
自底向上的VISA模型内部是由面向对象程序(OOP)软件模块构成的。在VISA中,
最基本的软件模块是定义在资源类上的资源。
VISA的资源类概念类似于面向对象程序设计方法中类的概念。类是一个实例外观和
行为的描述。类通过构造函数来建立新的实例,因为不管怎样,先得建立一个实例
才能使用它、操作它。当向类提出要建立一个实例的要求时,它会通过一个特定的
构造函数创建并初始化一个新的实例。然而,类并不对销毁一个实例负责,这就要
求实例要自己负责,它们通过调用一个方法来申请自我的销毁。类的声明定义了类
的实例结构以及一组可以由该实例执行的有效操作。VISA资源类是一种抽象化的器
件特点功能描述,是对资源精确描述的专用术语。
VISA的资源概念类似于面向对象程序设计方法中对象的概念。对象实例不仅包含数
据实体,而且是一个服务提供者。做为一个数据实体,一个对象很象一个记录,由
一些相同或不同类型的域构成。这些域的整体被称为一个对象的状态。改变这些域
的值,逻辑上讲就是改变一个对象的状态。作为服务提供者,或者说是一个过程实
体,一个对象是一些在其域上进行操作的方法或子程序的集合。从这个角度看来,
它有点象一个子例程库。方法定义了对象的行为,激活一个对象方法的实际结果就
是让对象做一个动作。这两种互相补充的角色使对象这种概念变得非常强大。使用
对象,可以使抽象非常方便:一个对象的内部可以看成一个“黑匣子”,只能通过
精心设计的由方法组成的接口来访问。对象的可见部分成为它的协议。
VISA中资源与OOP对象一样,也由三个要素组成:属性集、事件集与操作集。以读
资源为例,其属性集包括结束字符串、超时值及协议等,事件集包括用户退出事件
,操作集包括各种端口读取操作。
3.2.2 VISA资源描述格式
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资源管理器资源 VRM VI_RSRC_VISA_RM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -