75
虚虚虚虚虚虚虚 《》 第 1第 8 8 虚虚虚虚虚虚虚 虚虚虚虚虚虚虚 8.1 8.1 虚虚虚虚虚虚虚虚 虚虚虚虚虚虚虚虚 VISA VISA 8.2 VPP 8.2 VPP 虚虚虚虚虚虚 虚虚虚虚虚虚 8.3 8.3 虚虚 虚虚 lVl lVl 虚虚虚虚虚虚虚虚虚 虚虚虚虚虚虚虚虚虚 8.4 VPP 8.4 VPP 虚虚虚虚虚虚虚虚 虚虚虚虚虚虚虚虚 8.5 LabVIEW 8.5 LabVIEW 虚虚虚虚虚虚 虚虚虚虚虚虚

8 、仪器驱动器设计

  • Upload
    tale

  • View
    104

  • Download
    6

Embed Size (px)

DESCRIPTION

8 、仪器驱动器设计. 8.1 虚拟仪器软件结构 VISA 8.2 VPP 仪器驱动程序 8.3 基于 lVl 规范的互换型驱动器 8.4 VPP 仪器驱动程序设计 8.5 LabVIEW 仪器驱动程序. 8.1 虚拟仪器软件结构 VISA. VISA 的基本概念 1 、什么是 VISA - PowerPoint PPT Presentation

Citation preview

Page 1: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 1页

88 、仪器驱动器设计、仪器驱动器设计 8.1 8.1 虚拟仪器软件结构虚拟仪器软件结构 VISA VISA

8.2 VPP8.2 VPP 仪器驱动程序 仪器驱动程序 8.3 8.3 基于基于 lVllVl 规范的互换型驱动规范的互换型驱动器 器 8.4 VPP8.4 VPP 仪器驱动程序设计 仪器驱动程序设计 8.5 LabVIEW8.5 LabVIEW 仪器驱动程序仪器驱动程序

Page 2: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 2页

8.1 8.1 虚拟仪器软件结构虚拟仪器软件结构 VISAVISA

VISAVISA 的基本概念 的基本概念 11 、什么是、什么是 VISAVISA

VISAVISA 是虚拟仪器软件结构是虚拟仪器软件结构 (Virtual Instrument Software (Virtual Instrument Software Architectuere)Architectuere) 的简称,是由的简称,是由 VXI plug & playVXI plug & play 系统联盟所系统联盟所统一制定的统一制定的 I/OI/O 接口软件标准及其相关规范的总称。一般接口软件标准及其相关规范的总称。一般称这个称这个 I/OI/O 函数库为函数库为 VISAVISA 库(用于仪器编程的标准库(用于仪器编程的标准 I/OI/O函数库)。函数库)。 VISAVISA 函数库驻留于计算机系统中,是计算机函数库驻留于计算机系统中,是计算机与仪器之间的标准软件通信接口,用以实现对仪器的控制。与仪器之间的标准软件通信接口,用以实现对仪器的控制。

Page 3: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 3页

VISAVISA 的结构模型图 的结构模型图

VISAVISA 采用这种金字塔型的结构模型,为各种虚拟仪器系采用这种金字塔型的结构模型,为各种虚拟仪器系统软件提供了一个形式统一的统软件提供了一个形式统一的 I/OI/O 操作函数库,操作函数库, VISAVISA 将将不同厂商的仪器软件统一于同一平台。 不同厂商的仪器软件统一于同一平台。

Page 4: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 4页

22 、为什么要使用、为什么要使用 VISAVISA VISAVISA 的内部结构是一个先进的面向对象的结构,的内部结构是一个先进的面向对象的结构,

这一结构使得这一结构使得 VISAVISA 与在它之前的与在它之前的 I/OI/O 控制软件相比,接控制软件相比,接口无关性有很大提高。口无关性有很大提高。 VISAVISA 的可扩展性使它远远超出了的可扩展性使它远远超出了一般一般 I/OI/O 控制软件的范畴,而且由于控制软件的范畴,而且由于 VISAVISA 内部结构的灵内部结构的灵活性,使得活性,使得 VISAVISA 在功能和灵活性上也超过了其它在功能和灵活性上也超过了其它 I/OI/O 控控制库。制库。

尽管尽管 VISAVISA 的的 APIAPI 函数却比其它具有类似功能的函数却比其它具有类似功能的I/OI/O 库少得多,因此,库少得多,因此, VISAVISA 很容易被初学者掌握。很容易被初学者掌握。

另外,另外, VISAVISA 高度的可访问性和可配置性又使得高度的可访问性和可配置性又使得熟练的用户可以利用熟练的用户可以利用 VISAVISA 的许多独有特性,使得的许多独有特性,使得 VISAVISA的应用范围大大超过了传统的的应用范围大大超过了传统的 I/OI/O 软件。软件。 VISAVISA 不仅为将不仅为将来的仪器编程提供了许多新特性,而且兼容过去已有的仪来的仪器编程提供了许多新特性,而且兼容过去已有的仪器软件。器软件。

总之,总之, VISAVISA 具有与仪器硬件接口无关的具有与仪器硬件接口无关的特性,是理想的仪器特性,是理想的仪器 I/OI/O 软件。 软件。

Page 5: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 5页

33 、、 VISAVISA 的特点的特点 11 )) VISAVISA 的的 I/OI/O 控制功能适用于各种仪器类型控制功能适用于各种仪器类型 22 )) VISAVISA 的的 I/OI/O 控制功能适用于各种仪器硬件接口方式控制功能适用于各种仪器硬件接口方式 33 )) VISAVISA 的的 I/OI/O 控制功能适用于多种计算机平台控制功能适用于多种计算机平台 44 )) VISAVISA 能适应未来发展的需要能适应未来发展的需要 44 、、 VISAVISA 的发展现状的发展现状 VISAVISA 规范是规范是 VPPVPP 规范的核心内容,其中《规范的核心内容,其中《 VPP4.3 VPP4.3 ::

VISAVISA 库》规定了库》规定了 VISAVISA 库的函数名、参数定义及返回代库的函数名、参数定义及返回代码等。《码等。《 VPP4.3.2 VPP4.3.2 :文本语言的:文本语言的 VISAVISA 实现规范》和实现规范》和《《 VPP4.3.3 VPP4.3.3 :图形语言的:图形语言的 VISAVISA 实现规范》分别对文本实现规范》分别对文本语言(语言( C/C++C/C++ 和和 Visual BasicVisual Basic )和图形语言()和图形语言( LabVIELabVIEWW )实现)实现 VISAVISA 时的时的 VISAVISA 数据类型与各种语言特定数据数据类型与各种语言特定数据类型的对应关系、返回代码、常量等进行了定义。 类型的对应关系、返回代码、常量等进行了定义。

Page 6: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 6页

VISAVISA 的组成原理 的组成原理 11 、、 VISAVISA 的内部结构的内部结构 VISAVISA 的内部结构简化图 的内部结构简化图

Page 7: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 7页

11 )资源管理器)资源管理器 VISAVISA 资源管理器是用于管理所有资源的一种系统资源资源管理器是用于管理所有资源的一种系统资源

(控制设备资源),执行管理、控制和分配(控制设备资源),执行管理、控制和分配 VISAVISA 资源的资源的操作。操作。

22 )资源)资源 VISAVISA 的资源类概念类似于面向对象程序设计方法中类的的资源类概念类似于面向对象程序设计方法中类的

