第 5 章 daq 虚拟仪器软件编程

88
虚虚虚虚虚虚第 1第 虚 5 虚 DAQ 虚虚虚虚虚虚虚虚 5.1 DAQ 虚虚虚虚虚 5.2 LabVIEW 虚 DAQ 虚虚虚虚 5.3 虚虚虚虚 5.4 虚虚虚虚 5.5 虚虚 I/O 虚虚虚虚 5.6 DAQmx 5.7 DAQ 虚虚虚虚虚虚虚 5.7 虚虚虚虚虚虚虚虚虚虚虚虚虚虚虚虚虚虚虚

Upload: vesna

Post on 08-Jan-2016

164 views

Category:

Documents


4 download

DESCRIPTION

第 5 章 DAQ 虚拟仪器软件编程. 5.1 DAQ 软件的组成 5.2 LabVIEW 的 DAQ 软件概述 5.3 模拟输入 5.4 模拟输出 5.5 数字 I/O 和计数器 5.6 DAQmx 5.7 DAQ 驱动程序的开发 5.7 数据采集卡驱动程序设计及动态链接库开发. 5.1 DAQ 软件的组成. DAQ 软件包括 DAQ 驱动软件和 DAQ 仪器应用软件两大部分 1. 数据采集卡的驱动软件 2. PC-DAQ 仪器的应用软件编程. 数据采集卡的驱动软件. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 5 章  DAQ 虚拟仪器软件编程

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

第 1页

第 5 章 DAQ虚拟仪器软件编程5.1 DAQ软件的组成

5.2 LabVIEW的 DAQ软件概述

5.3 模拟输入

5.4 模拟输出

5.5 数字 I/O和计数器

5.6 DAQmx

5.7 DAQ驱动程序的开发

5.7 数据采集卡驱动程序设计及动态链接库开发

Page 2: 第 5 章  DAQ 虚拟仪器软件编程

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

第 2页

5.1 DAQ 软件的组成

DAQDAQ 软件包括软件包括 DAQDAQ 驱动软件和驱动软件和DAQDAQ 仪器应用软件两大部分仪器应用软件两大部分

1.1. 数据采集卡的驱动软件 数据采集卡的驱动软件 2. PC-DAQ2. PC-DAQ 仪器的应用软件编程 仪器的应用软件编程

Page 3: 第 5 章  DAQ 虚拟仪器软件编程

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

第 3页

数据采集卡的驱动软件数据采集卡的驱动软件 11 )驱动软件的作用 )驱动软件的作用 在基于在基于 DAQDAQ 插卡的虚拟仪器系统中,驱动软件起着插卡的虚拟仪器系统中,驱动软件起着

非常重要的作用,它将非常重要的作用,它将 DAQDAQ 插卡和计算机组合成为一个插卡和计算机组合成为一个DAQDAQ 仪器系统,进行完整的数据采集、分析和显示。仪器系统,进行完整的数据采集、分析和显示。

22 )驱动软件的基本要求 )驱动软件的基本要求 用户在选择或开发通用驱动软件时,应注意以下问题。用户在选择或开发通用驱动软件时,应注意以下问题。 (( 11 )驱动软件支持的编程语言和软件开发环境 )驱动软件支持的编程语言和软件开发环境

(( 22 )驱动函数的可用性)驱动函数的可用性

Page 4: 第 5 章  DAQ 虚拟仪器软件编程

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

第 4页

PC-DAQPC-DAQ 仪器的应用软件编程 仪器的应用软件编程 在设计在设计 DAQDAQ 仪器的时候,用户必须根据选择仪器的时候,用户必须根据选择 DAQDAQ

数据采集卡的情况,分以下两种情况进行考虑。数据采集卡的情况,分以下两种情况进行考虑。 (( 11 )) NINI 公司生产的数据采集卡公司生产的数据采集卡 可利用编程语言驱动程序函数来驱动数据采集卡。用可利用编程语言驱动程序函数来驱动数据采集卡。用

户只需正确设置输入参数,就可实现数据采集的任务,而户只需正确设置输入参数,就可实现数据采集的任务,而不需编写代码程序。不需编写代码程序。

(( 22 )非)非 NINI 公司生产的数据采集卡公司生产的数据采集卡 可利用变成直接驱动的方法来实现采集卡的软件驱动,可利用变成直接驱动的方法来实现采集卡的软件驱动,

此时,用户需要自己编写此时,用户需要自己编写 DAQDAQ 卡的驱动软件。卡的驱动软件。

Page 5: 第 5 章  DAQ 虚拟仪器软件编程

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

第 5页

下面介绍在驱动软件的基础上,如何下面介绍在驱动软件的基础上,如何来进行来进行 PC-DAQPC-DAQ 仪器的应用软件设计。仪器的应用软件设计。

11 )数据采集卡驱动程序的安装 )数据采集卡驱动程序的安装 22 )数据采集卡的参数设置 )数据采集卡的参数设置 (( 11 )模拟信号输入部分的设置 :)模拟信号输入部分的设置 : (( 22 )) A/DA/D 转换部分的设置 转换部分的设置 (( 33 )) D/AD/A 转换部分的设置 转换部分的设置

Page 6: 第 5 章  DAQ 虚拟仪器软件编程

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

第 6页

5.2 LabVIEW 的 DAQ 软件概述 11 、引言、引言 数据采集(数据采集( DAQDAQ )是虚拟仪器获取信息的必不可少的基)是虚拟仪器获取信息的必不可少的基

本功能,本功能, DAQDAQ 软件是软件是 LabVIEWLabVIEW 的核心,使用的核心,使用LabVIEWLabVIEW ,必须要掌握如何使用,必须要掌握如何使用 DAQDAQ 软件。软件。

本节讨论的本节讨论的 DAQDAQ 软件主要指软件主要指 DAQDAQ 硬件的驱动程序。硬件的驱动程序。 NINI推出了推出了 LabVIEW 7.0LabVIEW 7.0 后,使得原本十分强大的后,使得原本十分强大的 DAQDAQ 功功能变得更加完善。它包含有很多能变得更加完善。它包含有很多 DAQDAQ 卡的驱动,分别有卡的驱动,分别有各自的各自的 APIAPI 函数。函数。

本章将分两部分讲述如何使用本章将分两部分讲述如何使用 DAQDAQ 。第一部分讲述。第一部分讲述LabVIEWLabVIEW 老版本的老版本的 DAQDAQ ,第二部分将简单讲述,第二部分将简单讲述LabVIEWLabVIEW 新版本的新版本的 DAQDAQ 的新特性。重点介绍的新特性。重点介绍 DAQDAQ 章章VIVI 的应用,从初级的应用,从初级 VIVI 入手,再结合一些非常有用的高级入手,再结合一些非常有用的高级VIVI 的用法。的用法。

Page 7: 第 5 章  DAQ 虚拟仪器软件编程

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

第 7页

11 )在某些情况下,是必须要用到传统)在某些情况下,是必须要用到传统 DAQDAQ 的,这些情况有:的,这些情况有: NI-DAQmxNI-DAQmx 不支持的装置,不支持的装置, 使用了带有加速计、线性电压差分变换(使用了带有加速计、线性电压差分变换( LVDTLVDT )或)或

者旋转可变差分变换(者旋转可变差分变换( RVDTRVDT )虚拟通道的)虚拟通道的 SCXI-1530SCXI-1530 、、SCXI-1531SCXI-1531 、、 SCXI-1540SCXI-1540 装置装置

使用了使用了 LabVIEWLabVIEW 实时(实时( RTRT )模块。)模块。 已从已从 NI-DAQ6.9NI-DAQ6.9 升级,但是应用程序没有完全升级。升级,但是应用程序没有完全升级。

使用使用 7.07.0 版本以前的版本以前的 LabVIEWLabVIEW 、、 LabWindows/CVILabWindows/CVI 、、Measurement StudioMeasurement Studio 。。

