为什么选择 LabVIEW 做数据采集?

LabVIEW 是一种面向工程师的编程语言,采用图形化编程,多线程同步运行,只需要连线就能进行软件的编制。提供了丰富的函数库和控件,搭建软件的界面非常迅速,一个熟练的工程师可能只需要几分钟就能搭建一个数据采集系统。

 

NI 的数据采集卡提供了对 LabVIEW 丰富且完备的支持,驱动函数都是在底层的基础函数上进行了高度封装,用户不需要对采集卡具体工作有深入的了解,只要掌握这些驱动函数输入 / 输出端口的意义,就能进行数据采集开发。

 

LabVIEW 中的模拟输入

 


连续模拟输入

 


需要注意,程序读取数据的速度要不慢于设备往缓冲区中存放数据的速度,这样才能保证连续运行时,缓冲区中的数据不会溢出。可以通过调节以下 3 个参数来达到上述要求:

 

buffer size(缓存的大小)

scan rate(采样速率)

number of scans to read at a time(每次读取的样本数)

 

连续采集的程序模型为:

 


连续模拟输入程序实例

 


对于一些复杂的采集任务,可以采用一些特殊的采集方式,例如采用外部时钟采集、触发采集等;

 

触发采集种类很多,根据触发信号类型可以分为数字信号触发和模拟信号触发;根据触发形式可以分为边沿触发和窗口触发;根据触发功能可以分为启动触发、暂停触发和参考触发;

 

不是每个数据采集卡都具有这些特殊采样功能的,使用前要查看采集卡的使用手册;

 

在模拟输入采集系统中,实现数据采集并不复杂,数据处理与分析才是难点。

 

LabVIEW 中的模拟输出

 


连续模拟输出

有两种形式的连续模拟输出,第一种就是在模拟输出之前,将数字信号写入缓冲区中,然后设备连续不断地将缓冲区中的数据通过 DAC 重复输出。这种连续模出执行效率很高,但是需要写入的数字信号必须是整周期的,不然输出模拟信号将会不连续,在使用上不够灵活。

 


第二种方式就是在设备将缓冲区中数据输出的同时,不断地将数字信号写入缓冲区中,这种方式在编程上比较复杂,但是灵活性比较高,只要保证这一次写入缓冲区的数字信号和上次是连续的就行,不需要每次写入的信号是整周期的。

 


LabVIEW 中的数字 I/O

一般情况下,数字 I/O 按照 TTL 逻辑电平设计,其逻辑低电平在 0 到 0.7V 之间,高电平在 3.4 到 5.0V 之间;

 

在硬件设备上,多路(Line)数字 I/O 组成一组后被称为端口(Port)。一个端口由多少个数字通路组成是依据其设备而定的,在多数情况下 8 个数字通路组成一个端口;

 

在 LabVIEW 中对数字 I/O 的操作非常简单,可以对整个端口进行操作,也可以对端口中的一路或多路同时进行操作。

 

LabVIEW 中的计数器

 

 


如上图为计数器的简化模型:一个 SOURCE 输入口、一个 GATE 输入口、一个 OUT 输出口,以及一个计数寄存器。

 

可以设置对 SOURCE 输入端口由高到低或由低到高的信号状态进行计数;可以设置内部计数寄存器的计数方式为递增或递减;

 

GATE 端口的输入控制计数器的计数操作,可以设置为以下几种门限工作方式:高电位计数、低电位计数、上升沿触发计数、下降沿触发计数,以及无门限方式;

 

可以使用 OUT 口发生多种类型的波形,或者用于计数器的串级使用中,从而增大计数器的量程。

 

计数器的频率测量

 


并行安排处理

多功能 DAQ 设备上的模拟输入、模拟输出、数字 I/O 和计数器等功能是能够同时运行的,可以在程序中并行安排这些功能,还能实现它们的同步。

 

如下图,是一个连续采集和连续模拟输出并行安排的程序,利用传递 error 信息的数据线安排并行的执行顺序。