概念,它是一个实例的外观和行为的描述,是一种抽象化概念,它是一个实例的外观和行为的描述,是一种抽象化的设备特点的功能描述,是对资源精确描述的专用术语。的设备特点的功能描述,是对资源精确描述的专用术语。

3) 3) 会话(连接)。会话(连接)。 会话(会话( SessionsSessions )是指与任何已存在资源的连接,包)是指与任何已存在资源的连接,包

括默认资源管理器的连接。括默认资源管理器的连接。

Page 8: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 8页

22 、、 VISAVISA 资源描述资源描述 11 )资源描述格式 )资源描述格式

Page 9: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 9页

22 )资源类型定义)资源类型定义

Page 10: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 10页

33 )) VISAVISA 的资源结构的资源结构

Page 11: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 11页

44 )) VISAVISA 机制机制 需要用到需要用到 VISAVISA 的的 33 种机制:属性机制、锁定机制种机制:属性机制、锁定机制

和事件机制。以写资源为例,和事件机制。以写资源为例, 33 种机制的作用如图种机制的作用如图

应用程序

锁定机制

资源通道捕获事件

回调事件处理

写资源

属性 机制: 设置写 的方式

仪器

图8-4 VISA中的3种机制的作用

事件机制

Page 12: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 12页

(( 11 )属性机制)属性机制 属性机制用来控制资源的各种属性,这些属性分为两属性机制用来控制资源的各种属性,这些属性分为两

种:只读属性和可读可写属性。种:只读属性和可读可写属性。(( 22 )锁定机制)锁定机制 锁定机制可以设置通道对资源的访问模式。应用程序锁定机制可以设置通道对资源的访问模式。应用程序

能同时对资源开辟多个通道,并能通过不同的通道对资源能同时对资源开辟多个通道,并能通过不同的通道对资源进行访问。进行访问。

(( 33 )事件处理机制)事件处理机制 VISAVISA 中还定义了一种常见的机制提醒应用程序注意某种中还定义了一种常见的机制提醒应用程序注意某种

特殊情况,这些特殊情况成为事件。有了事件就可以使特殊情况,这些特殊情况成为事件。有了事件就可以使 VVISAISA 的资源和它的应用程序之间传递消息。应用程序有两的资源和它的应用程序之间传递消息。应用程序有两种不同的方式获得事件通知,它们分别是:队列机制和回种不同的方式获得事件通知,它们分别是:队列机制和回调机制。调机制。

Page 13: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 13页

VISAVISA 编程及应用实例 编程及应用实例 11 、、 VISAVISA 编程概要编程概要 在在 VISAVISA 编程过程中,面向仪器的所有操作都必须首编程过程中,面向仪器的所有操作都必须首

先进行打开先进行打开 VISAVISA 资源通信通道(资源通信通道( SessionSession )的操作。用)的操作。用户可以打开两种类型的通信通道:资源管理器通信通道户可以打开两种类型的通信通道:资源管理器通信通道(( Resource Manager SessionResource Manager Session )和器件通信通道()和器件通信通道( Device Device SessionSession )。)。

22 、应用实例、应用实例 本节通过分别调用非本节通过分别调用非 VISAVISA 的的 I/OI/O 接口软件库与接口软件库与 VISAVISA

库函数,对库函数,对 GPIBGPIB 器件与器件与 VXIVXI消息基器件进行简单的读消息基器件进行简单的读 //写操作(向器件发送查询器件标识符命令,并从器件读回写操作(向器件发送查询器件标识符命令,并从器件读回响应值),从而进行响应值),从而进行 VISAVISA 与其他与其他 I/OI/O 接口软件的异同点接口软件的异同点比较。比较。

Page 14: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 14页

【实例【实例 11】用非】用非 VISAVISA 与其他与其他 I/OI/O 接口软件库(接口软件库( NINI公公司的司的 NI-488NI-488 )实现)实现 GPIBGPIB 仪器的读仪器的读 // 写操作 写操作

Page 15: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 15页

【实例【实例 22】用非】用非 VISAVISA 的的 I/OI/O 接口软件库(接口软件库( NINI公司的公司的NI-VXINI-VXI )实现对)实现对 VXIVXI消息基仪器的读消息基仪器的读 // 写操作。 写操作。

Page 16: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 16页

【实例【实例 33】用】用 VISAVISA 的的 I/OI/O 接口软件库实现对接口软件库实现对 GPIBGPIB仪器与仪器与 VXIVXI消息的读消息的读 // 写操作写操作

Page 17: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 17页

【实例【实例 44 】对于用户来说,只需了解】对于用户来说,只需了解 VISAVISA 函数的格式与参数就函数的格式与参数就可以编写仪器的驱动程序,而不必关心可以编写仪器的驱动程序,而不必关心 VISAVISA 库与仪器如何沟通的细库与仪器如何沟通的细节。对节。对 VISAVISA 函数的调用一般可以分为声明、开启、器件函数的调用一般可以分为声明、开启、器件 I/OI/O 和关闭和关闭44 部分,下面以一段简单的部分,下面以一段简单的 CC 语言程序为例进行说明。该程序是由计语言程序为例进行说明。该程序是由计算机向一台算机向一台 GPIBGPIB 器件发出“器件发出“ *IDN*IDN ?”的?”的 IEEE-488.2IEEE-488.2 公用命令,公用命令,并从该器件回读其响应字符串。 并从该器件回读其响应字符串。

Page 18: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 18页

VISAVISA 在在 LabVIEWLabVIEW 中的实现 中的实现 1.VISA1.VISA子模板简介 子模板简介 VISAVISA 功能模块位于功能模块位于 Instrument I/O →VISA→VISA AdvInstrument I/O →VISA→VISA Adv

anced anced 子模板中如图。子模板中如图。

Page 19: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 19页

2.VISA 2.VISA 总线系统软件设计总线系统软件设计VISAVISA 子模板中各个函数的端口图和功能如表子模板中各个函数的端口图和功能如表

Page 20: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 20页

VISAVISA 高级选项子模板中部分函数及子函数的简单介绍 高级选项子模板中部分函数及子函数的简单介绍

Page 21: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 21页

3 .VISA3 .VISA 属性节点属性节点 LabVIEWLabVIEW 提供了提供了 VISAVISA 属性节点(位于属性节点(位于 VISA Advanced VISA Advanced 子模板),在程序中通过属性节点可读取设置子模板),在程序中通过属性节点可读取设置 VISAVISA 资源资源的属性值。的属性值。 VISAVISA 属性节点如图属性节点如图

将将 VISAVISA 属性节点放到流程图上以后,可设置属性节点放到流程图上以后,可设置 VISAVISA属性。设置属性有两种方法:属性。设置属性有两种方法:

(( 11 )把)把 VISAVISA 会话通道连接到属性节点的会话通道连接到属性节点的 referencereference输入端子,输入端子, VISAVISA就会变成与这个会话相关联的类。 就会变成与这个会话相关联的类。

Page 22: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 22页

(( 22 )在属性节点弹出选单,选择)在属性节点弹出选单,选择 Select Class→VISA→ISelect Class→VISA→I/O Session /O Session 选项,如图选项,如图 8-78-7 所示,在此选项的下列选单包所示,在此选项的下列选单包含各种不同的含各种不同的 VISAVISA 类,选择类,选择 VISAVISA 类后进行属性设置。 类后进行属性设置。

Page 23: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 23页