使用使用 Visual Basic 6.0Visual Basic 6.0 。。22 )在)在 NI-DAQ6.9NI-DAQ6.9 版中支持,但是版中支持,但是 NI-DAQ7.0NI-DAQ7.0 版中不再支持版中不再支持

的包括:的包括: LabVIEWLabVIEW 、、 LabWindows/CVILabWindows/CVI 、、 Measurement StudioMeasurement Studio

应用软件应用软件 6.06.0 以前的版本;以前的版本; Windows 95Windows 95 操作系统;一些操作系统;一些较老的设备 较老的设备

Page 8: 第 5 章  DAQ 虚拟仪器软件编程

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

第 8页

22 、传统、传统 DAQDAQ 库库 VI VI

所有功能模块内的所有功能模块内的 VIVI 可以分为三个层次,可以分为三个层次,这三个层次也体现了用户对这三个层次也体现了用户对 DAQDAQ 不同层次的操不同层次的操作作

DAQDAQ 子模块子模块第一层次第一层次

DAQDAQ 子模块子模块第二层次第二层次

DAQDAQ 子模块子模块第三层次第三层次

Page 9: 第 5 章  DAQ 虚拟仪器软件编程

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

第 9页

11 .初级.初级 入门级的入门级的 VIVI ,功能相当有限,是对,功能相当有限,是对 DAQDAQ 底层操底层操

作的简化,位于最高层。用户在这个层面上操作作的简化,位于最高层。用户在这个层面上操作DAQDAQ ,不管是获得模拟数据还是模拟输出,或者,不管是获得模拟数据还是模拟输出,或者是数字是数字 I/OI/O 以及计数器和定时器的使用,几乎不以及计数器和定时器的使用,几乎不需要知道需要知道 DAQDAQ 库库 VIVI 的细节。初级的细节。初级 VIVI 是对开发是对开发者工作的最大简化。但是某些操作,甚至非常常者工作的最大简化。但是某些操作,甚至非常常用的操作不能够用初级用的操作不能够用初级 VIVI 来实现。这些包括连来实现。这些包括连续缓冲输入输出、触发等。续缓冲输入输出、触发等。

Page 10: 第 5 章  DAQ 虚拟仪器软件编程

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

第 10页

22 .中级.中级 当用户对当用户对 DAQDAQ 驱动库有一定的了解后,中级驱动库有一定的了解后,中级 VIVI

是用得最多的,因为它们可以提供相对于初级是用得最多的,因为它们可以提供相对于初级 VIVI多得多的功能,并且可以完成大部分的工作。中多得多的功能,并且可以完成大部分的工作。中级级 VIVI 的重要功能包括:的重要功能包括:

① ①高级缓冲管理,如循环缓冲;高级缓冲管理,如循环缓冲; ② ②外部时钟和触发选择;外部时钟和触发选择; ③ ③暂停限制;暂停限制; ④ ④校准以及硬件配置控制;校准以及硬件配置控制; ⑤ ⑤具有具有 RTSIRTSI总线互连函数访问权;总线互连函数访问权; ⑥ ⑥直接访问状态信息。 直接访问状态信息。

Page 11: 第 5 章  DAQ 虚拟仪器软件编程

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

第 11页

33 .高级.高级 高级高级 VIVI 和它的名字正相反,是对和它的名字正相反,是对 DAQDAQ 最底层的最底层的

操作。它通过操作。它通过 CINCIN 节点直接访问节点直接访问 DAQDAQ 驱动,一驱动,一般只有在很少的特殊功能中用到,包括:般只有在很少的特殊功能中用到,包括:

① ①多个缓存;多个缓存; ② ②可访问所有的状态信息;可访问所有的状态信息; ③ ③直接控制极性和增益;直接控制极性和增益; ④ ④通过采样时钟周期和时钟因子确定采样频通过采样时钟周期和时钟因子确定采样频率;率;

⑤ ⑤无缩放输出数据规范。无缩放输出数据规范。

Page 12: 第 5 章  DAQ 虚拟仪器软件编程

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

第 12页

5.3 模拟输入

11 .模入模块分类.模入模块分类

22 .简易模入设计.简易模入设计

33 .中级模入设计.中级模入设计

4. 4. 设计示例设计示例————连续信号采集与显示仪 连续信号采集与显示仪

Page 13: 第 5 章  DAQ 虚拟仪器软件编程

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

第 13页

模入模块分类模入模块分类

模拟输入用于采集模拟信号 ,分为:模拟输入用于采集模拟信号 ,分为:(( 11 )简单模入)简单模入 VI VI

(( 22 )中级模入)中级模入 VI VI

(( 33 )通用模入)通用模入 VIVI

(( 44 )高级模入)高级模入 VIVI

Page 14: 第 5 章  DAQ 虚拟仪器软件编程

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

第 14页

简易模入设计简易模入设计

简易模入是简易模入是 LabVIEWLabVIEW提供的一组标准的、提供的一组标准的、简单易用的采集简单易用的采集 VI VI ,主要有:,主要有:

AI Sample ChannelAI Sample Channel :完成通道的单点采集:完成通道的单点采集

AI Sample ChannelsAI Sample Channels :完成多通道的单点采集:完成多通道的单点采集

AI Acquire WaveformAI Acquire Waveform :完成通道的波形采集:完成通道的波形采集

AI Acquire WaveformsAI Acquire Waveforms :完成多通道的波形采集:完成多通道的波形采集

Page 15: 第 5 章  DAQ 虚拟仪器软件编程

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

第 15页

11 )) AI Acquire Waveform.viAI Acquire Waveform.vi 图标图标 (( 11 )) AI Acquire Waveform.viAI Acquire Waveform.vi 的调用路径的调用路径 选择选择 Functions>>Data Acquisition>> Analog Functions>>Data Acquisition>> Analog

Input>>AI Acquire Waveform.vi>>create.Input>>AI Acquire Waveform.vi>>create. 后,出现该图后,出现该图标及其端口图,如图所示。标及其端口图,如图所示。

AI Acquire AI Acquire Waveform.viWaveform.vi图图标及其端口标及其端口

Page 16: 第 5 章  DAQ 虚拟仪器软件编程

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

第 16页

(( 22 )) AI Acquire Waveform.viAI Acquire Waveform.vi 图标输入端口参数图标输入端口参数设置设置

devicedevice :设置:设置 DAQDAQ 的设备号的设备号 channelchannel :设置待采集的模拟信号所在通道号:设置待采集的模拟信号所在通道号 number of samplesnumber of samples :设置采样点数:设置采样点数 sample ratesample rate :设置采集速率:设置采集速率 high limithigh limit (( 0.00.0 ):设置模拟信号的最大输入值):设置模拟信号的最大输入值 low limitlow limit (( 0.00.0 ):设置模拟输入量的最小值):设置模拟输入量的最小值

Page 17: 第 5 章  DAQ 虚拟仪器软件编程

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

第 17页

(( 33 )) AI Acquire Waveform.viAI Acquire Waveform.vi 图标输出端口参数图标输出端口参数设置设置

waveformwaveform :: 1D1D 数组,存放采集得到的数据,数数组,存放采集得到的数据,数据类型为据类型为 doubledouble型。型。

actual sample periodactual sample period (( secsec ):采集卡返回的实):采集卡返回的实际采样率,有时相对于设定值有一定误差,是际采样率,有时相对于设定值有一定误差,是doubledouble型的变量。型的变量。

Page 18: 第 5 章  DAQ 虚拟仪器软件编程

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

第 18页

22 )) AI Acquire Waveforms.viAI Acquire Waveforms.vi 图标图标 (( 11 )) AI Acquire Waveforms.viAI Acquire Waveforms.vi 的调用路径的调用路径 选择选择 Funcations>>Data Acquisition>> Analog Funcations>>Data Acquisition>> Analog

Input>>AI Acquire Waveforms.vi>>create., Input>>AI Acquire Waveforms.vi>>create., 完成上述步完成上述步骤后,出现该图标及其端口图,如图所示。骤后,出现该图标及其端口图,如图所示。

