在前面几篇有关计数器的文章中,谈到了缓冲区的概念。对于数据采集的另外两种类型,模拟量输入(AD)和模拟量输出,缓冲区的概念更为重要。

      在数据采集过程中经常遇到缓冲区重写错误,一般提示,原来采集的数据已经被重写。这样的错误与缓冲区密切相关。

      在传统DAQ中缓冲区非常明显,但是在新的DAQMX中,缓冲区的分配被隐含了,从程序框图上看不到缓冲区的概念 ,这一方面简化了编程的复杂性,对于初学者非常有利, 但是另一方面,由于不了解缓冲区的基本原理,导致采集程序的低效和错误无法处理。

      下面谈一下NI板卡模拟量缓冲区是如何确定的,这些知识在DAQMX文档中解释的非常清楚。

      输入类型任务这里指的模拟量输入,我们知道模拟量输入可以分为单点采集方式、定点采集方式和连续采集方式。

A、单点采集方式不需要分配缓冲区。
B、定点采集方式

      所谓定点采集,是由用户确定需要采样的点数,这可以通过设置Samples Per  Channel参数实现。比如每通道采集1000个采样,采集8个通道,则分配的缓冲区大小为1000×8,因此LV分配的缓冲区是足够容纳所有采样点的。

Picture
上面是定点采集的程序框图,红色箭头处表示与分配缓冲区相关的参数。
  1. 图中虚拟通道VI中,物理通道参数决定了需要采集的通道数。
  2. 采样模式确定了定点采集方式。
  3. Samples per channel(每通道采样数)和物理通道数共同决定了缓冲区的大小,为二者的乘积关系。
  4. RATE(采样率)在定点方式下与缓冲区的大小无关,采样率决定了完成所有采样所需要的时间,不影响缓冲区的大小。
  5. 定点采集方式下读函数一次读取整个缓冲区, 不需要设置要读取的采样数。
C、连续采集方式

      同定点采集方式类似,连续采集方式下,LV分配的最小缓冲区等于每通道采样数X通道数,保证能容纳规定的采样数量。但是与定点采样不同,根据每通道采样数和采样速率设置不同,LV会对缓冲区进一步调整,如下表所示。连续采集方式下,缓冲区的大小不仅取决于Samples Per Channel,也取决于Sample Rate,缓冲区的大小取二者之间较大的数。

      连续采集方式缓冲区的大小与采样率相同,这是可以理解的。设想一下,在高速采样的情况下,采样速率为100万每秒,每通道采样1000个,假设为单通道采集,则1000个采样需要时间为1毫秒。如果缓冲区为1000,则必须保证1MS 读取一次,每次1000个。这对于WINDOWS操作系统,由于其非实时性,根本无法保证1MS循环一次。所以必须要扩大缓冲区的大小,才能满足要求。

      一般情况下,连续采集的缓冲区大小决定于采样速率,其分配情况如下表所示。

Sample Rate                  Buffer Size  
No rate specified            10 kS
0–100 S/s                      1 kS
100–10,000 S/s              10 kS
10,000–1,000,000 S/s     100 kS
>1,000,000 S/s               1 MS

      看一下连续采集方式下的程序框图。

Picture
  1. 虚拟通道设置与定点采集相同,物理通道决定了采集的通道数。
  2. 采样模式确定为连续采集方式。
  3. Samples Per ChanelX通道数决定最小缓冲区的大小。
  4. 采样率决定了是否调整缓冲区大小,如上述表格所示。
  5. 读函数必须规定每次读取采样数,这样通过采样率和每通道采样数,就可以确定循环时间。
      不仅仅是AD采集需要缓冲区,缓冲计数方式和DA波形输出都涉及到缓冲区分配的问题。对于AD采集,为了充分利用缓冲区的内存,采用循环缓冲的方式,在以后的文章中,会专门说明循环缓冲区的工作原理。

Picture
1/24/2012 09:21:55 pm

will be restored before long

Reply
1/27/2012 10:16:47 am

nice post

Reply
3/22/2012 06:37:21 pm

Good post bro

Reply



Leave a Reply.