⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4.虚拟仪器驱动程序.txt

📁 虚拟仪器软件的介绍
💻 TXT
📖 第 1 页 / 共 5 页
字号:
发信人: ilyfe (伊犁*飞), 信区: LabVIEW
标  题: 第四章 虚拟仪器驱动程序
发信站: 饮水思源 (2003年05月04日13:18:43 星期天), 站内信件

第四章 虚拟仪器驱动程序
在仪器系统的设计中,仪器驱动程序的设计一向是最费时间与精力的工作,而对于
用户来说,仪器驱动程序又如一个神秘的“黑匣子”,浑然不知其内部所含何物,
一切只能靠开发商决定。VPP规范的提出,要求仪器模块生产厂家在提供硬件模块
的同时,必须提供仪器驱动程序的各种文件形式,一方面给仪器驱动程序的编写提
出了一个标准化的规范,另一方面又给仪器用户提供了更多的权限与参与性,进一
步扩展了仪器的使用性。本章主要介绍了符合VPP规范的虚拟仪器驱动程序的特点
,分别了其内部设计模型与外部接口模型的设计规范,并结合多个实际开发例程,
探讨了虚拟仪器驱动程序的设计方法与实现步骤。在该章中,还介绍了虚拟仪器功
能面板文件的结构与应用。

4.1 虚拟仪器驱动程序的特点
4.1.1 虚拟仪器驱动程序的由来
在自动测试系统中,仪器的编程任务总是最头痛的事,许多用户认为这通常是开发
一个仪器系统中最费时费力的部分。用户需要花费不少宝贵的时间学习系统中每台
仪器的特定编程要求,包括所有公布在用户手册上的仪器操作命令集,也包括一些
未公布的仪器特性。由于系统中的仪器可能由各个仪器供应厂家提供,完成仪器系
统集成的设计人员,需要学习所有集成到系统中的仪器用户手册,并根据自己的需
要一个个命令地加以编程调试。所有的仪器编程任务既需要完成低层的仪器I/O操
作,又需要完成高层的仪器交互能力,每个仪器的编程由于编程人员的风格与爱好
不一样而可能各具特色。对于系统集成设计人员,不仅应是一个仪器专家,也应是
一个编程专家,这大大增加了系统集成人员的负担,使系统集成的效率和质量无法
得到保证。由于未来的系统中将使用不少相同的仪器,因此,仪器用户总是设计将
仪器编程结构化、模块化以使控制特定仪器的程序能重复使用。因此一方面,对仪
器编程语言提出了标准化的要求;另一方面,需要定义一层具有模块化、独立性的
仪器操作程序,也即具有相对独立性的仪器驱动程序。
以GPIB仪器为代表的机架层迭式仪器结构,既能实现本地控制,又可实现远程控制
。IEEE488.1和IEEE488.2规范的制定,对GPIB仪器的用语法及数据结构连接的消息
通信功能层和用命令及询问连接的公共系统功能层作了标准化规定。在此基础上,
仪器制造商国际协会于1990年提出了可编程仪器标准命令(SCPI),它是一个超出
IEEE488之外的仪器命令语言,它支持同类仪器间语言的一致性。SCPI与过去的仪
器语言不同点在于命令描述的是正在试图被测量的信号,而不是正在用以测量信号
的仪器。人们可花费较多的时间来学习解决实际应用问题,用较少的时间来学习所
使用的仪器,这是因为相同的SCPI命令可用于很多不同类型的仪器,这叫做“横向
兼容性”(即不同产品类型之间的兼容性)。SCPI还是可扩展的,这就使它能随着
仪器功能的增加而扩大。这样在将来人们可以购买一台比目前所用仪器功能更多的
万用表,其基本功能完全可以象以前使用的旧仪器一样程控,这就是“纵向兼容性
”(即产品各代之间的兼容性)。
SCPI语言由三部分组成:第一部分为“语法和式样”,描述实际语言的应用以及发
展维护的基本原理;第二部分为“命令结构”,描述了在仪器中出现的实际语言的
构造;第三部分为“数据交换格式”,描述了在仪器与应用之间、应用与应用之间
或仪器与仪器之间可以使用的数据集的标准表示方法。SCPI的一致性使测试软件的
开发容易而且迅速。程序员可以学会一种语言,而不需对每种不同仪器各学一种仪
器命令语言,这就使编程更快、更容易,从而节省大量集成成本。
另一方面,随着虚拟仪器的出现,软件在仪器中的地位越来越重要,将仪器的编程
留给用户的传统方法也越来越与仪器的标准化、模块化的趋势不相符。I/O接口软
件作为一层独立软件的出现,也使仪器编程任务易以划分。人们将处理与某一特定
仪器进行控制和通讯的一层较抽象的软件定义为仪器驱动程序。仪器驱动程序是基
于I/O接口软件之上,并与应用程序进行通讯的中间纽带。仪器驱动程序对于一台
仪器来说,成为了一个与显示适配器、磁盘驱动器一样的独立模块,可以明确地定
义与编写。仪器驱动程序一般由供应厂家来提供,对于用户来说往往只得到了一个
神秘的“黑匣子”,只知道仪器驱动程序提供的可执行可调用的功能函数,而不知
道仪器驱动程序本身是如何编写的,这成为了供应厂家的“秘密”,用户在仪器面
前是被动的,仪器功能全部由仪器供应厂家来定义与提供,用户只有选择的权利而
不能作相应的修改。同时,市场上也出现了仪器驱动程序的专业开发人员,他们用
编程语言(BASIC、C、PASCAL等)为仪器开发驱动程序,作为第三方制成的程序库
提供给用户。这种仪器驱动程序主要考虑的是仪器的通性,对于仪器的特性往往考
虑得不完整,其可靠性与质量是不能符合具体用户要求的。显然,作为独立模块的
仪器驱动程序的设计,也迫切需要一个标准。
VXI仪器的出现,为仪器驱动程序的发展带来了新契机。对于VXI仪器来说,没有软
件也就不存在着仪器本身。而且,VXI仪器类型既有与GPIB器件相似的消息基器件
,也有需要实现低层寄存器操作的寄存器基器件。与消息基器件的类似性不同的是
,每个寄存器基器件都有特定的寄存器分配,每个寄存器基器件之间的差异是很明
显的,显然,用SCPI语言格式对VXI寄存器基器件进行操作是无法实现的。同时,
由于VXI器件中特有的FDC(高速数据通道)、共享内存、分布式结构特性,VXI仪
器驱动程序的设计比GPIB仪器显然要复杂得多。
需要指出的是,强调仪器驱动程序作为独立一层存在于虚拟仪器系统软件结构中,
是基于层次化与扩展性的考虑。在一些特定情况下,应用程序跳过仪器驱动程序直
接调用I/O接口软件函数也可能存在,这种方法看似直接,其实破坏了软件的整体
性与层次感,对于系统软件的维护带来了负面影响,因此正常情况下不宜使用。