AI Acquire AI Acquire Waveforms.viWaveforms.vi图标图标及其端口及其端口

Page 19: 第 5 章  DAQ 虚拟仪器软件编程

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

第 19页

(( 22 )) AI Acquire Waveforms.viAI Acquire Waveforms.vi 图标输入端口参数图标输入端口参数设置设置

这里的输入端口参数设置含义同这里的输入端口参数设置含义同 AI Acquire AI Acquire Waveform.viWaveform.vi 的输入端口设置。的输入端口设置。

(( 33 )) AI Acquire Waveforms.viAI Acquire Waveforms.vi 图标输出端口参数图标输出端口参数设置设置

waveformswaveforms :: 2D2D 数组,存放采集得到的数据和数组,存放采集得到的数据和信号所在的通道。数据类型为信号所在的通道。数据类型为 doubledouble型。型。

actual sample periodactual sample period (( secsec ):含义同上述的):含义同上述的 AI AI Acquire Waveform.viAcquire Waveform.vi 图标。图标。

Page 20: 第 5 章  DAQ 虚拟仪器软件编程

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

第 20页

33 )) AI Sample Channel.viAI Sample Channel.vi 图标图标 (( 11 )) AI Sample Channel.viAI Sample Channel.vi 图标的调用路径图标的调用路径 选择选择 Functions>>Data Acquisition>>Analog Functions>>Data Acquisition>>Analog

Input>>AI Sample Channel.vi>>createInput>>AI Sample Channel.vi>>create ,完成上述步骤后,完成上述步骤后,出现该图标及其端口图,如图所示。,出现该图标及其端口图,如图所示。

AI Sample AI Sample Channel.viChannel.vi图标图标及其端口及其端口

Page 21: 第 5 章  DAQ 虚拟仪器软件编程

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

第 21页

(( 22 )) AI Sample Channel.viAI Sample Channel.vi 图标输入端口参数设置图标输入端口参数设置 这里的输入端口参数设置含义同这里的输入端口参数设置含义同 AI Acquire AI Acquire

Waveform.viWaveform.vi 的输入端口设置。的输入端口设置。(( 33 )) AI Sample Channel.viAI Sample Channel.vi 图标输出端口参数设置图标输出端口参数设置 samplesample :模拟信号采集结果,是一个:模拟信号采集结果,是一个 doubledouble型型

数值。因输出值只有一个,因此对该模块调用一数值。因输出值只有一个,因此对该模块调用一次只能得到一个采集数据。次只能得到一个采集数据。

Page 22: 第 5 章  DAQ 虚拟仪器软件编程

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

第 22页

44 )) AI Sample Channels.viAI Sample Channels.vi 图标图标(( 11 )) AI Sample Channels.viAI Sample Channels.vi 图标的调用路径图标的调用路径 选择选择 Functions>>Data Acquisition>>Analog Functions>>Data Acquisition>>Analog

Input>>AI Sample Channel.vi>>createInput>>AI Sample Channel.vi>>create ,完成上述步骤后,完成上述步骤后,出现该图标及其端口图,如图所示。,出现该图标及其端口图,如图所示。

AI Sample AI Sample Channel.viChannel.vi图标图标及其端口及其端口

Page 23: 第 5 章  DAQ 虚拟仪器软件编程

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

第 23页

(( 22 )) AI Sample Channels.viAI Sample Channels.vi图标输入端口参数设置图标输入端口参数设置 这里的输入端口参数设置含义同这里的输入端口参数设置含义同 AI Acquire AI Acquire

Waveform.viWaveform.vi 的输入端口设置。的输入端口设置。(( 33 )) AI Sample Channels.viAI Sample Channels.vi图标输出端口参数设置图标输出端口参数设置 samplesample :模拟信号采集结果,是一个:模拟信号采集结果,是一个 1D1D 数组,由数组,由

使用者自己设定采样频率和采样点数。使用者自己设定采样频率和采样点数。

Page 24: 第 5 章  DAQ 虚拟仪器软件编程

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

第 24页

【【例例 5.15.1】】单点采集练习单点采集练习 打开一个新的打开一个新的 VIVI ,切换到,切换到 Block Block

DiagramDiagram 面板,添加一个 面板,添加一个 AI AI Sample ChannelSample Channel ,并且添加,并且添加 ChannelChannel控控件。件。 ChannelChannel控件的添加方式有两种:一种简便控件的添加方式有两种:一种简便的方式是在的方式是在 AI Sample ChannelAI Sample Channel 的的 ChannelChannel端子端子单击鼠标右键,选择单击鼠标右键,选择 Create ControlCreate Control 命令选项;命令选项;另一种方式是切换到前面板,选择另一种方式是切换到前面板,选择 I/OI/O子面板的子面板的Traditional DAQ ChannelTraditional DAQ Channel 控件。设置输入信号的控件。设置输入信号的上下限为上下限为 10V10V 和和 -10V-10V 。 。

Page 25: 第 5 章  DAQ 虚拟仪器软件编程

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

第 25页

I/OI/O 子面板及子面板及Traditional DAQ Traditional DAQ

ChannelChannel 函数函数

切换到前面板,添加合适的指示器。这里用的是 Numeric里的 Meter 指示器。

单点采集系统的流程图程序及前面板设计

Page 26: 第 5 章  DAQ 虚拟仪器软件编程

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

第 26页

【【例例 5.25.2 】】波形采集练习波形采集练习 YB1634 函数发生器输出频率为 305Hz ,幅度(峰值)约 4V 的正弦波信号,送给 PC1200 采集卡的模拟输入 0 通道。使用数据采集模板的模拟输入子模板中的” AI Acquire Waveform”进行采集,采样率设为 100kHz ,采样点数为 1000 。采集结果用波形图形和波形数组显示。

波形采集系统前面板和框图程序设计

Page 27: 第 5 章  DAQ 虚拟仪器软件编程

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

第 27页

【【例例 5.25.2】】波形采集练习波形采集练习(( 11 )准备一个方波信号源和一个正弦波信号源,分别连接到)准备一个方波信号源和一个正弦波信号源,分别连接到

模入通道模入通道 00 和和 11 。。(( 22 )设置前面板和框图如图所示。)设置前面板和框图如图所示。(( 33 )设置)设置 scanscan 速率、通道号、每通道样本数,如前面板所速率、通道号、每通道样本数,如前面板所

示。示。(( 44 )运行该程序。)运行该程序。(( 55 )保存为)保存为 Acquire Multiple Channels.viAcquire Multiple Channels.vi 。。(( 66 )该程序是无缓冲、软件触发的)该程序是无缓冲、软件触发的

双通道采样的前面板与流程图

Page 28: 第 5 章  DAQ 虚拟仪器软件编程

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

第 28页

中级模入设计中级模入设计 中级模入有更好的功能与灵活性,可以更有效中级模入有更好的功能与灵活性,可以更有效地开发用户应用。它的特点包括控制内部采样率、使用外部地开发用户应用。它的特点包括控制内部采样率、使用外部触发、执行连续外部触发等。下面将描述它的各种触发、执行连续外部触发等。下面将描述它的各种 VIVI ,应,应该注意其大量输入、输出端子中的部分内容一般是不必理会该注意其大量输入、输出端子中的部分内容一般是不必理会的。有效地使用这些的。有效地使用这些 VIVI 只需要关注需要的例子。如图所示。只需要关注需要的例子。如图所示。

中级模入 VI

Page 29: 第 5 章  DAQ 虚拟仪器软件编程

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

第 29页

11 )) AI Config.viAI Config.vi 图标图标 AI ConfigAI Config 对指定的通道设置模入操作,包括硬件、对指定的通道设置模入操作,包括硬件、

计算机内计算机内 bufferbuffer 的分配。的分配。 (( 11 )) AI Config.viAI Config.vi 图标的调用路径图标的调用路径 选择选择 Functions>>Data Acquisition>>Analog Functions>>Data Acquisition>>Analog