4. 4. 实例实例 【例【例 8-18-1 】】 VISAVISA 锁定机制的运用锁定机制的运用 VISAVISA 锁定机制允许优先通过独立的操作访问资源。 锁定机制允许优先通过独立的操作访问资源。

前面板及流程图程序设计 前面板及流程图程序设计

Page 24: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 24页

【例【例 8-28-2】 】 VISAVISA 属性应用实例属性应用实例 ::串口写和读。串口写和读。 VISAVISA 属性应用属性应用 .vi.vi 框图程序如图所示。该框图程序如图所示。该 VIVI打开一个与打开一个与串口串口 COM1COM1 的会话通道,通过属性节点对串口初始化为的会话通道,通过属性节点对串口初始化为1920019200波特,波特, 88位数据位,位数据位, 11位停止位,无奇偶校验位。位停止位,无奇偶校验位。而后将一个字符串写入而后将一个字符串写入 write buffer write buffer 端口,经端口,经 10s10s延时后,延时后,通过通过 VISAVISA 的另一个属性端子的另一个属性端子 Bytes at PortBytes at Port 返回从串口设返回从串口设备读取的字节数,这些字节在备读取的字节数,这些字节在 VISA Read VISA Read 模块的模块的 read bread bufferuffer 端口获取。通信结束由端口获取。通信结束由 VISA CloseVISA Close 模块关闭与串口模块关闭与串口的会话连接。 的会话连接。

Page 25: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 25页

VISA 属性应用 .VI 框图程序

Page 26: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 26页

8.2 VPP8.2 VPP仪器驱动程序仪器驱动程序 仪器驱动器概述 仪器驱动器概述 11 、仪器驱动器的由来、仪器驱动器的由来 11 )问题的提出)问题的提出 22 )标准仪器命令集的控制方式)标准仪器命令集的控制方式 33 )仪器驱动器的控制方式)仪器驱动器的控制方式 总之,在虚拟仪器系统中,驱动程序起着非常重要的总之,在虚拟仪器系统中,驱动程序起着非常重要的

作用,它将仪器硬件和计算机有机地组合成为一个仪器系作用,它将仪器硬件和计算机有机地组合成为一个仪器系统,完整地实现虚拟仪器内部的数据采集、分析处理、显统,完整地实现虚拟仪器内部的数据采集、分析处理、显示输出的全部功能。随着仪器硬件,计算机和软件的复杂示输出的全部功能。随着仪器硬件,计算机和软件的复杂性越来越高,驱动程序的重要性与价值已经越来越被人们性越来越高,驱动程序的重要性与价值已经越来越被人们所重视。所重视。

Page 27: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 27页

22 、关于驱动器的基本概念、关于驱动器的基本概念 仪器驱动程序是完成对某一特定仪器的控制与通信的仪器驱动程序是完成对某一特定仪器的控制与通信的

软件程序集合。它负责处理与某一专门仪器通信和控制的软件程序集合。它负责处理与某一专门仪器通信和控制的具体过程,将底层的复杂的硬件操作隐蔽起来,通过封装具体过程,将底层的复杂的硬件操作隐蔽起来,通过封装复杂的仪器编程细节,为了使用户使用仪器提供了简单的复杂的仪器编程细节,为了使用户使用仪器提供了简单的函数调用接口。函数调用接口。

仪器驱动程序是连接上层应用软件与底层输入仪器驱动程序是连接上层应用软件与底层输入 // 输出输出软件的纽带和桥梁。软件的纽带和桥梁。

每个仪器模块均由自己的驱动程序,并且仪器厂商将每个仪器模块均由自己的驱动程序,并且仪器厂商将其原码以动态链接库(其原码以动态链接库( DLLDLL )的形式提供给用户。)的形式提供给用户。

Page 28: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 28页

33 、、 VPPVPP 仪器驱动器的特点仪器驱动器的特点 (( 11 )仪器驱动程序一般由仪器供应厂家提供)仪器驱动程序一般由仪器供应厂家提供 (( 22 )所有仪器驱动程序必须提供程序源代码,而不是只)所有仪器驱动程序必须提供程序源代码,而不是只

提供可调用的函数提供可调用的函数 (( 33 )仪器驱动程序结构的模块化与层次化)仪器驱动程序结构的模块化与层次化 (( 44 )仪器驱动程序设计与实现的一致性)仪器驱动程序设计与实现的一致性 (( 55 )仪器驱动程序的兼容性与开放性)仪器驱动程序的兼容性与开放性

Page 29: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 29页

VPPVPP 仪器驱动器的结构模型 仪器驱动器的结构模型 11 、仪器驱动器外部接口模型、仪器驱动器外部接口模型 外部接口模型分为以下外部接口模型分为以下 55 个部分,如图 个部分,如图

Page 30: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 30页

(( 11 )函数体。它是仪器驱动程序的主体,为仪器驱动程)函数体。它是仪器驱动程序的主体,为仪器驱动程序的实际源代码。序的实际源代码。

(( 22 )交互式开发接口。它提供了一个图形化的功能面板,)交互式开发接口。它提供了一个图形化的功能面板,用户可以在这个图形接口上实施各种控制,改变每一功能用户可以在这个图形接口上实施各种控制,改变每一功能调用的参数值。调用的参数值。

(( 33 )编程开发者接口。它是应用程序调用驱动程序的软)编程开发者接口。它是应用程序调用驱动程序的软件接口,通过此接口可方便地调用仪器驱动程序中所定义件接口,通过此接口可方便地调用仪器驱动程序中所定义的所有功能函数。的所有功能函数。

(( 44 )) VISA I/OVISA I/O 接口。它通过本接口调用接口。它通过本接口调用 VISAVISA 这一标这一标准的准的 I/OI/O 接口程序库,提供了仪器驱动器与仪器硬件的通接口程序库,提供了仪器驱动器与仪器硬件的通信能力。信能力。

(( 55 )子程序接口。它使得仪器驱动器在运行时能调用其)子程序接口。它使得仪器驱动器在运行时能调用其它所需要的软件模块(如数据库、它所需要的软件模块(如数据库、 FFTFFT 等),而提供的等),而提供的软件接口。软件接口。

Page 31: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 31页

22 、仪器驱动程序内部设计模型、仪器驱动程序内部设计模型 仪器驱动器的第二个模型是内部设计模型仪器驱动器的第二个模型是内部设计模型

Page 32: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 32页

仪器驱动程序函数体由两大部分组成:第一部分是一仪器驱动程序函数体由两大部分组成:第一部分是一组部件函数,它们是一些控制仪器特定功能的软件模块;组部件函数,它们是一些控制仪器特定功能的软件模块;第二部分是一组应用函数,它们使用一些部件函数共同实第二部分是一组应用函数,它们使用一些部件函数共同实现完整的测试和测量操作。现完整的测试和测量操作。

11 )部件函数)部件函数(( 11 )初始化函数)初始化函数(( 22 )配置函数)配置函数(( 33 )激活)激活 // 状态函数状态函数(( 44 )数据函数)数据函数(( 55 )实用函数)实用函数(( 66 )关闭函数)关闭函数

Page 33: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 33页

22 )应用函数)应用函数 应用函数是以源代码形式提供的一种面向测应用函数是以源代码形式提供的一种面向测试任务的高级编程函数。通常情况下,应用函数通过设置、试任务的高级编程函数。通常情况下,应用函数通过设置、启动、从仪器读取测量数据等动作来完成一次完整的测试启动、从仪器读取测量数据等动作来完成一次完整的测试操作。操作。

