首页 理论教育利用DAQmx编程进行数据采集和分析

利用DAQmx编程进行数据采集和分析

【摘要】:DAQmx编程节点位于“函数选板”→“测量I/O”→“DAQmx-数据采集”选板上,如图3-29所示。下面对一些常用的DAQmx编程节点进行介绍。图3-30 选择DAQmx任务图3-31 DAQmx虚拟通道创建函数“NI-DAQmx虚拟通道创建”函数的输入根据不同函数例程而有所不同,然而,某些输入对大部分函数的例程都是通用的。如图3-32所示是6种不同的DAQmx创建虚拟通道VI实例。在使用NI-DAQmx触发函数时,所有有效的触发信号均可作为源输入到函数中。NI-DAQmx可自动完成这些路由。

NI-DAQmx应用程序编程接口(API)适用于各种设备功能和设备系列,也就意味着在一个多功能设备的所有功能都可通过同一功能集(模拟输入、模拟输出、数字I/O和计数器)进行编程。而且,数字I/O设备和模拟输出设备也可由同一个功能集进行编程。在LabVIEW中,多态机制使得这些都成为可能。一个多态VI可接收多种数据类型,用于一个或多个输入和/或输出终端。NI-DAQmxAPI对于所有可支持的编程环境都是一样的,只需学习运用一个功能集,便可在多种编程环境下对大部分的NI数据采集硬件进行编程。

安装完NI-DAQmx驱动程序后,在LabVIEW的函数选板中就会出现DAQmx节点,利用这些节点可以进行DAQmx程序设计。DAQmx编程节点位于“函数选板”→“测量I/O”→“DAQmx-数据采集”选板上,如图3-29所示。

978-7-111-49442-3-Chapter03-35.jpg

图3-29 “DAQmx-数据采集”选板

该选板上除了含有一些基本的DAQmx编程节点外,还包括一些子选板,如DAQmx实时、DAQmx设备配置、DAQmx高级任务选项、DAQmx高级子选板等。下面对一些常用的DAQmx编程节点进行介绍。

1.DAQmx任务

该节点是一个常量,即DAQmx任务名常量,它列出了用户创建并通过DAQ助手保存的全部任务。使用操作工具在其图标上单击,可选择用户已创建的DAQmx任务,如图3-30所示。如这里可选择3.3.2节创建的“我的电压任务”。

如果需要对已经创建的任务进行编辑,则可在需要编辑的任务名上单击鼠标右键,在弹出的快捷菜单中选择“编辑NI-DAQmx任务”命令,即可打开DAQ助手设置面板对该任务进行编辑修改。

如果不存在可供选择的已创建的DAQmx任务,则可以在DAQmx任务常量的右键快捷菜单中选择“新建DAQmx任务”命令,即可立即打开NI-DAQ向导创建DAQmx任务。

在DAQmx任务名常量节点的右键快捷菜单中,还可以通过DAQmx任务名为任务生成代码,或是将DAQmx任务常量转换为DAQ助手ExpressVI。

2.DAQmx虚拟通道创建函数

“NI-DAQmx虚拟通道创建”函数(见图3-31)可以创建一个虚拟通道并将它添加至任务,也可用于创建多个虚拟通道,并将它们都添加至一个任务中。如果没有指定某个任务,则该函数自动创建一个任务。该函数是个多态VI,它有许多实例,这些实例分别对应于虚拟通道的I/O类型(如模拟输入、数字输出或计数器输出)、测量或生成操作(如温度测量、电压测量或事件计数)或在某些情况下使用的传感器(如用于温度测量的热电偶)。

978-7-111-49442-3-Chapter03-36.jpg

图3-30 选择DAQmx任务

978-7-111-49442-3-Chapter03-37.jpg

图3-31 DAQmx虚拟通道创建函数

“NI-DAQmx虚拟通道创建”函数的输入根据不同函数例程而有所不同,然而,某些输入对大部分(即使不是全部)函数的例程都是通用的。例如指定虚拟通道所采用的物理通道(模拟输入和模拟输出)、线路(数字)或计数器需要同一个输入。此外,模拟输入、模拟输出和计数器操作根据信号的最小和最大预估值,使用最小值和最大值输入来配置和优化测量和生成。而且,多种类型的虚拟通道可进行自定义扩展。

DAQmx创建虚拟通道节点图标的下拉菜单中有6种类型分别为模拟输入、模拟输出、数字输入、数字输出、计数器输入和计数器输出,各类型又有多种测量。如图3-32所示是6种不同的DAQmx创建虚拟通道VI实例。

978-7-111-49442-3-Chapter03-38.jpg

图3-32 6种不同的DAQmx创建虚拟通道VI实例

3.DAQmx创建任务

该VI节点位于“函数选板”→“测量I/O”→“DAQmx数据采集”→“DAQmx高级任务选项”选板上,其用来创建一个DAQmx数据采集任务。其图标及端口如图3-33所示。

端口的定义和说明可在LabVIEW中查看帮助信息。

4.DAQmx触发

“NI-DAQmx触发”函数可用于对触发进行配置来执行指定操作。最常用的操作是开始触发和参考触发。开始触发用于启动采集或生成,参考触发则用于在一组采集样本中创建预触发数据结束后和后触发数据开始前的位置。可对这两个触发进行配置,使其发生在数字边沿、模拟边沿、或模拟信号进入或离开窗口时。图3-34所示为DAQmx触发VI中开始数字边沿触发和参考数字边沿触发的实例图标及端口。

978-7-111-49442-3-Chapter03-39.jpg

图3-33 DAQmx创建任务VI的图标及端口

978-7-111-49442-3-Chapter03-40.jpg

图3-34 DAQmx数字边沿触发

许多数据采集应用程序需要在一个设备上实现不同功能区域的同步(例如:模拟输出和计数器),而其他的程序也需要在多个设备之间实现同步。为了实现这些同步性,触发信号必须在单个设备的不同功能区域间或在不同的设备间进行路由。而NI-DAQmx则可自动执行这些路由。在使用NI-DAQmx触发函数时,所有有效的触发信号均可作为源输入到函数中。例如,在图3-35的NI-DAQmxTriggerVI中,设备2的开始触发信号可用作设备1的开始触发源,而无须进行任何显式路由。

5.DAQmx定时

“NI-DAQmx定时”函数用于对硬件定时的数据采集操作进行定时配置,包括指定操作是连续执行还是有限执行、选择采集或生成的样本数量以进行有限操作,以及需要时创建缓冲区。它也是一个多态VI,有多个VI实例可供选择,如采样时钟(模拟/计数器/数字)、握手(数字)和隐式(计数器)等。图3-36所示为采样时钟(模拟/计数器/数字)VI实例的图标及端口。

978-7-111-49442-3-Chapter03-41.jpg

图3-35 NI-DAQmxTriggerVI

978-7-111-49442-3-Chapter03-42.jpg

图3-36 采样时钟VI实例的图标及端口

对于需要采样定时(模拟输入、模拟输出、计数器)的操作,“NI-DAQmx定时”函数的采样时钟例程可用于设置采样时钟源和采样速率,采样时钟源可以是内部也可以是外部的信号源。采样时钟能够控制采集或生成样本的速率。每个时钟脉冲将启动任务中每个虚拟通道的样本采集或生成。

为了实现数据采集程序间的同步,定时信号必须与触发信号同样的方式在一个设备的不同功能区域间或在多个设备间进行路由。NI-DAQmx可自动完成这些路由。所有有效的定时信号都可作为“NI-DAQmx定时”函数的输入源。例如,在图3-37所示的DAQmx TimingVI中,设备的模拟输出采样时钟信号可用作模拟输入通道采样时钟的信号源,而无需进行任何显式路由。

6.DAQmx开始任务

“NI-DAQmx开始任务”函数可以将一个任务显式转换成运行状态,其图标及端口如图3-38所示。在运行状态下,任务将进行指定的采集和生成。当“NI-DAQmx读取”函数运行而“NI-DAQmx开始任务”函数未运行时,任务将隐式转换成运行状态或自动启动。这种隐式转换也会发生在“NI-DAQmx写入”函数在指定的自动开始输入驱动下运行但“NI-DAQmx开始任务”函数未运行时。

978-7-111-49442-3-Chapter03-43.jpg

图3-37 DAQmx TimingVI

978-7-111-49442-3-Chapter03-44.jpg

图3-38 DAQmx开始任务的图标及端口

虽然不一定需要,但包含硬件定时的采集或生成的任务最好使用“NI-DAQmx开始任务”函数来显式启动。而且,如果需要多次执行“NI-DAQmx读取”函数或“NI-DAQmx写入”函数(比如在一个循环中),则应使用“NI-DAQmx开始任务”函数。否则任务会由于不断重复开始和停止而影响执行性能。

7.DAQmx读取

“NI-DAQmx读取”函数可从指定的采集任务中读取样本。这时一个多态VI,针对不同的函数例程可选择不同的采集类型(模拟、数字、或计数器)、虚拟通道数量、采样数量和数据类型。指定的采样数量从DAQ板卡上的FIFO传输到RAM中的PC缓存后,“NI-DAQmx读取”函数再将样本从PC缓存转移到应用程序开发环境(ADE)内存中。图3-39所示为DAQmx读取VI中“模拟1D波形N通道N采样”的实例图标及端口。

978-7-111-49442-3-Chapter03-45.jpg

图3-39 DAQmx读取模拟1D波形N通道N采样实例图标及端口

可读取多个采样的“NI-DAQmx读取”函数例程包括一个用于指定函数执行时每个通道需要读取的采样数量的输入。对于有限采集,将每通道采样数指定为-1,函数将等待所有请求的样本采集完毕,然后再对这些样本进行读取。对于连续采集,如果将每通道采样数指定为-1,则函数执行时将读取当前缓存区中的所有样本。

8.DAQmx写入

“NI-DAQmx写入”函数用于将样本写入指定的生成任务中,相当于读取的逆过程。它是一个多态VI,针对不同的函数例程可选择不同的生成类型(模拟或数字)、虚拟通道数量、采样数量和数据类型。“NI-DAQmx写入”函数将样本从应用程序开发环境(ADE)写入到PC缓存中。然后这些样本从PC缓存传输到DAQ板卡FIFO以进行生成。图3-40所示为DAQmx写入VI中“模拟1D波形N通道N采样”的实例图标及端口。

978-7-111-49442-3-Chapter03-46.jpg

图3-40 DAQmx写入模拟1D波形N通道N采样实例图标及端口

每个“NI-DAQmx写入”函数的例程包含一个自动开始输入,用于在任务没有显式启动时判定该函数是否隐式启动任务。在“NI-DAQmx开始任务”一节已介绍过,显式启动硬件定时的生成任务时应使用“NI-DAQmx开始任务”函数。如果需要多次执行“NI-DAQmx写入”函数,则还应使用该函数来使性能最优化。

9.DAQmx结束前等待

“NI-DAQmx结束前等待”函数用于等待数据采集完毕后结束任务,该VI的图标及端口如图3-41所示。该函数可确保指定的采集或生成完成后任务才停止。大多数情况下,“NI-DAQmx结束前等待”函数用于有限操作的情况。一旦该函数执行完毕,则表示有限采集或生成已完成,任务可在不影响操作的情况下停止。此外,超时输入可用于指定最长等待时间。如果采集或生成没有在该时间内完成,则函数将退出并生成一个相应错误。

978-7-111-49442-3-Chapter03-47.jpg

图3-41 DAQmx结束前等待VI的图标及端口

10.DAQmx停止任务

该VI用于停止任务,并将任务恢复到执行前的状态,其图标及端口如图3-42所示。

978-7-111-49442-3-Chapter03-48.jpg

图3-42 DAQmx停止任务的图标及端口

对于DAQmx启动任务VI和DAQmx停止任务VI,需要注意的是,如果在循环中多次使用“DAQmx读取”VI或“DAQmx写入”VI,但是没有使用“DAQmx开始任务”VI和“DAQmx停止任务”VI,则任务将反复进行开始和停止操作,这会大大降低应用程序的性能。

11.DAQmx清除任务

NI-DAQmx清除任务函数用于清除指定的任务。如果任务正在运行,则函数将先停止任务,然后释放任务所有的资源。一旦任务被清除后,除非再次创建,否则该任务无法再使用。所以,如果需要再次使用任务,则应使用“NI-DAQmx停止任务”函数来停止任务,而不是将其清除。DAQmx任务清除的图标及端口如图3-43所示。

978-7-111-49442-3-Chapter03-49.jpg

图3-43 DAQmx任务清除的图标及端口

对于连续操作,应使用“NI-DAQmx任务清除”函数来停止实际的采集或生成。如果在循环内部使用“DAQmx创建任务”VI或“DAQmx创建虚拟通道”VI,那么应在任务结束前在循环中使用“DAQmx清除任务”VI,以避免不必要的内存分配。

12.DAQmx属性

通过“NI-DAQmx属性”可以访问与数据采集操作相关的所有属性。这些属性可通过“NI-DAQmx属性”写入来进行设置,并且当前的属性值也可以通过“NI-DAQmx属性”读取。在LabVIEW中,一个“NI-DAQmx属性节点”可用于写入或读取多个属性。DAQmx属性节点提供了对所有与数据采集操作相关属性的访问,有DAQmx通道属性节点、DAQmx定时属性节点、DAQmx触发属性节点、DAQmx读取属性节点和DAQmx写入属性节点,如图3-44所示。

978-7-111-49442-3-Chapter03-50.jpg

图3-44 DAQmx属性节点