Input>>AI Config.vi>>create.,Input>>AI Config.vi>>create., 完成上述步骤后,出现该完成上述步骤后,出现该图标及其端口图,如图所示。图标及其端口图,如图所示。

AI Lonfig.vi 图标及其端口

Page 30: 第 5 章  DAQ 虚拟仪器软件编程

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

第 30页

(( 22 )) AI Config.viAI Config.vi图标输入端口参数设置图标输入端口参数设置 devicedevice :: DAQDAQ 设备的编号,默认值为设备的编号,默认值为 11 。。 channelschannels :待采集的模拟信号所在通道号。:待采集的模拟信号所在通道号。 buffer sizebuffer size :存储采集数据的缓冲区大小(:存储采集数据的缓冲区大小( Int32Int32 ),默认),默认值为值为 10001000 。。

error inerror in :前级输入的错误代码和信息。如果已经发生了错:前级输入的错误代码和信息。如果已经发生了错误,则误,则 VIVI 不执行任何操作,将不执行任何操作,将 error inerror in 由由 error outerror out 传送传送给后面的给后面的 VIVI 。。

(( 33 )) AI Config.viAI Config.vi图标输出端口参数设置图标输出端口参数设置 TaskIDTaskID :任务标识符,用来指示当前任务的无符号整型量。:任务标识符,用来指示当前任务的无符号整型量。 error outerror out :给出错误代码和信息。如果:给出错误代码和信息。如果 error inerror in 已经输入已经输入错误代码和信息,则错误代码和信息,则 error outerror out 原封不动地传给后面的原封不动地传给后面的 VIVI ,,或者输出错误代码和信息。或者输出错误代码和信息。

Page 31: 第 5 章  DAQ 虚拟仪器软件编程

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

第 31页

22 )) AI Start.viAI Start.vi 图标图标 AI Start.viAI Start.vi 启动带缓冲的模入操作。它控制数据采集速率、启动带缓冲的模入操作。它控制数据采集速率、

采集点的数目及使用任何硬件触发的选择。采集点的数目及使用任何硬件触发的选择。 (( 11 )) AI Start.viAI Start.vi 图标调用路径图标调用路径 选择选择选择选择 Functions>>Data Acquisition>>Analog Functions>>Data Acquisition>>Analog

Input>>AI Start.vi>>create.,Input>>AI Start.vi>>create., 完成上述步骤后,出现该图完成上述步骤后,出现该图标及其端口如图所示。标及其端口如图所示。

AI Start.vi 图标及其端口

Page 32: 第 5 章  DAQ 虚拟仪器软件编程

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

第 32页

(( 22 )) AI Start.viAI Start.vi 图标的输入端口参数设置图标的输入端口参数设置 taskID intaskID in :采集任务的标识符,标识该项采集任务。等:采集任务的标识符,标识该项采集任务。等

于前面于前面 VIVI 的输出的输出 taskID outtaskID out 的值。的值。 number of scans to acquirenumber of scans to acquire :设置需采集的采样点数。默:设置需采集的采样点数。默认值为认值为 -1-1 ,表示采集了一个缓冲区数据。,表示采集了一个缓冲区数据。

scan ratescan rate :采样速率,单位为点数:采样速率,单位为点数 // 秒,默认值为秒,默认值为 10001000个个 // 秒;秒;

error inerror in :错误描述符,与:错误描述符,与 AI Config.viAI Config.vi 模块中的相同;模块中的相同;(( 33 )) AI Start.viAI Start.vi 图标的输出端口参数设置图标的输出端口参数设置 task ID outtask ID out :该值与:该值与 taskID intaskID in 相同,把该标识符传给下相同,把该标识符传给下

一个采集一个采集 VIVI 的的 taskID intaskID in 输入端。输入端。 error outerror out :输出错误,与:输出错误,与 AI Config.viAI Config.vi 模块中的相同;模块中的相同;

Page 33: 第 5 章  DAQ 虚拟仪器软件编程

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

第 33页

33 )) AI Read.viAI Read.vi 图标图标 选择选择 Functions>>Data Acquisition>>Analog Functions>>Data Acquisition>>Analog

Input>>AI Read.vi>>create., Input>>AI Read.vi>>create., 完成上述步骤后,出现该图完成上述步骤后,出现该图标及其端口如图所示。标及其端口如图所示。

AI Read.vi 图标及其端口

Page 34: 第 5 章  DAQ 虚拟仪器软件编程

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

第 34页

(( 22 )) AI Read.viAI Read.vi图标输入端口参数设置图标输入端口参数设置 taskID intaskID in :同:同 AI Start.viAI Start.vi 。。 number of scans to readnumber of scans to read :要读取的数据总数:要读取的数据总数

(( Int32Int32 ),默认值是),默认值是 -1-1 ,表示读取和,表示读取和numberofscansto acquirenumberofscansto acquire 相同个数的数据。相同个数的数据。

error inerror in :同:同 AI Start.viAI Start.vi 。。(( 33 )) AI Read.viAI Read.vi图标的输出端口参数设置图标的输出端口参数设置 taskID outtaskID out :同:同 AI Start.viAI Start.vi 。。 scaled datascaled data :: doubledouble 型型 2D2D 数组,存放采集结果。数组,存放采集结果。 error outerror out :同:同 AI Start.viAI Start.vi 。。

Page 35: 第 5 章  DAQ 虚拟仪器软件编程

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

第 35页

44 )) AI Clear.viAI Clear.vi 图标图标 AI ClearAI Clear 的功能是清除模入操作、计算机中分配的缓冲、的功能是清除模入操作、计算机中分配的缓冲、释放所有数据采集卡的资源,例如计数器。释放所有数据采集卡的资源,例如计数器。

(( 11 )) AI Clear.viAI Clear.vi 图标的调用路径图标的调用路径 选择选择 Functions>>Data Acquisition>>Analog Functions>>Data Acquisition>>Analog

Input>>AI Clear.vi>>create., Input>>AI Clear.vi>>create., 完成上述步骤后,出现该图完成上述步骤后,出现该图标及其端口图,如图标及其端口图,如图 5-185-18 (( aa )和()和( bb )所示。)所示。

AI Clear.vi 图标及其端口

Page 36: 第 5 章  DAQ 虚拟仪器软件编程

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

第 36页

(( 22 )) AI Clear.viAI Clear.vi 图标输入端口参数设置图标输入端口参数设置 taskID intaskID in :同:同 AI Read.viAI Read.vi 。。 error inerror in :同:同 AI Read.viAI Read.vi 。。(( 33 )) AI Clear.viAI Clear.vi 图标的输出端口参数设置图标的输出端口参数设置 task ID outtask ID out :同:同 AI Read.viAI Read.vi 。。 error outerror out :同:同 AI Read.viAI Read.vi 。。

Page 37: 第 5 章  DAQ 虚拟仪器软件编程

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

第 37页

55 )) AI Read One Scan.viAI Read One Scan.vi 图标图标 AI Single ScanAI Single Scan (( S-ScanS-Scan )的功能是返回一个扫描数据。)的功能是返回一个扫描数据。

它的电压数据输出是由通道列表中的每个通道读出的电压它的电压数据输出是由通道列表中的每个通道读出的电压数据。使用这个数据。使用这个 VIVI仅与仅与 AI ConfigAI Config 有关联,不需要有关联,不需要 AI AI Start Start 和和 AI ReadAI Read 。。

(( 11 )) AI Read One Scan.viAI Read One Scan.vi 图标的调用路径图标的调用路径(( 22 )) AI Read One Scan.viAI Read One Scan.vi 图标输入端口参数设置图标输入端口参数设置(( 33 )) AI Read One Scan.viAI Read One Scan.vi 图标输出口参数设置图标输出口参数设置

AI Read One Scan.vi 图标及其端口

Page 38: 第 5 章  DAQ 虚拟仪器软件编程

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