根据测试任务的不同,将虚拟仪器粗分为根据测试任务的不同,将虚拟仪器粗分为 33种类型:即测量仪器、源仪器及开关仪器。它们分别完成种类型:即测量仪器、源仪器及开关仪器。它们分别完成测量任务、源激励任务及开关选通任务。在测量任务、源激励任务及开关选通任务。在 VPPVPP 系统仪系统仪器驱动程序规范中,将配置函数、动作器驱动程序规范中,将配置函数、动作 // 状态函数及数据状态函数及数据函数统称为功能类别函数,对应以上的函数统称为功能类别函数,对应以上的 33 种仪器类型,分种仪器类型,分别定义了别定义了 33 种功能类别函数的结构,即测量类函数、源类种功能类别函数的结构,即测量类函数、源类函数及开关类函数。函数及开关类函数。

Page 34: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 34页

仪器驱动程序函数简介 仪器驱动程序函数简介 11 、通用函数、通用函数 (( 11 )初始化函数建立驱动程序与仪器的通信联系。)初始化函数建立驱动程序与仪器的通信联系。 VPVP

PP 规范对参数返回的状态值作了规定 规范对参数返回的状态值作了规定

Page 35: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 35页

(( 22 )复位函数将仪器置为默认状态)复位函数将仪器置为默认状态 (( 33 )自检函数对仪器进行自检。)自检函数对仪器进行自检。 (( 44 )错误查询函数。完成仪器错误的查询。)错误查询函数。完成仪器错误的查询。 (( 55 )错误消息函数将错误代码转换为错误消息。)错误消息函数将错误代码转换为错误消息。 (( 66 )版本查询函数对仪器驱动程序的版本与固有版本进)版本查询函数对仪器驱动程序的版本与固有版本进

行查询。行查询。 (( 77 )关闭函数终止软件与仪器的通信联系,并释放系统)关闭函数终止软件与仪器的通信联系,并释放系统

资源。资源。

Page 36: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 36页

22 、特定函数、特定函数 11 )测量类功能类别函数。)测量类功能类别函数。

22 )源类功能类别函数。)源类功能类别函数。

33 )开关类功能类别函数。)开关类功能类别函数。

Page 37: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 37页

仪器驱动程序功能面板 仪器驱动程序功能面板 11 、功能面板的结构、功能面板的结构 功能面板文件最小树结构 功能面板文件最小树结构

Page 38: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 38页

22 、功能面板的部件函数 、功能面板的部件函数 功能面板树结构 功能面板树结构

Page 39: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 39页

在功能面板中,每一个层次的部件都必须包括各自在功能面板中,每一个层次的部件都必须包括各自的帮助文档,帮助文档可分为如下的帮助文档,帮助文档可分为如下 55 部分:部分:

(( 11 )功能面板帮助文档对应于仪器节点,描述了整个仪)功能面板帮助文档对应于仪器节点,描述了整个仪器的功能及功能面板所含的类节点与函数节点概念。器的功能及功能面板所含的类节点与函数节点概念。

(( 22 )功能类帮助文档对应于类节点,描述了类的功能与)功能类帮助文档对应于类节点,描述了类的功能与类所含的函数节点概述。类所含的函数节点概述。

(( 33 )功能函数帮助文档对应于函数节点,描述了功能函)功能函数帮助文档对应于函数节点,描述了功能函数的功能。数的功能。

(( 44 )控件帮助文档对应于函数的输入、输出函数,分别)控件帮助文档对应于函数的输入、输出函数,分别描述各自的意义、默认值与注意点。描述各自的意义、默认值与注意点。

(( 55 )控件帮助文档对应于函数的返回状态值,包括了正)控件帮助文档对应于函数的返回状态值,包括了正确返回值与各种错误返回值代码的含义。确返回值与各种错误返回值代码的含义。

Page 40: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 40页

8.3 8.3 基于基于 lVllVl规范的互换型驱动器规范的互换型驱动器

8.3.1 IVI8.3.1 IVI 概述 概述 11 、、 IVIIVI 的基本概念的基本概念 VPPVPP 仪器驱动器与特定仪器密切相关 ,更换不仪器驱动器与特定仪器密切相关 ,更换不

同厂家或同一厂家不同型号的仪器时,不仅要更同厂家或同一厂家不同型号的仪器时,不仅要更换仪器驱动器而且要修改测试程序,针对换仪器驱动器而且要修改测试程序,针对 VPPVPP 规规范的缺点,为了进一步提高仪器驱动程序的规范范的缺点,为了进一步提高仪器驱动程序的规范化和标准化,充分实现仪器的互换性和互操作性,化和标准化,充分实现仪器的互换性和互操作性,制定了制定了 IVIIVI 规范。规范。

Page 41: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 41页

22 、、 IVIIVI 驱动器的特点驱动器的特点11 )优点)优点 和和 VPPVPP 驱动器相比,驱动器相比, IVIIVI 仪器驱动器的优仪器驱动器的优

点主要有:点主要有: (( 11 )仪器级可互换。)仪器级可互换。 (( 22 )采用了基于状态存储机制的程序结构。)采用了基于状态存储机制的程序结构。 (( 33 )仪器仿真。)仪器仿真。 (( 44 )具有多线程安全性。)具有多线程安全性。 (( 55 )具有范围检查、状态储存及其他的调试和)具有范围检查、状态储存及其他的调试和

开发功能。开发功能。

Page 42: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 42页

22 )缺点)缺点 对于面向仪器互换的虚拟仪器设计目标,目前对于面向仪器互换的虚拟仪器设计目标,目前 IVIIVI

模型的主要缺点体现在以下方面:模型的主要缺点体现在以下方面: (( 11 )只适合同类仪器的互换,不能实现不同类仪器或某)只适合同类仪器的互换,不能实现不同类仪器或某

些多类功能的综合性仪器之间的互换。些多类功能的综合性仪器之间的互换。 (( 22 )) IVIIVI 类驱动器只能统一某类仪器中大部分仪器功能,类驱动器只能统一某类仪器中大部分仪器功能,

其他功能只能通过专用驱动器来实现。其他功能只能通过专用驱动器来实现。 (( 33 )可用标准较少。目前只完成了示波器、万用表、函)可用标准较少。目前只完成了示波器、万用表、函

数发生器、多路形状等部分仪器的类驱动器的标准化。数发生器、多路形状等部分仪器的类驱动器的标准化。 (( 44 )标准开放程度低。)标准开放程度低。 IVIIVI 模型只适合于通用仪器,如模型只适合于通用仪器,如万用表等,而对某些专用仪器(如数据采集卡)不适用。万用表等,而对某些专用仪器(如数据采集卡)不适用。

Page 43: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 43页

8.3.2 IVI8.3.2 IVI 驱动器的类型驱动器的类型11 、、 IVIIVI 驱动器的类型 驱动器的类型

IVIIVI 驱动器的类型驱动器的类型

Page 44: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 44页

IVIIVI 驱动器类型具体介绍如下驱动器类型具体介绍如下 ::

11 )) IVIIVI 仪器驱动器仪器驱动器 22 )) IVIIVI 特定驱动器特定驱动器 33 )) IVIIVI 类兼容特定驱动器类兼容特定驱动器 44 )) IVIIVI 定制特定驱动器定制特定驱动器 55 )) IVIIVI 类驱动器类驱动器

Page 45: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 45页