4.1.2 虚拟仪器驱动程序的特点
VXI即插即用规范规定,虚拟仪器驱动程序是一个完整的软件模块,并由仪器模块
生产厂家在提供仪器硬件模块的同时提供给用户。符合VPP规范的虚拟程序具有以
下特点:
1、 虚拟仪器驱动程序由仪器生产厂家提供(而非特定的第三方开发机构),可以
提供给用户的是仪器所有的功能,包括通用功能与特定功能。不仅可以提高仪器驱
动程序的质量,也可以大大减轻仪器用户的负担。
2、 所有虚拟仪器驱动程序都必须提供程序源代码,而不是只提供给可调用的函数
。用户可以通过阅读与理解仪器驱动程序源代码,根据自己的需要来修改与优化驱
动程序。在这种情况下,用户是主动的,仪器功能并不由仪器生产厂家所完全限定
,仪器具有功能扩展性与修正性,可以方便地将仪器集成到系统中去,也可以方便
地实现虚拟仪器系统的优化。
3、 虚拟仪器驱动程序的结构是模块化与层次化的,它并不是在I/O级的低层操作
,而是较抽象的仪器测试与控制。仪器驱动程序的功能调用是多层次的,既有简单
的操作,又有仪器的复合功能。所有仪器程序的设计都遵循外部接口模型与内部设
计模型的双重结构。
4、 同类虚拟仪器驱动程序的设计与实现形式是一致的,包括其错误处理方法、帮
助消息的提供、相关文档的提供以及所有修正机制都是统一的。用户在理解了一个
仪器驱动程序之后,可以利用仪器驱动程序的一致性,方便而有效地理解另一个仪
器驱动程序,并也可以在一个仪器驱动程序的基础上,进行适当地修改,为新的仪
器模型开发出一个符合VPP规范的仪器驱动程序。统一的仪器驱动程序设计方法有
利于仪器驱动程序开发人员提高开发效率,并最大程度地减少开发重复性。
5、 VPP规范对于虚拟仪器驱动程序的要求,不仅适用于VXI仪器,也同样适用于
GPIB仪器、串行接口仪器的驱动程序的开发。同样,VPP规范也不仅适用于消息基
器件驱动程序的开发,也适用于寄存器基器件驱动程序的开发。在虚拟仪器系统中
,所有类型的虚拟仪器都具有同样结构与形式的仪器驱动程序,可以大大提高仪器
系统的集成与调试效率,并有利于虚拟仪器系统的维护与发展,系统集成人员可以
将精力完全集中到系统的设计与组建上,而不象过去浪费太多的时间与精力在具体
的仪器编程细节上,系统集成的效率与可靠性也大大得以增强。
在VPP系统中,一个完整的仪器定义不仅包括仪器硬件模块本身,也包括了仪器驱
动程序、软面板以及其它相关文档。实现仪器驱动程序的标准化与规范化,是实现
标准化的虚拟仪器系统的基础与关键,也是实现虚拟仪器系统开放性与互操作性的
保证。