第 38页

4. 4. 设计示例设计示例————连续信号采集与显示仪连续信号采集与显示仪11 )功能描述)功能描述22 )设计步骤)设计步骤(( 11 )参数设置)参数设置(( 22 )前面板设计)前面板设计(( 33 )流程图设计)流程图设计

AI Acquire Waveform.vi 图标及其端口

Page 39: 第 5 章  DAQ 虚拟仪器软件编程

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

第 39页

5.4 5.4 模拟输出模拟输出

Analog outputAnalog output 子模板的调用路径为子模板的调用路径为Functions>>Data Acquisition>>Analog OutputFunctions>>Data Acquisition>>Analog Output 。。鼠标单击后,出现鼠标单击后,出现 Analog OutputAnalog Output 子模板,如图子模板,如图所示。所示。

Analog Output 对话框

Page 40: 第 5 章  DAQ 虚拟仪器软件编程

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

第 40页

11 .初级(简易)模出设计(.初级(简易)模出设计( Easy Analog OutputEasy Analog Output ))这个模块的初级这个模块的初级 VIVI 有以下几种有以下几种 ::

AO Generate Waveform

AO Generate Waveforms

AO Update Channel

AO Update Channels

Page 41: 第 5 章  DAQ 虚拟仪器软件编程

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

第 41页

与模拟输入与模拟输入 VIVI类似,输入端有以下几个。类似,输入端有以下几个。 DeviceDevice :: DAQDAQ 的设备号。的设备号。 ChannelChannel :要测的模拟输入通道名称,缺省值是:要测的模拟输入通道名称,缺省值是 00 。。 ValueValue :写入模拟输出通道的数据。:写入模拟输出通道的数据。 WaveformWaveform :写入模拟输出通道的波形数据。:写入模拟输出通道的波形数据。 Update rateUpdate rate :写入数据速率。缺省值为每秒:写入数据速率。缺省值为每秒 10001000 次。次。

AO Update Channel 函数及端口

AO Generate Waveform 函数及端口

Page 42: 第 5 章  DAQ 虚拟仪器软件编程

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

第 42页

【【例例 5.45.4】】生成单点数据练习生成单点数据练习 使用 使用 AO Update ChannelAO Update Channel ,实现单,实现单

个模拟输出通道的单点数据更新,一般用于产生个模拟输出通道的单点数据更新,一般用于产生激励信号。流程图程序如下图所示。激励信号。流程图程序如下图所示。

利用 AO Update Channel 函数实现单个模拟输出通道的单点数据更新

Page 43: 第 5 章  DAQ 虚拟仪器软件编程

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

第 43页

【【例例 5.55.5】】生成波形数据练习生成波形数据练习 使用使用 AO Generate WaveformAO Generate Waveform 生成模拟输出生成模拟输出

。在本例中,需要产生连续的波形数据,这可以用。在本例中,需要产生连续的波形数据,这可以用LabVIEWLabVIEW 自带的波形发生器来实现。在自带的波形发生器来实现。在 FunctionFunction 面板的面板的AnalyzeAnalyze 子面板的子面板的 Waveform generationWaveform generation 子面板内,有各子面板内,有各种波形数据发生器。用户也可用种波形数据发生器。用户也可用 AnalyzeAnalyze 子面板的子面板的 Signal Signal ProcessingProcessing 子面板内的子面板内的 Signal GenerationSignal Generation 子面板内的子面板内的Signal Generation by DurationSignal Generation by Duration 。如下图所示。如下图所示

Analyze 子面板及所需函数

Page 44: 第 5 章  DAQ 虚拟仪器软件编程

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

第 44页

生成波形数据流程图程序设计

系统前面板设计

Page 45: 第 5 章  DAQ 虚拟仪器软件编程

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

第 45页

【【例例 5.65.6】】产生一个模出电平。产生一个模出电平。 面板及框图如图面板及框图如图 5-285-28 所示。运行该所示。运行该

程序,可以看到表的输出将指示程序,可以看到表的输出将指示 33 。这个指示并。这个指示并非模出,为了看到模出,可以使用一块数字万用非模出,为了看到模出,可以使用一块数字万用表直接测量表直接测量 DAC0 OUTDAC0 OUT 。你会发现万用表的指示。你会发现万用表的指示一直维持在一直维持在 3V3V ,尽管程序早已执行完了。,尽管程序早已执行完了。

面板及框图

Page 46: 第 5 章  DAQ 虚拟仪器软件编程

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

第 46页

【【例例 5.75.7】】产生一个模出波形产生一个模出波形

面板及框图

Page 47: 第 5 章  DAQ 虚拟仪器软件编程

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

第 47页

22 .中级模出(.中级模出( Analog OutputAnalog Output )) 中级模出中级模出 VIVI 下图所示下图所示

1 ) AO Config 对指定的通道设置模出操作,包括硬件、计算机内 buffer 的分配。常用的端子有:( 1 ) Device—— 采集卡的设备号。( 2 ) Channel—— 指定模出通道号的串数组。( 3 ) Limit settings—— 指定输出信号的范围。( 4 ) taskID—— 用于所有后来的模出 VI 以规定操作的设备和通道。

Page 48: 第 5 章  DAQ 虚拟仪器软件编程

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

第 48页

22 )) AO WriteAO Write 以电压数据的方式写数据到模出数据以电压数据的方式写数据到模出数据缓冲区。缓冲区。

33 )) AO StartAO Start启动带缓冲的模出操作。启动带缓冲的模出操作。44 )) AO WaitAO Wait 在返回之前一直等待直到波形发生任在返回之前一直等待直到波形发生任

务完成。务完成。55 )) AO ClearAO Clear 的功能为清除模出操作、计算机中分的功能为清除模出操作、计算机中分配的缓冲、释放所有数据采集卡的资源。配的缓冲、释放所有数据采集卡的资源。

Page 49: 第 5 章  DAQ 虚拟仪器软件编程

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

第 49页

【【例例 5.85.8】】产生一个连续的正弦信号。产生一个连续的正弦信号。

面板及框图

Page 50: 第 5 章  DAQ 虚拟仪器软件编程

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

第 50页

说明以下几点说明以下几点 (( 11 )由于)由于 AO WriteAO Write 要求输入数据的要示,这里要求输入数据的要示,这里

正弦波发生器的输出是一个正弦波发生器的输出是一个 waveformwaveform 数据类型,数据类型,首先将其中的首先将其中的 YY 数据提出,然后将它扩充为一个二数据提出,然后将它扩充为一个二维数组,再经转置后才可连接到维数组,再经转置后才可连接到 AO WriteAO Write 上。上。

(( 22 )在)在 AO ConfigAO Config 中主要是设置了中主要是设置了 BufferBuffer ,这,这对于连续输出是必须的,其他都选默认值。对于连续输出是必须的,其他都选默认值。

(( 33 )) BufferBuffer 的大小有时需要经过调试,过大或过的大小有时需要经过调试,过大或过小都可能导致不能正常工作。小都可能导致不能正常工作。

Page 51: 第 5 章  DAQ 虚拟仪器软件编程

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

第 51页

使用 Analog Output Utilities 提供的连续模出的现成模块也可以生成一个连续的正弦信号发生器,面板及框图如图 5-32 所示。该例子中开关是控制 AO C-GEN 内部的 AO Clear 模块。当其状态为 T时,运行程序将释放计算机及采集卡资源,无信号输出。在程序框图上单击 AO C-GEN 图标,可以看到其内部结构。

面板及框图

Page 52: 第 5 章  DAQ 虚拟仪器软件编程

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

第 52页

33 .设计示例.设计示例————连续信号输出仪连续信号输出仪11 )功能描述)功能描述22 )设计步骤)设计步骤 (( 11 )参数设置)参数设置 (( 22 )前面板设计)前面板设计 (( 33 )流程图设计)流程图设计33 )运行检验)运行检验

AO Update Channel.vi 图标及端口参数