22 、、 IVIIVI 驱动器的功能驱动器的功能 11 )) IVIIVI固有功能(固有功能( Inherend CapabilitiesInherend Capabilities )) 22 )基本类功能()基本类功能( Bass Slass CapabilitiesBass Slass Capabilities )) 33 )) VIVI 类扩展功能(类扩展功能( Class Extension CapabilitieClass Extension Capabilitie

ss )) 44 )仪器专用功能()仪器专用功能( Instrument Specific CapabiliInstrument Specific Capabili

tiesties ) )

Page 46: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 46页

33 、、 IVIIVI 驱动程序的体系结构 驱动程序的体系结构

基于基于 IVIIVI 规范的驱动程序体系结构规范的驱动程序体系结构

Page 47: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 47页

通过类驱动程序间接调用方式,是通过类驱动程序间接调用方式,是 IVIIVI 驱动器的特驱动器的特色。多用表类的色。多用表类的 IVIIVI 驱动器的结构如下图所示。驱动器的结构如下图所示。

多用表类的多用表类的 IVIIVI 驱动器的结构驱动器的结构

Page 48: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 48页

44 、、 IVIIVI 驱动器的结构框架 驱动器的结构框架 IVIIVI 仪器驱动器的结构框架如下图所示 仪器驱动器的结构框架如下图所示

IVIIVI 仪器驱动器的结构框架仪器驱动器的结构框架

Page 49: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 49页

8.3.3 IVI8.3.3 IVI 函数库函数库

IVIIVI 函数库包括以下内容函数库包括以下内容:: ①① 仪器通信资源管理,包括资源的创建、锁定、解锁和释放;仪器通信资源管理,包括资源的创建、锁定、解锁和释放; ②② 仪器通信管理;仪器通信管理; ③③ 添加仪器属性;添加仪器属性; ④④ 添加仪器属性的回调函数;添加仪器属性的回调函数; ⑤⑤ 设置、获取和检查仪器的属性;设置、获取和检查仪器的属性; ⑥⑥ 属性的状态缓存和状态检测;属性的状态缓存和状态检测; ⑦⑦ 范围表管理,包括创建、查找、更改和强制取值;范围表管理,包括创建、查找、更改和强制取值; ⑧⑧ 错误报告和错误获取;错误报告和错误获取; ⑨⑨ 内存分配和配置信息的设置和获取;内存分配和配置信息的设置和获取; ⑩⑩ 通信资源的内存分配和释放。通信资源的内存分配和释放。

Page 50: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 50页

IVIIVI 函数库功能强大,应用复杂。下面将介绍其中的主要功能和使用函数库功能强大,应用复杂。下面将介绍其中的主要功能和使用方法。方法。

11 、仪器通信资源管理、仪器通信资源管理

名称 属性定义常量 默认值 含义RangeCheck IVI_ATTR_RANGE_CHECK VI_TRUE 范围检测QueryInstrStatue IVI_ATTR_QUERY_INSTR_STATUS VI_TRUE 状态检测Cache IVI_ATTR_CACHE V-_TRUE 状态缓存Simulate IVI_ATTR_SIMULATE VI_FALSE 仪器仿真RecordCoercions IVI_ATTR_RECORD_COERCIONS VI_FALSE 强制赋值记录DriverSetup IVI_ATTR_DRIVER_SETUP 驱动器启动

仪器驱动器的初始化信息仪器驱动器的初始化信息

Page 51: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 51页

22 、属性的创建和删除 、属性的创建和删除

值 标志名 含义

0x0001 IVI_VAL_NOT_SUPPORTED 驱动器不支持该属性

0x0002 IVI_VAL_NOT_READABLE 仪器驱动器和使用者对该属性不可读

0x0004 IVI_VAL_NOT_WRITABLE 仪器驱动器和使用者对该属性不可写

0x0008 IVI_VAL_NOT_USER_READABLE 使用者对该属性不可写

0x0010 IVI_VAL_NOT_USER_WRITABLE 使用者对该属性不可读

0x0020 IVI_VAL_NEVER_CACHE 禁止使用缓冲区内的值

0x0040 IVI_VAL_ALWAYS_CACHE 使用缓存器内的值

0x0080 IVI_VAL_NO_DEFERRED_UPDATE 不推迟属性的更新

0x0100 IVI_VAL_DONT_RETURN_DEFETTED_VALUE 不返回推迟更新属性的值

0x0200 IVI_VAL_FLUSH_ON_WRITE 更新属性值后是否向 I/O 回调函数发送 IVI_MSG_FLUSH 消息

0x0400 IVI_VAL_MULTI_CHANNEL 是否每个通道都具有单独的属性

0x0800 IVI_VAL_COERCEABLE_ONLY_BY_INSTR 是否只由仪器给出属性强制赋值

0x1000 IVI_VAL_WAIT_FOR_OPC_BEFORE_READS 在调用读回调函数前是否调用操作完毕回调函数

0x2000 IVI_VAL_WAIT_FOR_OPC_AFTER_WRITES 在调用写回调函数后是否调用操作完毕回调函数

0x4000 IVI_VAL_USE_CALLBACK_FOR_SIMULATION 在仿真模式下是否使用回调函数

0x8000 IVI_VAL_DONT_CHECK_STATUS 是否检查状态

参数参数 flagsflags 设置含义设置含义

Page 52: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 52页

33 、获取、设置和检查属性及属性的回调函数 、获取、设置和检查属性及属性的回调函数 回调函数包括:回调函数包括: ①①读回调函数;读回调函数; ②②写回调函数;写回调函数; ③③范围检查回调函数;范围检查回调函数; ④④强制赋值回调函数;强制赋值回调函数; ⑤⑤比较缓存值回调函数;比较缓存值回调函数; ⑥⑥范围表回调函数;范围表回调函数; 44 、属性的范围表、属性的范围表

Page 53: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 53页

8.3.4 IVI8.3.4 IVI 特定驱动程序的开发特定驱动程序的开发11 、开发的基本步骤 、开发的基本步骤 下面结合实例说明在下面结合实例说明在 LabWindows/CVILabWindows/CVI环境下开发环境下开发 II

VIVI 驱动程序的基本步骤。驱动程序的基本步骤。 11 )用)用 IVIIVI 提供的提供的 Create IVI Instrument DriverCreate IVI Instrument Driver 工具,生成符合工具,生成符合 IVIIVI

规范的程序框架,创建基本的仪器驱动程序文件(包括源文件、头文规范的程序框架,创建基本的仪器驱动程序文件(包括源文件、头文件和函数面板文件)。件和函数面板文件)。

22 )分析驱动程序的组成文件和源代码,根据自己开发的仪器功能,)分析驱动程序的组成文件和源代码,根据自己开发的仪器功能,删除不用的扩展代码,添加自己的函数和代码。 删除不用的扩展代码,添加自己的函数和代码。

33 、对独立属性实现属性回调函数。 、对独立属性实现属性回调函数。 44 、明确属性的无效值,、明确属性的无效值, IVIIVI 引擎是用一套相对直观的机制来保持状引擎是用一套相对直观的机制来保持状

态存储的完整性。态存储的完整性。 55 、编写应用程序对、编写应用程序对 IVIIVI 驱动程序的各函数进行测试,以保证正确性。驱动程序的各函数进行测试,以保证正确性。

Page 54: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 54页

22 、开发实例 、开发实例 下面是下面是 IVI.INIIVI.INI 文件的一个例子,它分为虚拟仪器、文件的一个例子,它分为虚拟仪器、

