750 likes | 922 Views
8 、仪器驱动器设计. 8.1 虚拟仪器软件结构 VISA 8.2 VPP 仪器驱动程序 8.3 基于 lVl 规范的互换型驱动器 8.4 VPP 仪器驱动程序设计 8.5 LabVIEW 仪器驱动程序. 8.1 虚拟仪器软件结构 VISA. VISA 的基本概念 1 、什么是 VISA
E N D
8、仪器驱动器设计 8.1 虚拟仪器软件结构VISA 8.2 VPP仪器驱动程序 8.3 基于lVl规范的互换型驱动器 8.4 VPP仪器驱动程序设计 8.5 LabVIEW仪器驱动程序
8.1 虚拟仪器软件结构VISA • VISA的基本概念 • 1、什么是VISA VISA是虚拟仪器软件结构(Virtual Instrument Software Architectuere)的简称,是由VXI plug & play系统联盟所统一制定的I/O接口软件标准及其相关规范的总称。一般称这个I/O函数库为VISA库(用于仪器编程的标准I/O函数库)。VISA函数库驻留于计算机系统中,是计算机与仪器之间的标准软件通信接口,用以实现对仪器的控制。
VISA的结构模型图 VISA采用这种金字塔型的结构模型,为各种虚拟仪器系统软件提供了一个形式统一的I/O操作函数库,VISA将不同厂商的仪器软件统一于同一平台。
2、为什么要使用VISA • VISA的内部结构是一个先进的面向对象的结构,这一结构使得VISA与在它之前的I/O控制软件相比,接口无关性有很大提高。VISA的可扩展性使它远远超出了一般I/O控制软件的范畴,而且由于VISA内部结构的灵活性,使得VISA在功能和灵活性上也超过了其它I/O控制库。 • 尽管VISA的API函数却比其它具有类似功能的I/O库少得多,因此,VISA很容易被初学者掌握。 • 另外,VISA高度的可访问性和可配置性又使得熟练的用户可以利用VISA的许多独有特性,使得VISA的应用范围大大超过了传统的I/O软件。VISA不仅为将来的仪器编程提供了许多新特性,而且兼容过去已有的仪器软件。 • 总之,VISA具有与仪器硬件接口无关的特性,是理想的仪器I/O软件。
3、VISA的特点 • 1)VISA的I/O控制功能适用于各种仪器类型 • 2)VISA的I/O控制功能适用于各种仪器硬件接口方式 • 3)VISA的I/O控制功能适用于多种计算机平台 • 4)VISA能适应未来发展的需要 • 4、VISA的发展现状 VISA规范是VPP规范的核心内容,其中《VPP4.3 :VISA库》规定了VISA库的函数名、参数定义及返回代码等。《VPP4.3.2 :文本语言的VISA实现规范》和《VPP4.3.3 :图形语言的VISA实现规范》分别对文本语言(C/C++和Visual Basic)和图形语言(LabVIEW)实现VISA时的VISA数据类型与各种语言特定数据类型的对应关系、返回代码、常量等进行了定义。
VISA的组成原理 1、VISA的内部结构 VISA的内部结构简化图
1)资源管理器 VISA资源管理器是用于管理所有资源的一种系统资源(控制设备资源),执行管理、控制和分配VISA资源的操作。 • 2)资源 VISA的资源类概念类似于面向对象程序设计方法中类的概念,它是一个实例的外观和行为的描述,是一种抽象化的设备特点的功能描述,是对资源精确描述的专用术语。 • 3) 会话(连接)。 会话(Sessions)是指与任何已存在资源的连接,包括默认资源管理器的连接。
2、VISA资源描述 1)资源描述格式
4)VISA机制 需要用到VISA的3种机制:属性机制、锁定机制和事件机制。以写资源为例,3种机制的作用如图
(1)属性机制 属性机制用来控制资源的各种属性,这些属性分为两种:只读属性和可读可写属性。 (2)锁定机制 锁定机制可以设置通道对资源的访问模式。应用程序能同时对资源开辟多个通道,并能通过不同的通道对资源进行访问。 (3)事件处理机制 VISA中还定义了一种常见的机制提醒应用程序注意某种特殊情况,这些特殊情况成为事件。有了事件就可以使VISA的资源和它的应用程序之间传递消息。应用程序有两种不同的方式获得事件通知,它们分别是:队列机制和回调机制。
VISA编程及应用实例 • 1、VISA编程概要 在VISA编程过程中,面向仪器的所有操作都必须首先进行打开VISA资源通信通道(Session)的操作。用户可以打开两种类型的通信通道:资源管理器通信通道(Resource Manager Session)和器件通信通道(Device Session)。 • 2、应用实例 本节通过分别调用非VISA的I/O接口软件库与VISA库函数,对GPIB器件与VXI消息基器件进行简单的读/写操作(向器件发送查询器件标识符命令,并从器件读回响应值),从而进行VISA与其他I/O接口软件的异同点比较。
【实例4】对于用户来说,只需了解VISA函数的格式与参数就可以编写仪器的驱动程序,而不必关心VISA库与仪器如何沟通的细节。对VISA函数的调用一般可以分为声明、开启、器件I/O和关闭4部分,下面以一段简单的C语言程序为例进行说明。该程序是由计算机向一台GPIB器件发出“*IDN?”的IEEE-488.2公用命令,并从该器件回读其响应字符串。
VISA在LabVIEW中的实现 • 1.VISA子模板简介 VISA功能模块位于Instrument I/O →VISA→VISA Advanced 子模板中如图。
2.VISA 总线系统软件设计 VISA子模板中各个函数的端口图和功能如表
3 .VISA属性节点 LabVIEW提供了VISA属性节点(位于VISA Advanced 子模板),在程序中通过属性节点可读取设置VISA资源的属性值。VISA属性节点如图 将VISA属性节点放到流程图上以后,可设置VISA属性。设置属性有两种方法: (1)把VISA会话通道连接到属性节点的reference输入端子,VISA就会变成与这个会话相关联的类。
(2)在属性节点弹出选单,选择Select Class→VISA→I/O Session 选项,如图8-7所示,在此选项的下列选单包含各种不同的VISA类,选择VISA类后进行属性设置。
4. 实例 【例8-1】VISA锁定机制的运用 VISA锁定机制允许优先通过独立的操作访问资源。 前面板及流程图程序设计
【例8-2】 VISA属性应用实例:串口写和读。 VISA属性应用.vi框图程序如图所示。该VI打开一个与串口COM1的会话通道,通过属性节点对串口初始化为19200波特,8位数据位,1位停止位,无奇偶校验位。而后将一个字符串写入write buffer 端口,经10s延时后,通过VISA的另一个属性端子Bytes at Port返回从串口设备读取的字节数,这些字节在VISA Read 模块的read buffer端口获取。通信结束由VISA Close模块关闭与串口的会话连接。
8.2 VPP仪器驱动程序 • 仪器驱动器概述 • 1、仪器驱动器的由来 • 1)问题的提出 • 2)标准仪器命令集的控制方式 • 3)仪器驱动器的控制方式 总之,在虚拟仪器系统中,驱动程序起着非常重要的作用,它将仪器硬件和计算机有机地组合成为一个仪器系统,完整地实现虚拟仪器内部的数据采集、分析处理、显示输出的全部功能。随着仪器硬件,计算机和软件的复杂性越来越高,驱动程序的重要性与价值已经越来越被人们所重视。
2、关于驱动器的基本概念 仪器驱动程序是完成对某一特定仪器的控制与通信的软件程序集合。它负责处理与某一专门仪器通信和控制的具体过程,将底层的复杂的硬件操作隐蔽起来,通过封装复杂的仪器编程细节,为了使用户使用仪器提供了简单的函数调用接口。 仪器驱动程序是连接上层应用软件与底层输入/输出软件的纽带和桥梁。 每个仪器模块均由自己的驱动程序,并且仪器厂商将其原码以动态链接库(DLL)的形式提供给用户。
3、VPP仪器驱动器的特点 • (1)仪器驱动程序一般由仪器供应厂家提供 • (2)所有仪器驱动程序必须提供程序源代码,而不是只提供可调用的函数 • (3)仪器驱动程序结构的模块化与层次化 • (4)仪器驱动程序设计与实现的一致性 • (5)仪器驱动程序的兼容性与开放性
VPP仪器驱动器的结构模型 1、仪器驱动器外部接口模型 外部接口模型分为以下5个部分,如图
(1)函数体。它是仪器驱动程序的主体,为仪器驱动程序的实际源代码。(1)函数体。它是仪器驱动程序的主体,为仪器驱动程序的实际源代码。 • (2)交互式开发接口。它提供了一个图形化的功能面板,用户可以在这个图形接口上实施各种控制,改变每一功能调用的参数值。 • (3)编程开发者接口。它是应用程序调用驱动程序的软件接口,通过此接口可方便地调用仪器驱动程序中所定义的所有功能函数。 • (4)VISA I/O接口。它通过本接口调用VISA这一标准的I/O接口程序库,提供了仪器驱动器与仪器硬件的通信能力。 • (5)子程序接口。它使得仪器驱动器在运行时能调用其它所需要的软件模块(如数据库、FFT等),而提供的软件接口。
2、仪器驱动程序内部设计模型 仪器驱动器的第二个模型是内部设计模型
仪器驱动程序函数体由两大部分组成:第一部分是一组部件函数,它们是一些控制仪器特定功能的软件模块;第二部分是一组应用函数,它们使用一些部件函数共同实现完整的测试和测量操作。仪器驱动程序函数体由两大部分组成:第一部分是一组部件函数,它们是一些控制仪器特定功能的软件模块;第二部分是一组应用函数,它们使用一些部件函数共同实现完整的测试和测量操作。 • 1)部件函数 (1)初始化函数 (2)配置函数 (3)激活/状态函数 (4)数据函数 (5)实用函数 (6)关闭函数
2)应用函数 应用函数是以源代码形式提供的一种面向测试任务的高级编程函数。通常情况下,应用函数通过设置、启动、从仪器读取测量数据等动作来完成一次完整的测试操作。 根据测试任务的不同,将虚拟仪器粗分为3种类型:即测量仪器、源仪器及开关仪器。它们分别完成测量任务、源激励任务及开关选通任务。在VPP系统仪器驱动程序规范中,将配置函数、动作/状态函数及数据函数统称为功能类别函数,对应以上的3种仪器类型,分别定义了3种功能类别函数的结构,即测量类函数、源类函数及开关类函数。
仪器驱动程序函数简介 • 1、通用函数 • (1)初始化函数建立驱动程序与仪器的通信联系。VPP规范对参数返回的状态值作了规定
(2)复位函数将仪器置为默认状态 • (3)自检函数对仪器进行自检。 • (4)错误查询函数。完成仪器错误的查询。 • (5)错误消息函数将错误代码转换为错误消息。 • (6)版本查询函数对仪器驱动程序的版本与固有版本进行查询。 • (7)关闭函数终止软件与仪器的通信联系,并释放系统资源。
2、特定函数 1)测量类功能类别函数。 2)源类功能类别函数。 3)开关类功能类别函数。
仪器驱动程序功能面板 1、功能面板的结构 功能面板文件最小树结构
2、功能面板的部件函数 功能面板树结构
在功能面板中,每一个层次的部件都必须包括各自的帮助文档,帮助文档可分为如下5部分:在功能面板中,每一个层次的部件都必须包括各自的帮助文档,帮助文档可分为如下5部分: • (1)功能面板帮助文档对应于仪器节点,描述了整个仪器的功能及功能面板所含的类节点与函数节点概念。 • (2)功能类帮助文档对应于类节点,描述了类的功能与类所含的函数节点概述。 • (3)功能函数帮助文档对应于函数节点,描述了功能函数的功能。 • (4)控件帮助文档对应于函数的输入、输出函数,分别描述各自的意义、默认值与注意点。 • (5)控件帮助文档对应于函数的返回状态值,包括了正确返回值与各种错误返回值代码的含义。
8.3 基于lVl规范的互换型驱动器 8.3.1 IVI概述 1、IVI的基本概念 VPP仪器驱动器与特定仪器密切相关 ,更换不同厂家或同一厂家不同型号的仪器时,不仅要更换仪器驱动器而且要修改测试程序,针对VPP规范的缺点,为了进一步提高仪器驱动程序的规范化和标准化,充分实现仪器的互换性和互操作性,制定了IVI规范。
2、IVI驱动器的特点 1)优点 和VPP驱动器相比,IVI仪器驱动器的优点主要有: • (1)仪器级可互换。 • (2)采用了基于状态存储机制的程序结构。 • (3)仪器仿真。 • (4)具有多线程安全性。 • (5)具有范围检查、状态储存及其他的调试和开发功能。
2)缺点 对于面向仪器互换的虚拟仪器设计目标,目前IVI模型的主要缺点体现在以下方面: • (1)只适合同类仪器的互换,不能实现不同类仪器或某些多类功能的综合性仪器之间的互换。 • (2)IVI类驱动器只能统一某类仪器中大部分仪器功能,其他功能只能通过专用驱动器来实现。 • (3)可用标准较少。目前只完成了示波器、万用表、函数发生器、多路形状等部分仪器的类驱动器的标准化。 • (4)标准开放程度低。IVI模型只适合于通用仪器,如万用表等,而对某些专用仪器(如数据采集卡)不适用。
8.3.2 IVI驱动器的类型 1、IVI驱动器的类型 IVI驱动器的类型
IVI驱动器类型具体介绍如下: • 1)IVI仪器驱动器 • 2)IVI特定驱动器 • 3)IVI类兼容特定驱动器 • 4)IVI定制特定驱动器 • 5)IVI类驱动器
2、IVI驱动器的功能 • 1)IVI固有功能(Inherend Capabilities) • 2)基本类功能(Bass Slass Capabilities) • 3)VI类扩展功能(Class Extension Capabilities) • 4)仪器专用功能(Instrument Specific Capabilities)
3、IVI驱动程序的体系结构 基于IVI规范的驱动程序体系结构
通过类驱动程序间接调用方式,是IVI驱动器的特色。多用表类的IVI驱动器的结构如下图所示。通过类驱动程序间接调用方式,是IVI驱动器的特色。多用表类的IVI驱动器的结构如下图所示。 多用表类的IVI驱动器的结构
4、IVI驱动器的结构框架 IVI仪器驱动器的结构框架如下图所示 IVI仪器驱动器的结构框架
8.3.3 IVI函数库 IVI函数库包括以下内容: • ①仪器通信资源管理,包括资源的创建、锁定、解锁和释放; • ②仪器通信管理; • ③添加仪器属性; • ④添加仪器属性的回调函数; • ⑤设置、获取和检查仪器的属性; • ⑥属性的状态缓存和状态检测; • ⑦范围表管理,包括创建、查找、更改和强制取值; • ⑧错误报告和错误获取; • ⑨内存分配和配置信息的设置和获取; • ⑩通信资源的内存分配和释放。