Page 53: 第 5 章  DAQ 虚拟仪器软件编程

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

第 53页

5.5 5.5 数字数字 I/OI/O 和计数器和计数器

11 .数字.数字 I/OI/O

本节将讲述数字信号的采集。数字本节将讲述数字信号的采集。数字 I/OI/O位于位于 Data AcquisitionData Acquisition 面板的面板的 Digital I/ODigital I/O 子面板内子面板内,如图所示。,如图所示。

数字 I/O 子模板

Page 54: 第 5 章  DAQ 虚拟仪器软件编程

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

第 54页

数字数字 I/OI/O 的初级的初级 VIVI 有以下几种。有以下几种。

Read from Digital LineRead from Digital Line :从数字线读出以数据。:从数字线读出以数据。

Read from Digital PortRead from Digital Port :从数字端口读取数据。:从数字端口读取数据。

Write to Digital LineWrite to Digital Line :向数字线写入数据。:向数字线写入数据。

Write to Digital PortWrite to Digital Port :向数字端口写入数据。:向数字端口写入数据。

Page 55: 第 5 章  DAQ 虚拟仪器软件编程

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

第 55页

数字数字 I/OI/O 有两种方式:数字线和端口。有两种方式:数字线和端口。

Data latchesAnd drivers

Data latchesAnd drivers

Output Port

Output Port

Output Lines

Iuput LinesDevice or Module

数字数字 I/OI/O 的端口的端口

Page 56: 第 5 章  DAQ 虚拟仪器软件编程

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

第 56页

初级数字初级数字 I/O VII/O VI 的使用和模拟的使用和模拟 I/O VII/O VI 类似,类似,下图所示为数字输入的流程图程序。下图所示为数字输入的流程图程序。

Page 57: 第 5 章  DAQ 虚拟仪器软件编程

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

第 57页

22 .计数器.计数器11 )计数器功能简介)计数器功能简介22 )计数器)计数器 VIVI

计数器计数器 VIVI

Page 58: 第 5 章  DAQ 虚拟仪器软件编程

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

第 58页

计数器计数器 VIVI 包含三层包含三层 VIVI ,低级用于,低级用于简单的操作,中级简单的操作,中级 VIVI 实现大多数功能,高级实现大多数功能,高级 VIVI实现特有的底层操作。初级实现特有的底层操作。初级 VIVI 包含以下几种:包含以下几种:

Count Events or TimeCount Events or Time :事件和时间计数:事件和时间计数

Generate Delayed PulseGenerate Delayed Pulse :产生延迟脉冲:产生延迟脉冲

Generate Pulse TrainGenerate Pulse Train :产生脉冲序列:产生脉冲序列

Measure FrequencyMeasure Frequency :测量频率:测量频率

Measure Pulse Width or PeriodMeasure Pulse Width or Period :测量脉:测量脉宽或周期宽或周期

Page 59: 第 5 章  DAQ 虚拟仪器软件编程

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

第 59页

【【例例 5.95.9】】下图所示是一个下图所示是一个 Count Events or Time VICount Events or Time VI ,用于时间,用于时间和事件的计数。它从一开始进行计数,然后通过和事件的计数。它从一开始进行计数,然后通过WhileWhile循环循环连续进行。在这里连续进行。在这里 Event Source/TimebaseEvent Source/Timebase 输入设置为输入设置为 00 ,代,代表用户信号被用作计数器源输入信号。循环外的布尔常量用表用户信号被用作计数器源输入信号。循环外的布尔常量用于开启计数,用户通过于开启计数,用户通过 StopStop按钮终止计数。按钮终止计数。

计数装置的系统流程图设计

Page 60: 第 5 章  DAQ 虚拟仪器软件编程

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

第 60页

5.6 DAQmx5.6 DAQmx

11 .概述.概述DAQmxDAQmx 的优点如下:的优点如下: (( 11 )增加)增加 DAQ AssistantDAQ Assistant

(( 22 )更加完美的表现)更加完美的表现 (( 33 )更简捷和直观的)更简捷和直观的 APIAPI 函数函数 (( 44 )功能得到扩展)功能得到扩展

(( 55 )增加与)增加与 ANSICANSIC 、、 LabWindows/CVILabWindows/CVI 、、 MeMeasurement Studioasurement Studio 中中 APIAPI 函数相近的函数相近的 APIAPI 函数和函数和功能功能

Page 61: 第 5 章  DAQ 虚拟仪器软件编程

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

第 61页

使用使用 DAQmxDAQmx 的必备条件的必备条件

(( 11 )) WindowsWindows 操作系统操作系统 (( 22 )使用了)使用了 PCIPCI 或者或者 PXIEPXIE串行多功能串行多功能 DAQDAQ

装置,并且支持装置,并且支持 SCXISCXI 或或 SCCSCC 模块。模块。 (( 33 )) LabVIEWLabVIEW 、、 LabWindows/LabWindows/

CVICVI 、、 Measurement StudioMeasurement Studio 的版本至少是的版本至少是 7.07.0 版版本以上(包括本以上(包括 7.07.0 )。)。

Page 62: 第 5 章  DAQ 虚拟仪器软件编程

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

第 62页

22 .. DAQ AssistantDAQ Assistant

DAQmxDAQmx 所有的所有的 VIVI都位于都位于 FunctionFunction 面板的面板的NI MeasurementNI Measurement 子面板的子面板的 DAQmx-Data DAQmx-Data AcquisitionAcquisition 子面板内,如图所示。子面板内,如图所示。

DAQmxDAQmx 的的 VIVI 所在面板所在面板

Page 63: 第 5 章  DAQ 虚拟仪器软件编程

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

第 63页

有两种方式可以选择有两种方式可以选择 DAQ AssistantDAQ Assistant:一种是在:一种是在 DAQmx-Data AcquisitionDAQmx-Data Acquisition 子面板内子面板内选择;另外一种是分别在选择;另外一种是分别在 Express FunctionExpress Function 的的InputInput 和和 OutputOutput 子面板内选择,如下图所示。子面板内选择,如下图所示。

Express FunctionExpress Function 的的 InputInput 子面板和子面板和OutputOutput 子面板子面板

Page 64: 第 5 章  DAQ 虚拟仪器软件编程

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

第 64页

选择选择 DAQmx AssistantDAQmx Assistant ,系统将自动打开,系统将自动打开一个新的窗口,即一个新的窗口,即 DAQmxDAQmx图形设置窗口,如图所示。图形设置窗口,如图所示。

Analog Analog InputInput界界面面

Page 65: 第 5 章  DAQ 虚拟仪器软件编程

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

第 65页

模拟输入信号被划分为以下几大类:模拟输入信号被划分为以下几大类: VoltageVoltage(电压)、(电压)、 TemperatureTemperature (温度)、(温度)、 StrainStrain (应(应变)、变)、 CurrentCurrent (电流)、(电流)、 ResistanceResistance (电(电阻)、阻)、 FrequencyFrequency (频率)等,如图所示。(频率)等,如图所示。

Digital Digital I/OI/O界面界面

Page 66: 第 5 章  DAQ 虚拟仪器软件编程

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

第 66页

【【例例 5.105.10】】频率计数是计数器非常重要的作用之频率计数是计数器非常重要的作用之一。实现频率计数的方法包括适用于低频计数的周一。实现频率计数的方法包括适用于低频计数的周期时间求倒数法和适用于高频计数的边沿计数法。期时间求倒数法和适用于高频计数的边沿计数法。

频率计数的系统流程图程序设计频率计数的系统流程图程序设计

Page 67: 第 5 章  DAQ 虚拟仪器软件编程

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

第 67页