仪器驱动器、硬件设置三部分。如果要将仪器驱动器、硬件设置三部分。如果要将 Fluke-45DMMFluke-45DMM换成换成 HP34401DMMHP34401DMM ,只要将,只要将 IVI.INIIVI.INI 中相关内容换成中相关内容换成 HHP34401P34401 的信息即可。的信息即可。

[IviLogicalNames][IviLogicalNames] DMM1=”Vistr→F145”DMM1=”Vistr→F145” [ClassDriver→IviDmm][ClassDriver→IviDmm] Description=”IVI Digital MultimeterDescription=”IVI Digital Multimeter 类驱动程序”类驱动程序” Simulation VInstr=”VIstr→NISimDmm”Simulation VInstr=”VIstr→NISimDmm” [VIstr→F45][VIstr→F45] Description=”Fluke45 Digital Multimeter”Description=”Fluke45 Digital Multimeter” Driver=”Driver→F45”Driver=”Driver→F45”

Page 55: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 55页

Hardware=”Hardware→F45”Hardware=”Hardware→F45”

RangeCheck=TrueRangeCheck=True

Simulate=TrueSimulate=True

UseSpecificSimulation=TrueUseSpecificSimulation=True

Trace=TrueTrace=True

InterchangeCheck=TrueInterchangeCheck=True

QueryStatus=TrueQueryStatus=True

ChannelNames=”ch1”ChannelNames=”ch1”

Defaultsetup=””Defaultsetup=””

[Driver→F45][Driver→F45]

Description=”Fluke45 Digital Multimeter Instrument Driver”Description=”Fluke45 Digital Multimeter Instrument Driver”

ModulePath=”c:\cvi50\instr\F145_32.dll”ModulePath=”c:\cvi50\instr\F145_32.dll”

Prefix=”FL145”Prefix=”FL145”

Interface=”GPIB”Interface=”GPIB”

[Hardware→F145][Hardware→F145]

Description=””Description=””

ResourceDesc=”GPIB::2::INSTR”ResourceDesc=”GPIB::2::INSTR”

IdString=”FLUKE, 4, 4940191, 1.6D1.0.”IdString=”FLUKE, 4, 4940191, 1.6D1.0.”

DefaultDriver=” Driver→F145” DefaultDriver=” Driver→F145”

Page 56: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 56页

8.4 VPP8.4 VPP 仪器驱动程序设计仪器驱动程序设计

8.4.1 VPP8.4.1 VPP 仪器驱动程序设计概要仪器驱动程序设计概要11 、设计的基本要求、设计的基本要求 VPPVPP 驱动程序的设计要求如下:驱动程序的设计要求如下: (( 11 )仪器驱动程序都提供程序源代码,使用户可以根据)仪器驱动程序都提供程序源代码,使用户可以根据自己的需要理解、修改与优化仪器驱动程序。自己的需要理解、修改与优化仪器驱动程序。

(( 22 )仪器驱动程序的结构一定要模块化,能够提供多级)仪器驱动程序的结构一定要模块化,能够提供多级功能访问,以便用户能使用各个驱动器的子功能集。功能访问,以便用户能使用各个驱动器的子功能集。

(( 33 )仪器驱动程序的设计和实现形式必须一致,以使用)仪器驱动程序的设计和实现形式必须一致,以使用户在了解某一驱动程序的设计方法后,就能使用其他的驱户在了解某一驱动程序的设计方法后,就能使用其他的驱动程序。动程序。

Page 57: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 57页

22 、设计方法概述、设计方法概述 VPPVPP 仪器驱动程序的设计应按照一定步骤进行。下面介仪器驱动程序的设计应按照一定步骤进行。下面介绍设计的一般方法绍设计的一般方法

(( 11 )应确定需要研制的仪器模块的类型,确定其属于)应确定需要研制的仪器模块的类型,确定其属于 VVXIXI 仪器还是串行接口仪器,是属于消息基器件、寄存器仪器还是串行接口仪器,是属于消息基器件、寄存器基器件还是存储器基器件 。基器件还是存储器基器件 。

(( 22 )应确定仪器模块的应用目标及功能指标。 )应确定仪器模块的应用目标及功能指标。 (( 33 )在基本清楚了设计目标之后,应选择虚拟仪器系统)在基本清楚了设计目标之后,应选择虚拟仪器系统

的系统框架,确定模块设计的软、硬件环境。 的系统框架,确定模块设计的软、硬件环境。 (( 44 )应选择一个可作参考的现有的)应选择一个可作参考的现有的 VPPVPP 仪器驱动程序,仪器驱动程序,

尽量在现有的仪器驱动程序基础上进行设计,不必从头开尽量在现有的仪器驱动程序基础上进行设计,不必从头开始进行重复性劳动。始进行重复性劳动。

Page 58: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 58页

(( 55 )在对应参考模块的研究基础上,确定仪器驱动程序)在对应参考模块的研究基础上,确定仪器驱动程序应包括的功能函数,也即仪器驱动程序的内部设计模型。应包括的功能函数,也即仪器驱动程序的内部设计模型。

(( 66 )在实际源程序的编写中,还需加入各种异常处理。)在实际源程序的编写中,还需加入各种异常处理。 (( 77 )在图形化平台上运行与调试仪器驱动程序。)在图形化平台上运行与调试仪器驱动程序。 (( 88 )编写仪器驱动程序相关文档,包括)编写仪器驱动程序相关文档,包括 WindowsWindows 格式格式

的帮助文件、知识库文件以及的帮助文件、知识库文件以及 Visual BasicVisual Basic 函数原型文件函数原型文件等,并应提供自动安装程序。等,并应提供自动安装程序。

Page 59: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 59页

33 、设计内容 、设计内容 在前面关于仪器驱动器的介绍中可知,仪器驱动程序在前面关于仪器驱动器的介绍中可知,仪器驱动程序

包括以下几个部分:操作接口提供了一个虚拟仪器面板,包括以下几个部分:操作接口提供了一个虚拟仪器面板,用户通过对该面板的控制完成对仪器的操作;编程接口能用户通过对该面板的控制完成对仪器的操作;编程接口能将虚拟仪器面板的操作转换成相应的仪器代码,以实现对将虚拟仪器面板的操作转换成相应的仪器代码,以实现对仪器驱动器的功能调用;仪器驱动器的功能调用; I/OI/O 接口提供了仪器驱动器与仪接口提供了仪器驱动器与仪器通信能力;功能库描述了仪器驱动器所能完成的测试功器通信能力;功能库描述了仪器驱动器所能完成的测试功能;子程序接口使得仪器驱动器在运行时能调用它所需要能;子程序接口使得仪器驱动器在运行时能调用它所需要的软件模块。的软件模块。

11 )仪器驱动器的开发工具。 )仪器驱动器的开发工具。 22 )仪器驱动器的设计模型。 )仪器驱动器的设计模型。 (( 11 )外部设计模型图。 )外部设计模型图。 (( 22 )内部设计模型图。 )内部设计模型图。 33 )仪器驱动程序开发和编辑的工具。 )仪器驱动程序开发和编辑的工具。

Page 60: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 60页

44 、设计步骤、设计步骤 典型典型 LabVIEWLabVIEW 仪器驱动器的设计步骤大致仪器驱动器的设计步骤大致

可以分为以下三步:一是设计仪器驱动器的结构可以分为以下三步:一是设计仪器驱动器的结构层次;二是设计仪器驱动器的功能体;三是按外层次;二是设计仪器驱动器的功能体;三是按外部设计模型设计接口程序。 部设计模型设计接口程序。