4.2 虚拟仪器驱动程序的结构模型
4.2.1 虚拟仪器驱动程序的外部接口模型
VPP规范中对于虚拟仪器驱动程序的标准是为开发者和最终用户共同颁布的。它规
定了仪器驱动程序开发者编写驱动程序的规范与要求,为最终用户保证了仪器驱动
程序的质量和兼容性。相互兼容的方法促进了多个生产厂家仪器驱动程序的共同使
用,增强了系统级开放性和多个生产厂家产品的互换性。为此,VPP规范提出了两
个基本结构模型,虚拟仪器驱动程序的设计都是围绕着这两个模型而展开的。第一
个模型是仪器驱动程序的外部接口模型,它表示了仪器驱动程序如何与系统中外部
其它软件模块接口,图4.1所示为仪器驱动程序外部接口模型图。
图4.1 虚拟仪器驱动程序外部接口模型
从图中得知,仪器驱动程序外部接口模型共分为五个部分:
1、 功能体:它是仪器驱动程序的实际源代码,是程序主体。功能体内部结构将在
仪器驱动程序的第二个模型(内部设计模型)中作详细描述。在VPP规范中,定义
了两种源代码形式,一种为语言代码形式,主要是C语言形式;另一种是在图形化
开发环境下采用的图形化语言(G语言)形式。
2、 应用程序开发者接口:它描述了从上层应用程序调用仪器驱动程序的机制。对
于不同的应用程序开发环境,仪器驱动程序将提供不同的软件接口,以使应用程序
可以方便地调用仪器驱动程序中定义的所有功能函数。
3、 交互式开发者接口:它帮助软件开发人员理解每个仪器驱动程序函数的功能以
及如何使用应用程序开发者接口调用每个函数,这一接口通常是一个图形化的功能
面板,用户可以在这个图形化接口上管理各种仪器控制,改变每一个功能调用的参
数值。VPP规范要求所有仪器驱动程序,都必须包括相应的功能面板文件(详见下
一节描述)。
4、 子程序接口:它描述了仪器驱动程序调用其它软件模块及其它软件库函数的机
制。
5、 VISA I/O接口:它解决了仪器驱动程序与仪器数据通讯问题。在VPP系统中,
仪器驱动程序通过调用VISA这个统一的I/O接口软件库中的函数,来实现不同类型
的仪器驱动程序在同一软件平台上统一地运行与调试。
虚拟仪器驱动程序外部接口模型的确定,为仪器驱动程序作为一个完整的软件模块
存在于软件结构中奠定了上下层接口基础,并确立了仪器驱动程序在整个软件结构
中的地位与作用。但如何实现仪器驱动程序的内部设计,重点在于虚拟仪器驱动程
序的内部设计模型的描述。

