二.3数据采集

数据采集通常是测试程序第一步需要做的工作。它负责从硬件设备得到表示物理量或信号的数据。

1》对于比较常见的仪器设备,可以使用 LabVIEW 提供的 "查找仪器驱动程序" 工具来查找并安装其驱动程序。该工具位于 LabVIEW 的菜单项:"工具 -> 仪器 -> 查找仪器驱动"。

 

 

使用 "查找仪器驱动程序" 工具查找仪器驱动程序

2》还有部分硬件设备可能没有提供 LabVIEW 驱动程序,但这些硬件设备一般会提供 C 语言驱动程序。C 语言的驱动程序一般以 DLL 的形式提供,DLL 中包含了控制硬件设备或读取数据所需的函数。同时驱动程序也会提供一个.h 头文件,用于声明驱动程序中函数的定义。

简单的包装方式可以使用 LabVIEW 中的 "导入共享库" 工具,把 DLL 中的函数全部导入 LabVIEW,包装成 VI。

 

编写驱动程序

仪器设备通常使用 GPIB、USB、网线等数据线与电脑相连。

在 LabVIEW 中向这些设备发送数据,可以使用 "仪器 I/O->VISA" 函数(图 7.14)。其中最常用的是 VISA 写入和 VISA 读取函数。

 

 

在应用程序中直接使用 VISA 函数与直接使用 CLN 节点一样,有其不足之处:不直观、配置繁琐。所以,对于没有驱动程序的硬件设备,可以自己为它编写驱动程序,然后再在应用程序中使用

 

驱动程序,实际上也就是一组 VI,每个 VI 包含了硬件设备最常用的功能。仪器的常用功能一般由一个或数个命令构成。

比如,需要从仪器中读取一个测量值,就必须先发送命令告诉仪器进行测量,然后发命令告诉仪器发送数据,再读出数据

 

如果,是一个数据采集程序,精度要求不太高,可以考虑使用 "等待下一个整数倍毫秒" 函数。如果精度要求更高,则需要再考虑其它定时方法。

 

 

 "Read Data" 和 "Write Data" 函数的运行时间都是 n 毫秒

若 n\<50,在默认情况下,上图的两个程序,循环每迭代一次,所需时间大约都为 100 毫秒。

精度

精度是不同的

循环框内使用 "等待下一个整数倍毫秒" 函数的精度远高于使用 "等待" 的精度。

 

第一次迭代的时间

 

 

在使用 "等待" 函数的程序中,每延时一次,x-y 等于 500;延时了五次,每次 100 毫秒,那么总和就是 500 毫秒。

 等待下一个整数倍毫秒" 函数的程序中,x-y 的值则每次都不确定,但是值的变化范围是确定的,在 400+2n 与 500 之间。(这是因为 "等待下一个整数倍毫秒" 开始计时的时间并不是根据程序何时运行来确定的,也就是说,对于程序来说,这个时间是不确定的。虽然 "等待下一个整数倍毫秒" 函数可以保证每次醒来的间隔是 100ms,但它却不能确定第一次醒来的时间。第一次醒来可能是在 0~100ms 之间任何一个时间。)

 

如果程序要求循环第一次迭代就必须是精确的 100 毫秒,那么该怎么办呢?很简单,让 "等待下一个整数倍毫秒" 第一次睡眠时不做任何事情,从第二次才开始使用它就行了。图 6.63 所示的程序,每次运行,x-y 的结果可以确定是 500。

 

 

 

 

 

并行与串行

在前面的程序里,延时函数与循环中其它的代码是并行的,这样,只要其它代码耗时很少,就可以认为循环每次迭代的时间就是由延时函数的输入参数来决定的。但有时候,延时函数需要与其它代码串行,比如必须在某两个节点之间延时。

 串行方式使用 "等待" 与 "等待下一个整数倍毫秒" 函数

当串行的时候,再使用 "等待" 函数计时就不那么准确了。比如上图左面那个程序,它每循环迭代一次的时间变成了 2n+100。时间 n 是不确定的,它会受到电脑的配置,CPU 负荷等因素影响。因此,用这种方式计时误差很大。

 

而 "等待下一个整数倍毫秒" 只考虑每次醒来的间隔,至于什么时候进入休眠的,并不影响醒来的时间。因此,对于它来说,并行与串行的效果是完全相同的(2n\<100 时)。

 

 

使用事件结构

利用事件结构的超时事件来定时,其精度与 "等待" 函数相当。如果程序中已经使用了事件结构,又需要定时功能,则首先可以考虑利用已有的事件结构框架

 

 

定时循环

前面介绍的几种定时方法,其共同缺点就是精度太低。要得到更高精度的定时,必须借助专门的硬件设备(参考数据采集)。

多数数据采集设备本身都带有硬件定时功能。所以,在使用数据采集设备时,通常不是由程序来控制每个采样点之间的间隔,而是直接设置数据采集设备的定时器,由数据采集设备自己控制每次采样的间隔时间。

 

 

 但如果程序是在嵌入式设备上运行的,往往需要在软件中定时,并且精度要求又比较高。此时,可以使用定时循环结构。

定时循环结构的精度远高于前面几种定时方式。

 

一个测试程序中,使用 "等待" 函数定时,运行一小时后,时间误差长达几分钟;后改用 "等待下一个整数倍毫秒" 函数,误差缩至一分钟之内;最后改用定时结构,误差缩短到了几秒钟。

 

 此外,即使是在 PC 机上运行的程序,遇到需要精确定时、需要设定多个不同级别的多个定时、或者需要动态改变定时功能这三种情况,也应该考虑使用定时循环。

定时循环位于 "编程 -> 结构 -> 定时结构" 函数子选板中。

 

 

硬件定时

使用数据采集设备时,对于采样频率的设定是极其重要的。

比如,程序要求每秒钟从数据采集设备中读取 100 个数据出来,即采样间隔时间为 10 毫秒。

自然地想到,可以使用 LabVIEW 中的延时函数。在程序中放置一个循环,循环内加一个 10 毫秒的延时,每循环一次读一个数据即可。

缺点:  一是在运行非实时操作系统如 Windows 的计算机上,延时函数可以支持的最低值也只             有 1 毫秒,采样间隔低于 1 毫秒就无法使用这种方法了。

           

         二是使用延时的方法精度较低.比如把延时设置为 1 毫秒时,其误差极大,可能高达 1                      毫 秒的几十倍(而一般数据采集对于采样间隔时间的精度要求都是比较高的);再有,                  每采集一个数据就从读一次数据采集设备,在如此高的数据量下,是一种效率非常                   低下的做法。

 

般的数据采集设备都是自带时钟的.它的时钟精度都比较高;所以,不应当使用软件的定时方法来设定程序的采样间隔,而是应当使用数据采集硬件设备上的时钟。

 

硬件设备提供的驱动程序包含有采样间隔时间(有的设备称之为 "采样频率")的设置,只需为它设置一个合适的值即可。而从硬件设备读取数据时,可以每次读一批数据以提高程序效率。

 

        

 

posted @ 2023-03-11 17:20  StudySong  阅读(122)  评论(0)    收藏  举报