11 )仪器驱动器结构层次的设计。)仪器驱动器结构层次的设计。 22 )仪器驱动器功能体程序设计。)仪器驱动器功能体程序设计。 33 )仪器驱动器功能体接口程序设计。)仪器驱动器功能体接口程序设计。

Page 61: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 61页

8.4.2 VPP8.4.2 VPP 仪器驱动程序的设计实例 仪器驱动程序的设计实例 1.1. 设计要求及步骤 设计要求及步骤 对仪器驱动器的基本要求是:对仪器驱动器的基本要求是: (( 11 )模块化和层次化;)模块化和层次化; (( 22 )源代码;)源代码;

(( 33 )广泛的可访问性。)广泛的可访问性。 开发用于开发用于 WINWIN框架的框架的 LabWindows/CVILabWindows/CVI 仪器驱动器仪器驱动器必须遵循的步骤如下:必须遵循的步骤如下:

(( 11 )熟悉仪器和获得实际操作经验)熟悉仪器和获得实际操作经验 (( 22 )研究仪器手册中的编程命令及)研究仪器手册中的编程命令及 GPIBGPIB 库库 (( 33 )生成仪器驱动程序)生成仪器驱动程序

Page 62: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 62页

2.2. 设计实例 设计实例 本设计基于本设计基于 LabWindows/CVILabWindows/CVI 开发平台,以开发平台,以 HP3441HP3441

00 数字多用表为例简要说明其仪器驱动程序设计,设计步数字多用表为例简要说明其仪器驱动程序设计,设计步骤如下:骤如下:

① ① 创建创建 FPFP 文件,编辑函数面板和类节点名称; 文件,编辑函数面板和类节点名称; ② ② 编辑函数面板控件与变量定义;编辑函数面板控件与变量定义; ③ ③ 生成代码;生成代码; ④ ④ 编写帮助文档;编写帮助文档; ⑤ ⑤ 编译。编译。

Page 63: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 63页

11 )仪器)仪器 HP34410HP34410 数字多用表驱动程序设计数字多用表驱动程序设计 打开指定设备回话函打开指定设备回话函 HP34410A_OpenInstrumentDireHP34410A_OpenInstrumentDire

ctly()ctly() 的程序流程图如图所示 的程序流程图如图所示

函数函数 HP34401A_ OpenInstrumentDirectly()HP34401A_ OpenInstrumentDirectly() 程序流程图程序流程图

Page 64: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 64页

查找和打开设备回话函数查找和打开设备回话函数 HP34401A_OpenInstrumentFormHP34401A_OpenInstrumentForm

Address()Address() 的程序流程图如下图所示。的程序流程图如下图所示。

函数函数 HP34401A_OpenInstrumentFormAddress()HP34401A_OpenInstrumentFormAddress() 程序流程图程序流程图

Page 65: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 65页

驱动程序驱动程序 HP34401A.cHP34401A.c 源代码例程如下:源代码例程如下:#include <userint.h>#include <userint.h>#include "ATEhp34401a.h"#include "ATEhp34401a.h"#include <formatio.h>#include <formatio.h>#include <ansi_c.h>#include <ansi_c.h>#define ON 1#define ON 1#define OFF 0#define OFF 0char HP34401AChanState=OFF;char HP34401AChanState=OFF;/*/* 函数声明函数声明 */*/ViStatus HP34401AWrite(ViSession instr,char *TempChar,ViUInt32 Count,ViPUInt32 ReturnCouViStatus HP34401AWrite(ViSession instr,char *TempChar,ViUInt32 Count,ViPUInt32 ReturnCou

nt);nt);ViStatus HP34401ARead(ViSession instr,char *TempChar,ViUInt32 Count,ViPUInt32 ReturnCounViStatus HP34401ARead(ViSession instr,char *TempChar,ViUInt32 Count,ViPUInt32 ReturnCoun

t);t);/*****1. /*****1. 为指定仪器打开一个会话(需提供指定仪器的为指定仪器打开一个会话(需提供指定仪器的 GPIBGPIB卡号和卡号和 GPIBGPIB 初始地址)初始地址) ********/********/// defaultRM// defaultRM 为输入参数,代表资源管理器会话;为输入参数,代表资源管理器会话;// PrimaryAddress// PrimaryAddress 为仪器初始地址;为仪器初始地址; GPIBBoardNum GPIBBoardNum 为仪器的为仪器的 GPIBGPIB卡号卡号// InstrumentHandle// InstrumentHandle 为输出参数,代表返回的仪器句柄为输出参数,代表返回的仪器句柄ViStatus_VI_FUNC HP34410A_OpenInstrumentDirectly(ViSession defaultRM,int PrimaryAddress, ViStatus_VI_FUNC HP34410A_OpenInstrumentDirectly(ViSession defaultRM,int PrimaryAddress,

ViPSession InstrumentHandle,char *GPIBBoardNum)ViPSession InstrumentHandle,char *GPIBBoardNum){{

ViStatus ReturnVal=-1;ViStatus ReturnVal=-1;int i;int i;ViChar InstrDescriptor[260];ViChar InstrDescriptor[260];

Page 66: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 66页

ViSession TempInstr;ViSession TempInstr;char TempChar[50];char TempChar[50];*InstrumentHandle=VI_NULL;*InstrumentHandle=VI_NULL;Fmt(TempChar,"%s<%s%s%d%s",GPIBBoardNum,"::",PrimaryAddress,"::INSFmt(TempChar,"%s<%s%s%d%s",GPIBBoardNum,"::",PrimaryAddress,"::INSTR"); //TR"); //把仪器的把仪器的 GPIBGPIB板号、板号、 GPIBGPIB 初始地址等参数转换成字符串,存放在变量初始地址等参数转换成字符串,存放在变量TempCharTempCharReturnVal=viOpen(defaultRM,TempChar,VI_NULL,VI_NULL,&TempInstr); //ReturnVal=viOpen(defaultRM,TempChar,VI_NULL,VI_NULL,&TempInstr); //打开指定打开指定 GPIBGPIB板上,指定初始地址的仪器会话,板上,指定初始地址的仪器会话, TempInstrTempInstr 为返回的会话为返回的会话if(ReturnVal!=VI_SUCCESS)if(ReturnVal!=VI_SUCCESS)

return ReturnVal;return ReturnVal;*InstrumentHandle=TempInstr;*InstrumentHandle=TempInstr;HP34401AChanState=ON;//HP34401AChanState=ON;//打开通信通道打开通信通道ReturnVal=HP34401A_Init(*InstrumentHandle);ReturnVal=HP34401A_Init(*InstrumentHandle);if (ReturnVal!=VI_SUCCESS)if (ReturnVal!=VI_SUCCESS){ viClose(*InstrumentHandle);{ viClose(*InstrumentHandle); *InstrumentHandle=VI_NULL;*InstrumentHandle=VI_NULL;

ReturnVal=-1; ReturnVal=-1; }}return ReturnVal;return ReturnVal;

}}

Page 67: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 67页

VI_SUCCESS)//VI_SUCCESS)// 成功打开相匹配设备中第一个设备的回话成功打开相匹配设备中第一个设备的回话{ { if(viGetAttriute(TempInstr,VI_ATTR_GPIB_PRIMARY_ADDR, if(viGetAttriute(TempInstr,VI_ATTR_GPIB_PRIMARY_ADDR,

&TempPrimaryAddress)==VI_SUCCESS)//&TempPrimaryAddress)==VI_SUCCESS)//检测指定会话的属性状态(初始地址),并检测指定会话的属性状态(初始地址),并成功找到成功找到if (TempPrimaryAddress==PrimaryAddress)if (TempPrimaryAddress==PrimaryAddress){ *InstrumentHandle=TempInstr;{ *InstrumentHandle=TempInstr;HP34401AChanState=ON;HP34401AChanState=ON;ReturnVal=HP34401A_Init(*InstrumentHandle);ReturnVal=HP34401A_Init(*InstrumentHandle);ReturnVal=0; ReturnVal=0; } } }}if (ReturnVal!=0)//if (ReturnVal!=0)//打开第一个设备会话没有成功打开第一个设备会话没有成功{ for (i=2;i<=TheInstrMached;i++)//{ for (i=2;i<=TheInstrMached;i++)//继续查找继续查找 ,,直到查完所有相匹配的设备直到查完所有相匹配的设备{ if (viFindNext(FindList,InstrDescriptor)==VI_SUCCESS)//{ if (viFindNext(FindList,InstrDescriptor)==VI_SUCCESS)//查找下一个设备查找下一个设备{{ if(viOpen(defaultRM,InstrDescriptor,VI_NULL,VI_NULL,&TempI if(viOpen(defaultRM,InstrDescriptor,VI_NULL,VI_NULL,&TempInstr)==VI_SUCCESS)nstr)==VI_SUCCESS){{ if(viGetAttriute(TempInstr,VI_ATTR_GPIB_PRIMARY_ADDR,&TempPr if(viGetAttriute(TempInstr,VI_ATTR_GPIB_PRIMARY_ADDR,&TempPrimaryAddress)== imaryAddress)==

Page 68: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 68页

22 )仪器)仪器 HP34410HP34410 数字多用表应用程序设计 数字多用表应用程序设计 程序流程图如下图所示 程序流程图如下图所示

应用程序流程图应用程序流程图

Page 69: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 69页

主程序源代码如下:主程序源代码如下:#include < HP34401A.h>#include < HP34401A.h>int main(int argc,char*argv[])int main(int argc,char*argv[]){ ViSession defaultRM,viHP33401a;{ ViSession defaultRM,viHP33401a;unsigned long retcnt=0;unsigned long retcnt=0;float Result;float Result;HP34410A_OpenInstrumentDirectly(defaultRM,15, &viHP33401a ,0); //HP34410A_OpenInstrumentDirectly(defaultRM,15, &viHP33401a ,0); //打开打开 GG

PIBPIB板号为板号为 00 ,, GPIBGPIB 初始地址为初始地址为 1515 的仪器回话的仪器回话HP34401A_Reset(viHP33401a); //HP34401A_Reset(viHP33401a); //复位复位HP34401A_Init(viHP33401a); //HP34401A_Init(viHP33401a); // 初始化仪器初始化仪器HP34401A_Mode (viHP33401a,0,10,0.001); //HP34401A_Mode (viHP33401a,0,10,0.001); //选择测量直流电压功能选择测量直流电压功能 ,,测量量测量量

程范围为程范围为 10V,10V,测量分辩率为精确到测量分辩率为精确到 0.0010.001HP34401AWrite(viHP33401a , “TRIG:COUN 5”,11,& retcnt); //HP34401AWrite(viHP33401a , “TRIG:COUN 5”,11,& retcnt); //触发次数触发次数 55次次HP34401AWrite(viHP33401a , “TRIG:SOUR IMM”,13,& retcnt); //HP34401AWrite(viHP33401a , “TRIG:SOUR IMM”,13,& retcnt); //选择内部选择内部

触发触发HP34401A_ReadData(viHP33401a,&Result); //HP34401A_ReadData(viHP33401a,&Result); // 读取测量结果存放在变量读取测量结果存放在变量 ResRes

ultult 中中Printf(“%f”,Result); //Printf(“%f”,Result); //打印输出变量打印输出变量 ResultResultHP34401A_Close(viHP33401a); //HP34401A_Close(viHP33401a); // 关闭仪器会话关闭仪器会话} }

Page 70: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 70页

8.5 LabVIEW8.5 LabVIEW 仪器驱动程序仪器驱动程序

8.5.1 8.5.1 仪器驱动程序的获得与安装仪器驱动程序的获得与安装 仪器驱动程序可以从仪器驱动程序光盘上安装获得,仪器驱动程序可以从仪器驱动程序光盘上安装获得,

也可以直接从也可以直接从 NINI (国家仪器公司)的网站(网址:(国家仪器公司)的网站(网址: http:http:/www.ni.ident/www.ni.ident )下载,或使用下图所示的方法自动连接)下载,或使用下图所示的方法自动连接到该网址下载所需驱动程序。到该网址下载所需驱动程序。

Page 71: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 71页

仪器驱动程序应当安装到仪器驱动程序应当安装到 LabVIEW/instr.libLabVIEW/instr.lib 的相应的相应子目录中。例如,子目录中。例如, LabVIEWLabVIEW 内置的仪器驱动程序内置的仪器驱动程序 HP344HP34401A01A 被安装在被安装在 LabVIEW/instr.lib/hp34401aLabVIEW/instr.lib/hp34401a 。在这个子目。在这个子目录中可以找到构成驱动程序的选单文件和录中可以找到构成驱动程序的选单文件和 VIVI 库。安装驱库。安装驱动程序后即可在动程序后即可在 Functions→Instrument I/OFunctions→Instrument I/O 的模板找到的模板找到仪器驱动程序模板,如下图所示。仪器驱动程序模板,如下图所示。

Page 72: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 72页

8.5.2 8.5.2 验证仪器驱动软件 验证仪器驱动软件 在在 LabVIEWLabVIEW安装了仪器驱动程序后,用户就可编写安装了仪器驱动程序后,用户就可编写自己的仪器应用程序了。 自己的仪器应用程序了。

从从 HP34401A MultiMeterHP34401A MultiMeter 子模板→子模板→ Application ExaApplication Examplesmples 选择选择 HP 34401A Getting Started.viHP 34401A Getting Started.vi 模块,如下图所模块,如下图所示,示,

HP34401AHP34401A 仪器驱动程序模板仪器驱动程序模板

Page 73: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 73页

前面板图如下图所示。前面板图如下图所示。

HP 34401A Getting Started.viHP 34401A Getting Started.vi 前面板前面板

Page 74: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 74页

框图程序如下图所示。框图程序如下图所示。

框图程序框图程序

Page 75: 8 、仪器驱动器设计

《虚拟仪器技术》《虚拟仪器技术》

第 75页

在框图程序中使用了仪器初始化、应用实例和关闭子在框图程序中使用了仪器初始化、应用实例和关闭子程序模块。各子程序功能如下。程序模块。各子程序功能如下。

(( 11 )) HP 34401A InitializeHP 34401A Initialize 子程序:该子程序用于与仪子程序:该子程序用于与仪器建立通信并产生一个器建立通信并产生一个 VISA sessionVISA session 标识字串。标识字串。

(( 22 )) HP 34401A Application ExampleHP 34401A Application Example 子程序:该子程序:该程序完成仪器设置、触发、测量等功能。程序完成仪器设置、触发、测量等功能。

(( 33 )) HP 34401A Close VIHP 34401A Close VI 子程序:该程序关闭子程序:该程序关闭 VISVISA sessionA session 进程。进程。