4.2.2 虚拟仪器驱动程序的内部接口模型
第二个模型是仪器驱动程序内部设计模型。它定义了图4.1中仪器驱动程序功能体
内部结构组成。这一模型对于虚拟仪器驱动程序的开发者来说是非常重要的,因为
所有VPP仪器驱动程序的源代码是根据此设计模型来编写的;同样,它对于仪器用
户来说也是非常重要的,一旦用户理解了这一模型,那么,他们就更加清晰如何使
用所有仪器驱动程序。
虚拟仪器驱动程序的功能体包含两个部分,第一部分是一组部件函数,它们是控制
仪器特定操作的软件模型,是整个驱动程序软件基本单元。第二部分是基于部件函
数的一组应用函数,它们用简单例程形式提供一个特定测试任务的高级函数,这些
函数设计时往往会调用多个部件函数。当上层用户应用程序要求集成的面向测试任
务的函数接口时,可以直接调用这些应用函数而不必再从底层起调用部件函数。
在内部设计模型中,部件函数的类型有两种分法:从函数功能划分与从仪器功能划
分,这两种方法均是可以描述部件函数实质的,同样也提供了两个不同角度的内部
设计模型。
从函数功能划分,虚拟仪器驱动程序的部件函数包括初始化函数、配置函数、动作
/状态函数、数据函数、实用函数和关闭函数,如图4.2所示。
图4.2 虚拟仪器驱动程序内部设计模型(函数功能划分)
1、 初始化函数是访问仪器驱动程序时调用的第一个函数,它也被用于初始化软件
连接,也可以执行一些必要的操作,使仪器处于缺省的开机状态或其它特定状态。

2、 配置函数是一些软件例程,它对仪器进行参数配置,以执行所希望的操作。
3、 动作/状态函数使仪器执行一项操作或者报告正在执行的或已挂起的操作状态
,这些操作包括激活触发系统、激励输出信号或报告测量结果。
4、 数据函数用来从仪器取回数据或向仪器发送数据。要处理不同类型的信息或使
用不同的数据传送技术,需要许多相应的数据函数。通常,具有这些函数的测量仪
器,它们将测量结果传送到计算机。以波形或数字形式传送到信号源模块(如任意
波形合成器或数字信号发生器)函数也属于数据函数这一类。
5、 实用函数包括许多标准的仪器操作,如复位、自检、错误查询、错误处理、驱
动程序版本和仪器固件版本信息查询等。
6、 关闭函数是最后调用的,它只是简单地关闭仪器与软件的连接。
从仪器功能划分,虚拟仪器可以粗分为三种类型:测量类仪器、源类仪器以及开关
类仪器,分别完成测量任务、源激励任务以及开关选通任务,在这种模型中,将配
置函数、动作/状态函数以及数据函数通称为功能类别函数,对应以上的三种仪器
功能,分别定义了三种功能类别函数结构,即测量类函数、源类函数以及开关类函
数,相应的内部设计模型如图4.3所示。
图4.3 虚拟仪器驱动程序内部设计模型(仪器功能划分)
从部件函数的类型看出,初始化函数、关闭函数以及实用函数在两个模型体中均存
在,是所有仪器驱动程序都必须包含的,属于仪器通用函数部分。而其它的部件函
数属于仪器特有,不同类型的仪器所包含的函数不尽相同,称为仪器特定函数部分
。在VPP规范中,给出通用函数的描述形式,对于特定函数,则必须进一步分析。


4.2.3 虚拟仪器驱动程序函数描述
符合VPP规范的虚拟仪器驱动程序基于VISA I/O接口软件,仪器驱动程序包含的函
数均直接或间接调用VISA命令,所有函数的数据类型均定义为VISA数据类型,返回
状态值也为VISA操作的返回状态值。虚拟仪器驱动程序函数是标准的、统一的,
VPP规范规定了虚拟仪器驱动程序通用函数的原型结构、参数类型与返回状态值,
同时也规定了特定函数的基本结构。下面分别对通用函数作一描述,所有描述格式
必须符合VPP规范。
1、 初始化函数:建立驱动程序与仪器的联系,并进行仪器初始化。 
参数表:
输入参数    描述    类型
rsrcName    仪器描述    ViRsrc
id_query    系统确认是否执行    ViBoolean
reset_instr 复位操作是否执行    ViBoolean
输出参数    描述    类型
vi  仪器句柄    ViSession
  返回状态值表:
返回状态值  描述
VI_SUCCESS  初始化完成
VI_WARN_NSUP_ID_QUERY   标识查询不支持
VI_WARN_NSUP_RESET  复位不支持

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -