微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 测试测量 > Labview > LabVIEW实时数据采集

LabVIEW实时数据采集

时间:10-02 整理:3721RD 点击:
学会NI-DAQmx中的十个函数,解决80%的数据采集应用问题。
自从NI-DAQmx发布以来,NI数据采集(DAQ)用户就充分利用了它的许多特性,这些特性是为节省开发时间和提高数据采集应用程序的性能而设计的。
一个能节省相当大一部分开发时间的特性是NI-DAQmx应用程序编程接口(API),它在各种设备功能和设备系列中都是相同的。这就意味着一个多功能设备的所有功能可由同样的函数集编程得到(模拟输入、模拟输出、数字I/O和计数器)。而且,一个数字I/O设备和一个模拟输出设备都可使用相同的函数集编程得到。在LabVIEW中,由于多态机制,因而这是可以实现的。一个多态的VI接受各种数据类型以用于一个或多个输入和/或输出终端。NI-DAQmx API在它所支持的所有编程环境中也是保持一致的。您仅仅需要学会如何使用一个单一的函数集就可以在多种编程环境中对大部分NI数据硬件进行编程。
NI-DAQmx能够提高您的开发经验的另一个特性是DAQ ASSISTANT。这个工具通过一个图形化接口来配置简单和复杂的数据采集任务,从而帮助您无需编程即可创建您的应用程序。而且,同步,一个通常很难实现的过程(因为触发和/或时钟信号必须手动传递),利用NI-DAQmx则可以毫不费力地实现,NI-DAQmx会自动地完成单一设备上不同功能区域间和多个设备之间的信号传递。
您使用NI-DAQmx所建立的数据采集应用程序是受益于一个为实现最大化性能而设计的体系结构。这是一个高效的状态模型从而免去了不必要的重复配置。由于去除了开头,配置和采集就进行了优化。此外,您可以达到超过50Ks/S的单点I/O速率。由于采用内存映射寄存器,这种性能水平是可以实现的。

NI-DAQmx体系结构的另一个重要的特性是测量多线程(Measurement Multithreading.)。自从NI-DAQmx实现多线程以来,多个数据采集操作可以同时进行,极大地提高了包含多个操作的应用程序的性能。它也极大地简化了对这些应用的编程。

关于NI-DAQmx益处的详细信息可以在文档——NI-DAQmx的优势——中获得。为了开始利用这些优势,您只需要学习几个函数。事实上,十个NI-DAQmx函数提供的功能即可解决80%的数据采集应用。这些函数将会详细地描述以帮助您理解它们的功能和使用它们的应用类型。
注意:本文档中所有引用的例程都可在以下位置获得
LabVIEW
帮助>>寻找例程>>硬件输入和输出>>DAQmx
LabWindows/CVI
帮助>>寻找例程>>硬件输入和输出>>DAQmx
. NET
…\National Instruments\MeasurementStudio70\DotNET\Examples\DAQmx
目录:
? DAQ Assistant(数据采集助手)
? NI-DAQmx创建虚拟通道函数
? NI-DAQmx触发函数
? NI-DAQmx定时函数
? NI-DAQmx开始任务函数
? NI-DAQmx读取函数
? NI-DAQmx写入函数
? NI-DAQmx等待直至完成函数
? NI-DAQmx清除任务函数
? NI-DAQmx属性节点

DAQ Assistant (数据采集助手)
工具>>创建/编辑 DAQmx任务[CVI]
项目>>添加新项目>>DAQmx任务[.NET]
DAQ Assistant是一个图形化的界面,用于交互式地创建、编辑和运行NI-DAQmx虚拟通道和任务。一个NI-DAQmx虚拟通道包括一个DAQ设备上的物理通道和对这个物理通道的配置信息,例如输入范围和自定义缩放比例。一个NI-DAQmx任务是虚拟通道、定时和触发信息、以及其他与采集或生成相关属性的组合。在下图中,DAQ ASSISTANT配置成完成一个应变测量。

下面的文档叙述了DAQ ASSISTANT在LabVIEW、LabWindows/CVI和.NET中的使用。
? NI-DAQmx Express VI指南
? 在LabWindows/CVI中使用DAQ ASSISTANT
? 在Measurement Studio中使用DAQ ASSISTANT

DAQ ASSISTANT也可以生成代码来配置和/或完成特定的采集或生成 (Generation)。这个LabVIEW中的过程在DAQ ASSISTANT帮助中,以及文档——使用DAQ ASSISTANT来自动生成LabVIEW代码——中进行了叙述。下面显示了一个DAQ ASSISTANT的实例以及相应的所自动生成的配置和LabVIEW代码例程。
与DAQ ASSISTANT所能提供的相比,某些数据采集应用程序需要更大的灵活性和/或性能。这些应用程序需要下面所叙述的简单、但功能强大的NI-DAQmx函数。

NI-DAQmx创建虚拟通道函数
库>>NI-DAQmx>>通道创建/配置[CVI]
任务.通道.创建通道属性[.NET]
NI-DAQmx创建虚拟通道函数创建了一个虚拟通道并且将它添加成一个任务。它也可以用来创建多个虚拟通道并将它们都添加至一个任务。如果没有指定一个任务,那么这个函数将创建一个任务。NI-DAQmx创建虚拟通道函数有许多的实例。这些实例对应于特定的虚拟通道所实现的测量或生成类型。下面是四个不同的NI-DAQmx创建虚拟通道VI实例的例程。
NI-DAQmx创建虚拟通道函数的输入随每个函数实例的不同而不同,但是,某些输入对大部分函数的实例,即使不是全部,也是相同的。例如一个输入需要用来指定虚拟通道将使用的物理通道(模拟输入和模拟输出)、线数(数字)或计数器。此外,模拟输入、模拟输出和计数器操作使用最小值和最大值输入来配置和优化基于信号最小和最大预估值的测量和生成。而且,一个自定义的刻度可以用于许多虚拟通道类型。在下面的LabVIEW程序框图中,NI-DAQmx创建虚拟通道VI用来创建一个热电偶虚拟通道。

供检验的实例
LabVIEW
Write Dig Port.vi
Cont Acq Thermocouple Samples-Int Clk.vi
CVI
Write Dig Port
Cont Thrmcpl Samples-Int Clk
.NET
WriteDigPort
ContAcqThermocoupleSamples_IntClk
NI-DAQmx触发函数
库>>NI-DAQmx>>触发函数[CVI]
任务.触发属性[.NET] NI-DAQmx触发函数配置一个触发器来完成一个特定的动作。最为常用的动作是一个启动触发器(Start Trigger)和一个参考触发器(Reference Trigger)。启动触发器初始化一个采集或生成。参考触发器确定所采集的采样集中的位置,在那里前触发器数据(pretrigger)结束,而后触发器(posttrigger)数据开始。这些触发器都可以配置成发生在数字边沿、模拟边沿或者当模拟信号进入或离开窗口。在下面的LabVIEW程序框图中,利用NI-DAQmx触发VI,启动触发器和参考触发器都配置成发生在一个模拟输入操作的数字边沿。

许多数据采集应用程序需要一个单一设备不同功能区域的同步(例如,模拟输出和计数器)。其他的则需要多个设备进行同步。为了达到这种同步性,触发信号必须在一个单一设备的不同功能区域和多个设备之间传递。NI-DAQmx自动地完成了这种传递。当使用NI-DAQmx触发函数时,所有有效的触发信号都可以作为函数的源输入。例如,在下面的NI-DAQmx触发VI中,用于设备2的启动触发器信号可以用作设备1的启动触发器的源,而无需进行任何显式的传递。

供检验的实例
LabVIEW
Acq&Graph Voltage-Int Clk-Dig Start&Ref.vi
Cont Acq&Graph Voltage-Int Clk-Analog Start.vi
CVI
Acq-Int Clk-Dig Start&Ref
Cont Acq-Int Clk-Anlg Start
.NET
AcqVoltageSamples_IntClkDigStartAndRef
ContAcqVoltageSamples_IntClkAnalogStart
NI-DAQm定时函数
库>> NI-DAQmx>>定时函数[CVI]
任务.定时属性[.NET]
NI-DAQmx定时函数配置定时以用于硬件定时的数据采集操作。这包括指定操作是否连续或有限、为有限的操作选择用于采集或生成的采样数量,以及在需要时创建一个缓冲区。

对于需要采样定时的操作(模拟输入、模拟输出和计数器),NI-DAQmx定时函数中的采样时钟实例设置了采样时钟的源(可以是一个内部或外部的源)和它的速率。采样时钟控制了采集或生成采样的速率。每一个时钟脉冲为每一个包含在任务中的虚拟通道初始化一个采样的采集或生成。下图中,LabVIEW程序框图演示了使用NI-DAQmx定时VI中的采样时钟实例来配置一个连续的模拟输出生成(利用一个内部的采样时钟)。
为了在数据采集应用程序中实现同步,如同触发信号必须在一个单一设备的不同功能区域或多个设备之间传递一样,定时信号也必须以同样的方式传递。NI-DAQmx也是自动地实现这个传递。所有有效的定时信号都可以作为NI-DAQmx定时函数的源输入。例如,在下面的DAQmx定时VI中,设备的模拟输出采样时钟信号作为同一个设备模拟输入通道的采样时钟源,而无需完成任何显式的传递。
文档——NI-DAQmx定时和同步特性——包含了关于使用NI-DAQmx定时函数来利用NI-DAQmx完成同步的其他信息。
大部分计数器操作不需要采样定时,因为被测量的信号提供了定时。NI-DAQmx定时函数的隐式实例应当用于这些应用程序。在下面的LabVIEW程序框图中,NI-DAQmx定时VI的隐式实例用来将一个缓冲的脉冲宽度采集配置成有限的特定个数的采样。
某些数据采集设备支持将握手作为它们数字I/O操作的定时信号的方式。握手使用与外部设备之间请求和确认定时信号的交换来传输每一个采样。NI-DAQmx定时函数的握手实例为数字I/O操作配置握手定时。

供检验的实例
LabVIEW
Cont Gen Voltage Wfm-Ext Clk.vi
Meas Buffered Semi-Period-Finite.vi
CVI
Cont Gen Volt Wfm-Ext Clk
Buff Semi-Period-Finite
.NET
ContGenVoltageWfm_ExtClk
MeasBuffered_SemiPeriodFinite
NI-DAQmx启动任务函数
库>>NI-DAQmx>>任务配置/控制>>启动任务 [CVI]
任务.启动方式[.NET]
正如我们在简介中所提到的那样,NI-DAQmx所使用的状态模型免去了不需要的重复配置来获得一个更高的效率并且将性能最大化。这个状态模型包括任务可存在的五个状态。关于每一个状态的详细
信息可以在关键的NI-DAQmx概念>>任务>>任务状态模型中的NI-DAQmx帮助中找到。

NI-DAQmx启动任务函数显式地将一个任务转换至运行状态。在运行状态,这个任务完成特定的采集或生成。如果没有使用NI-DAQmx启动任务函数,那么在NI-DAQmx读取函数执行时,一个任务可以隐式地转换至运行状态,或者自动开始。这个隐式的转换也发生在如果NI-DAQmx启动任务函数未被使用而且NI-DAQmx写入函数与它相应指定的自启动输入一起执行。

虽然不是经常需要,但是使用NI-DAQmx启动任务函数来显式地启动一个与硬件定时相关的采集或生成任务是更值得选择的。而且,如果NI-DAQmx读取函数或NI-DAQmx写入函数将会执行多次,例如在循环中, NI-DAQmx启动任务函数就应当使用。否则,任务的性能将会降低,因为它将会重复地启动和停止。阐述何时使用NI-DAQmx启动任务函数的其他信息可以在关键的NI-DAQmx概念>>任务>>显式启动一个任务中的NI-DAQmx帮助中找到。下面的LabVIEW程序框图演示了不需要使用NI-DAQmx启动函数的情形,因为模拟输出生成仅仅包含一个单一的、软件定时的采样。

相反,下面的LabVIEW程序框图演示了应当使用NI-DAQmx启动函数的情形,因为NI-DAQmx读取函数需要执行多次来从计数器读取数据。
供检验的实例
LabVIEW
Gen Dig Pulse Train-Continuous.vi
Cont Acq 0-20mA Current Samples-Int Clk.vi
CVI
Dig Pulse Train-Cont
Cont 0-20mA Samps-Int Clk
.NET
GenDigPulseTrain_Continuous
ContAcq0_20mACurrentSamples_IntClk

NI-DAQmx读取函数
库>> NI-DAQmx>>读取函数[CVI]
通道读取类[.NET]
NI-DAQmx读取函数需要从特定的采集任务中读取采样拟、数字或计数器)、虚拟通道数、采样数和数据类型。下面是四个不同的NI-DAQmx读取VI实例的例程。

可以读取多个采样的NI-DAQmx读取函数的实例包括一个输入来指定在函数执行时读取数据的每通道采样数。对于有限采集,通过将每通道采样数指定为-1,这个函数就等待采集完所有请求的采样数,然后读取这些采样。对于连续采集,将每通道采样数指定为-1将使得这个函数在执行的时候读取所有现在保存在缓冲中可得的采样。在下面的LabVIEW程序框图中,NI-DAQmx读取VI已经被配置成从多个模拟输入虚拟通道中读取多个采样并以波形的形式返回数据。而且,既然每通道采样数输入已经配置成常数10,那么每次VI执行的时候它就会从每一个虚拟通道中读取10个采样。

供检验的实例
LabVIEW
Acq One Sample.vi
Read Dig Chan.vi
CVI
One Sample
Read Dig Chan
.NET
AcqOneVoltageSample
ReadDigChan

NI-DAQmx写入函数
库>>NI-DAQmx>>写入函数[CVI]
通道写入类[.NET]
NI-DAQmx写入函数将采样写入指定的生成任务中。这个函数的不同实例允许选择生成类型(模拟或数字),虚拟通道数、采样数和数据类型。下面是四个不同的NI-DAQmx写入VI实例的例程。

每一个NI-DAQmx写入函数实例都有一个自启动输入来确定,如果还没有显式地启动,那么这个函数是否将隐式地启动任务。正如我们刚才在本文NI-DAQmx启动任务部分所讨论的那样,NI-DAQmx启动任务函数应当用来显式地启动一个使用硬件定时的生成任务。它也应当用来最大化性能,如果NI-DAQmx写入函数将会多次执行。对于一个有限的模拟输出生成,下面的LabVIEW程序框图包括一个NI-DAQmx 写入VI的自启动输入值为“假”的布尔值,因为生成任务是硬件定时的。NI-DAQmx写入VI已经被配置将一个通道模拟输出数据的多个采样以一个模拟波形的形式写入任务中。

供检验的实例
LabVIEW
Gen Voltage Update.vi
Write Dig Chan.vi
CVI
Volt Update
Write Dig Chan
.NET
GenVoltageUpdate
WriteDigChan
NI-DAQmx等待直至完成函数
库>> NI-DAQmx>>任务配置/控制>>等待直至任务完成函数[CVI]
任务.等待直至完成方式[.NET]

NI-DAQmx等待直至完成函数在结束之前等待数据采集操作的完成。这个函数应当用于保证在任务结束之前完成了特定的采集或生成。最为普遍的是,NI-DAQmx等待直至完成函数用于有限操作。一旦这个函数完成了执行,有限采集或生成就完成了,而且无需中断操作就可以结束任务。此外,超时输入允许指定一个最大的等待时间。如果采集或生成不能在这段时间内完成,那么这个函数将退出而且会生成一个合适的错误信号。下面LabVIEW 程序框图中的NI-DAQmx等待直至完成VI用来验证有限模拟输出操作在任务清除之前就已经完成。

供检验的实例
LabVIEW
Gen Dig Pulse.vi
Gen Mult Volt Updates-Int Clk.vi
CVI
Dig Pulse
Mult Volt Updates-Int Clk
.NET
GenDigPulse
GenMultVoltUpdates_IntClk

NI-DAQmx清除任务函数
库>> NI-DAQmx>>任务配置/控制>>清除任务函数[CVI]
任务.处理方式[.NET]
NI-DAQmx清除任务函数可以清除特定的任务。如果任务现在正在运行,那么这个函数首先中止任务然后释放掉它所有的资源。一旦一个任务被清除,那么它就不能被使用,除非重新创建它。因此,如果一个任务还会使用,那么NI-DAQmx结束任务函数就必须用来中止任务,而不是清除它。
对于连续的操作,NI-DAQmx清除任务函数必须用来结束真实的采集或生成。在下面的LabVIEW程序框图中,一个计数器生成了一个连续的脉冲序列。这个脉冲序列不断输出直至等待循环退出和NI-DAQmx清除任务VI执行。
供检验的实例
LabVIEW
Cont Gen Voltage Wfm-Int Clk.vi
Count Digital Events.vi
CVI
Cont Gen Volt Wfm-Int Clk
Cnt Dig Events
.NET
ContGenVoltageWfm_IntClk
CountDigEvents
特性[CVI]
属性[.NET]

NI-DAQmx属性节点
提供了对所有与数据采集操作相关属性的访问。这些属性可以通过写入NI-DAQmx属性节点来设置,而且当前的属性值可以从NI-DAQmx属性节点中读取。而且,在LabVIEW中,一个NI-DAQmx属性节点可以用来写入多个属性或读取多个属性。例如,下面的LabVIEW NI-DAQmx定时属性节点设置了采样时钟的源,然后读取采样时钟的源,最后设置采样时钟的有效边沿。

许多属性可以使用前面讨论的NI-DAQmx函数来设置。例如,采样时钟源和采样时钟有效边沿属性可以使用NI-DAQmx定时函数来设置。然而,一些相对不常用的属性只可以通过NI-DAQmx属性节点来访问。在下面的LabVIEW程序框图中,一个NI-DAQmx通道属性节点用来使能硬件低通滤波器,然后设置滤波器的截止频率来用于应变测量。
供检验的实例
LabVIEW
Cont Acq Strain Samples.vi
Cont Acq Accel Samples-Int Clk-Analog Start.vi
CVI
Cont Strain Samples
Cont Accel Samps-Int Clk-Anlg Start
.NET
AcqStrainSamples
ContAcqAccelSamp_IntClk_AnalogStart

结论 NI-DAQmx节省了数据采集应用程序的开发时间并提高了它的性能。NI-DAQmx节省开发时间的众多方式之一是提供一个仅需要少量函数的API来使用它绝大多数的功能。事实上,在学习完本文所讨论的10个函数之后,您就可以解决80%的数据采集应用。


这么完整的分享真的是太棒了啊!加分加分

果断收藏留着备用啊

有借鉴价值,值得好好学习。

有借鉴价值,值得好好学习。

很不错  大赞 哦

反反复复反反复复反反复复吩咐

收藏收藏之……哈哈

收藏收藏之……哈哈,多谢分享啊

非常感谢啊,非常感谢

收藏起来有空好好看一看学习学习

刚开始接触,好多都还没整明白,不明觉厉!

很详细,不错!

啊啊啊啊啊啊啊啊啊

LABVIEW串口采集数据时VISA串口设置参数怎么定,与什么有关

正在做压力测试采集,果断收藏学习

收藏起来,学习一下

没有例子。

赞!

小编太好了,分享的很有价值,正是我想要的,多谢啦。
也挺喜欢你的头像的。

小编好人啊,太感谢啦

很好啊!啊啊啊啊啊啊啊啊

先马克一个,然后慢慢看

太好了,很有用,帮助理解,正在学习

kankan                                         

大赞一个。

学习一下。

谢谢小编分享,学习了。

谢谢小编分享

学习好材料!

这些都用过,个人觉得还是对采集相关知识的了解和整个程序的构架更重要!

毕业设计下下下

很不错的资料

学习了,谢谢!

非常感谢

想问一下,DAQ助手能否在一个程序中多次使用,即DAQ既能得到输入信号,又能进行输出。

很全面

学习了,,,谢谢,,,,

学习了,谢谢啦。

谢谢。

谢谢小编的分享,学习了!

不明觉厉

非常感谢分享

1111111111111111111111111111111111

谢谢分享··

回复

回复

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top