33 .. DAQmxDAQmx 的应用的应用 DAQmx Write.viDAQmx Write.vi :向指定的虚拟通道或者任务写入数据。:向指定的虚拟通道或者任务写入数据。 DAQmx Read.viDAQmx Read.vi :从指定的虚拟通道或者任务读取数据。:从指定的虚拟通道或者任务读取数据。 DAQmx Wait Until Done.viDAQmx Wait Until Done.vi :等待数据采集完成。:等待数据采集完成。 DAQmx Timing.viDAQmx Timing.vi :为数据采集配置采集速率和创建缓冲器。:为数据采集配置采集速率和创建缓冲器。 DAQmx Trigger.viDAQmx Trigger.vi :为数据采集任务配置触发源,触发数据采集。:为数据采集任务配置触发源,触发数据采集。 DAQmx Start Task.viDAQmx Start Task.vi :开始数据采集或者产生即将输出的数据。:开始数据采集或者产生即将输出的数据。 DAQmx Stop Task.viDAQmx Stop Task.vi :停止数据采集或者停止产生数据的输出。:停止数据采集或者停止产生数据的输出。 DAQmx Create Virtual ChannelDAQmx Create Virtual Channel :创建虚拟数据采集通道。:创建虚拟数据采集通道。 DAQmx Clear Task.viDAQmx Clear Task.vi :清除数据采集任务。:清除数据采集任务。 DAQmx Assistant Express VIDAQmx Assistant Express VI :使用:使用 NI-DAQmxNI-DAQmx 创建、编辑或运行创建、编辑或运行

一个采集任务。一个采集任务。

Page 68: 第 5 章  DAQ 虚拟仪器软件编程

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

第 68页

【【例例 5.115.11 】】利用利用 NI USB-6009NI USB-6009 数据采集卡实现数据采集卡实现单通道数据采集。单通道数据采集。

主要技术指标如下:主要技术指标如下: 88 个模拟通道(个模拟通道( 1414 位、位、 4848 位位 kS/skS/s 采样速度)。采样速度)。 22 路路 1414 位模拟输出通道。位模拟输出通道。 1212 个个 I/OI/O 通道。通道。 11 个个 3232 位计数器位计数器 // 定时器。定时器。 利用利用 Lab VIEW 8.2Lab VIEW 8.2 的的【【 DAQmx Data DAQmx Data

AcquisitionAcquisition 】】数据采集数据采集 VIVI 所构成单通道数据采集所构成单通道数据采集 VIVI 的的前面板和程序框图前面板和程序框图

Page 69: 第 5 章  DAQ 虚拟仪器软件编程

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

第 69页

单通道数据采集单通道数据采集VIVI 的程序框图的程序框图

单通道数据采集单通道数据采集VIVI 的前面板的前面板

Page 70: 第 5 章  DAQ 虚拟仪器软件编程

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

第 70页

【【例例 5.125.12】】多通道循环数据采集。多通道循环数据采集。

多通道循环数据采集多通道循环数据采集 VIVI的前面板的前面板

多通道循环数据采集多通道循环数据采集 VIVI的程序框图的程序框图

Page 71: 第 5 章  DAQ 虚拟仪器软件编程

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

第 71页

44 .共用传统.共用传统 DAQDAQ 和和 DAQmxDAQmx

Lab VIEW 7.0Lab VIEW 7.0 支持在同一台计算机里共用传统支持在同一台计算机里共用传统 DAQ APIDAQ API 和和DAQmx APIDAQmx API ,但是这必须在一定的规则允许下才能够实现。,但是这必须在一定的规则允许下才能够实现。

(( 11 )同一时间内控制装置的)同一时间内控制装置的 APIAPI 函数只能有一个。函数只能有一个。 (( 22 )使用)使用 DAQmxDAQmx 控制装置之后,在使用系统控制装置之后,在使用系统 DAQDAQ 之前,必须释之前,必须释

放所有的放所有的 DAQmxDAQmx 任务,这可以通过调用任务,这可以通过调用 DAQmx Clear Task VIDAQmx Clear Task VI 来来实现。实现。

(( 33 )使用传统)使用传统 DAQDAQ 控制装置之后,若使用控制装置之后,若使用 DAQmxDAQmx 则必须重新设则必须重新设置置 DAQDAQ 装置,一种方法是调用传统装置,一种方法是调用传统 DAQDAQ 的的 Device Reset VIDevice Reset VI ;另一;另一种方法是在种方法是在 Measurement & Automation ExploreMeasurement & Automation Explore (( MAXMAX )的传统)的传统DAQDAQ 装置目录上单击鼠标右键选择装置目录上单击鼠标右键选择 Reset Driver for Traditional NI-Reset Driver for Traditional NI-DAQDAQ 。。

(( 44 )必须使用同样的)必须使用同样的 APIAPI 去设置所有已连接的去设置所有已连接的 DAQDAQ 装置和已插入装置和已插入的的 SCXISCXI 模块。模块。

Page 72: 第 5 章  DAQ 虚拟仪器软件编程

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

第 72页

5.7 DAQ5.7 DAQ 驱动程序的开发驱动程序的开发11 .引言.引言LabVIEWLabVIEW 、、 LabWindows/CVILabWindows/CVI提供的提供的 DAQDAQ 库仅适用于库仅适用于 NINI

公司的数据采集产品,而对非公司的数据采集产品,而对非 NINI 公司生产的数据采集卡公司生产的数据采集卡通常采用以下几种驱动方式。通常采用以下几种驱动方式。

自己编写数据采集卡的驱动程序自己编写数据采集卡的驱动程序 对于用标准对于用标准 CC 语言编写的驱动程序软件的数据采集卡,语言编写的驱动程序软件的数据采集卡,

可以直接调用该驱动软件的动态连接库文件(可以直接调用该驱动软件的动态连接库文件( .dll.dll 文件)文件)。因此,一般多采用这种驱动方式来驱动数据采集卡。。因此,一般多采用这种驱动方式来驱动数据采集卡。

当使用非当使用非 NINI 公司的数据采集卡,且使用公司的数据采集卡,且使用 NINI 的的 LabVIEWLabVIEW软件,也可以利用在软件,也可以利用在 LabVIEWLabVIEW 中编写数据采集卡驱动程中编写数据采集卡驱动程序的方法实现数据采集。序的方法实现数据采集。

Page 73: 第 5 章  DAQ 虚拟仪器软件编程

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

第 73页

22 .数据采集卡驱动程序的开发方式.数据采集卡驱动程序的开发方式 LabVIEWLabVIEW提供的数据采集卡驱动程序的开发方提供的数据采集卡驱动程序的开发方式有式有 33 种。种。

11 )直接端口读)直接端口读 // 写方式(写方式( I/OI/O 方式)方式)

““ In Port.viIn Port.vi””的图标及端口的图标及端口““ Out Port.viOut Port.vi””的图标及端口的图标及端口

Page 74: 第 5 章  DAQ 虚拟仪器软件编程

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

第 74页

22 )调用)调用 CC 语言源代码的方式(语言源代码的方式( CINCIN 方式)方式)33 )调用动态链接库的方式()调用动态链接库的方式( CLFCLF 方式)方式)

【【调用库函调用库函数数】】对话框对话框

Page 75: 第 5 章  DAQ 虚拟仪器软件编程

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

第 75页

33 .数据采集卡驱动程序设计举例.数据采集卡驱动程序设计举例【【例例 5.135.13】】用“端口读用“端口读 // 写”函数驱动数据采集卡。写”函数驱动数据采集卡。 11 )) PC-6310PC-6310 简介简介 表表 5-1 5-1 控制端口的地址与功能控制端口的地址与功能

端口地址 操作命令 功能基地址 +0 写 写通道代码基地址 +1 写 启动 A/D 转换器基地址 +2 读 查询 A/D 转换状态,读高 4 位转换结果基地址 +3 读 读低 8 位转换结果

Page 76: 第 5 章  DAQ 虚拟仪器软件编程

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

第 76页

命令 D7 D6 D5 D4 D3 D2 D1 D0 A/D 转换状态读 1 × × × × × × × 正在转换读 0 × × × × × × × 转换结束

表表 5-2 A/D5-2 A/D 转换状态数据格式(转换状态数据格式(××表示任) 表示任)

端口地址 命令 D7 D6 D5 D4 D3 D2 D1 D0A/D 转换结

果基地址

+2读 0 0 0 0 DB11 DB10 DB9 DB8

读高 4 位结果

基地址+3

读 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0读低 8 位结

表表 5-3 A/D5-3 A/D 数据转换结果格式 数据转换结果格式

Page 77: 第 5 章  DAQ 虚拟仪器软件编程

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

第 77页

22 )前面板设计)前面板设计

数据采集数据采集 VIVI 的前面板的前面板

Page 78: 第 5 章  DAQ 虚拟仪器软件编程

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

第 78页

33 )程序框图设计)程序框图设计 数据采集数据采集 VIVI 的程序框图,如下列图所示。的程序框图,如下列图所示。

Page 79: 第 5 章  DAQ 虚拟仪器软件编程

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

第 79页

Page 80: 第 5 章  DAQ 虚拟仪器软件编程

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

第 80页

【【例例 5.145.14】】利用动态链接库(利用动态链接库( DLLDLL )进行数据采集。)进行数据采集。11 )数据采集动态链接库的建立)数据采集动态链接库的建立 建立动态链接库的工具很多,下面主要介绍用建立动态链接库的工具很多,下面主要介绍用

CC 语言编 写动态链接库的步骤。语言编 写动态链接库的步骤。 ① ①生成生成 CC 语言文件语言文件 ②②编写动态链接库中的函数编写动态链接库中的函数 ③③将将 CC 语言文件编译成工程文件。语言文件编译成工程文件。 ④ ④在在 MFCMFC界面菜单上做相应的修改界面菜单上做相应的修改 ⑤ ⑤生成生成 MyFunctionl.dllMyFunctionl.dll 的动态链接库的动态链接库

Page 81: 第 5 章  DAQ 虚拟仪器软件编程

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

第 81页

生成的程序中编写输出函数代码如下。生成的程序中编写输出函数代码如下。##include <windows.h>include <windows.h>

#include<dos.h>#include<dos.h>

#define DLLExport_declspec(dllexport)/*#define DLLExport_declspec(dllexport)/* 定义动态链接库的定义动态链接库的输 输 //// 出宏出宏 */*/

DLLExport float daq(int ch)/*DLLExport float daq(int ch)/* 用所定义的宏声明动态链接用所定义的宏声明动态链接库库 ////// 的函数的函数 */*/

{{ float value float value ;;int dl, dh, I, base;int dl, dh, I, base; /*/*定义过程变量定义过程变量 **//

base=0x300;base=0x300; /*/* 基地址设为基地址设为 0300H*/0300H*/

outportb(base,ch)outportb(base,ch) ;; /*/*送通道代码送通道代码 **//

Page 82: 第 5 章  DAQ 虚拟仪器软件编程

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

第 82页

for (i=0; i<100; i++)for (i=0; i<100; i++) /*/*延时,常数由机型决定延时,常数由机型决定 **//

outportb(base+1,0)outportb(base+1,0) /*/*启动启动 A/DA/D 转换,所送数值无关转换,所送数值无关 **//

do{do{ /*/*查询查询 A/DA/D 转换状态转换状态 **//

;;} while (inportb(base+2)>=128);} while (inportb(base+2)>=128);

dh=inportb(base+2);dh=inportb(base+2); /*/* 转换结束,读高转换结束,读高 44 位结果位结果**//

dl=inportb(base+3);dl=inportb(base+3); /**/**读低读低 88 位结果位结果 //

value=(dh*256+dl)*10.0/4096.0-5.0value=(dh*256+dl)*10.0/4096.0-5.0 /*/* 将结果转换为电压将结果转换为电压值值 **//

return vlaue;return vlaue; /*/*返回采集的电压值返回采集的电压值 **//

}}

Page 83: 第 5 章  DAQ 虚拟仪器软件编程

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

第 83页

22 )) LabVIEWLabVIEW 中对中对 DLLDLL 的调用的调用 利用利用 DLLDLL 方式实现数据采集的前面板,如图所方式实现数据采集的前面板,如图所

示。示。

利用利用 DLLDLL 方式实现数方式实现数据采集的程序框图据采集的程序框图

利用利用 DLLDLL 方式实现数方式实现数据采集的前面板图据采集的前面板图

Page 84: 第 5 章  DAQ 虚拟仪器软件编程

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

第 84页

5.8 5.8 数据采集卡驱动程序设计及动态链接库开数据采集卡驱动程序设计及动态链接库开发发

11 .驱动程序设计.驱动程序设计 11 )) WDMWDM 驱动程序模型驱动程序模型 软件系统框图如下:软件系统框图如下:

Page 85: 第 5 章  DAQ 虚拟仪器软件编程

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

第 85页

22 )驱动程序结构)驱动程序结构

33 )采集卡设备驱动程序开发方法)采集卡设备驱动程序开发方法

驱动程序驱动程序层次结构层次结构图图

Page 86: 第 5 章  DAQ 虚拟仪器软件编程

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

第 86页

44 )) PCIPCI总线设备驱动程序开发思想总线设备驱动程序开发思想 (( 11 )硬件)硬件 I/OI/O访问访问 (( 22 )中断处理)中断处理 (( 33 )) DMADMA 数据传输数据传输

DMADMA 驱驱动程序流程动程序流程

Page 87: 第 5 章  DAQ 虚拟仪器软件编程

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

第 87页

22 .设备卡动态链接库开发.设备卡动态链接库开发 应用层访问驱动程序的常用五个应用层访问驱动程序的常用五个 APIAPI 函数为:函数为: CreatFileCreatFile ()函数用来打开驱动程序,以获得设备句柄()函数用来打开驱动程序,以获得设备句柄

;; ReadFileReadFile ()函数用来从底层设备读取数据到开辟的缓冲()函数用来从底层设备读取数据到开辟的缓冲区;区;

WriteFileWriteFile ()函数用来将缓存中的数据传输到底层硬件()函数用来将缓存中的数据传输到底层硬件设备;设备;

CloseFileCloseFile ()函数用来关闭设备,释放设备句柄;()函数用来关闭设备,释放设备句柄; DeviceIoControlDeviceIoControl ()使用灵活,采用功能代码与驱动程()使用灵活,采用功能代码与驱动程

序交换数据;序交换数据;

Page 88: 第 5 章  DAQ 虚拟仪器软件编程

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

第 88页

在在 LabVIEWLabVIEW 中中 ,, 用户对用户对 DLLDLL 的调用的调用 ,, 可通可通过过 LabVIEWLabVIEW 本身所提供的调用库函数(本身所提供的调用库函数( Call Library Call Library FunctionFunction )来实现。在调用)来实现。在调用 DLLDLL之前,用户须知道以下之前,用户须知道以下信息:信息:

(( 11 )函数返回的数据类型。)函数返回的数据类型。 (( 22 )) DLLDLL 使用的调用规则。使用的调用规则。 (( 33 )须传递给函数的参数、数据类型以及参数的传递顺序。)须传递给函数的参数、数据类型以及参数的传递顺序。 (( 44 )) DLLDLL 所在位置。一般所在位置。一般 DLLDLL被放置在被放置在 c: \windows\ systemc: \windows\ system 目录目录

下。下。

具体操作过程如下:具体操作过程如下: (( 11 )在框图程序)在框图程序 (block diagram)(block diagram) 中选取调用库函数中选取调用库函数 (CLF)(CLF) 。。 (( 22 )双击)双击 CLFCLF 图标图标 ,, 在所显示的对话框中输入库文件名、所调用在所显示的对话框中输入库文件名、所调用

函数名、调用规则以及函数的返回类型、所有输入参数及其数据类型函数名、调用规则以及函数的返回类型、所有输入参数及其数据类型。。

(( 33 )对)对 CLFCLF 中各参数节点进行编,即可实现用户的数据采集。中各参数节点进行编,即可实现用户的数据采集。