这时我们最简单的程序 如下图:
这样我们就能每隔while的延迟时间来进行采样。
但是有的时候我们想进行多点的采样,就是说每次采样获取N个的数据。而用上面的程序的其他多态VI子程序,虽然可以规定采样的数量,但是无法规定程序的采样频率。程序总是在最快的时间内采够所需的数据并显示出来。
在这种情况下我们就要用到这个函数。 DAQmx Timing。即
在这里设置采样的个数和采样速率。
相应的信号采集的程序如下图:
我们在Timing中规定了采样 的模式——有限采样,采样的个数——10个,采样的频率——一秒钟1个。这样的设置下,程序的执行规则就是,执行到read函数的时候等待,等待采样结束后将数据发送到波形图表中,就是说,程序在read的时候 等待大量的时间,而不是一瞬间完成的,这就解释了为什么图标中的新增数据是个一段时间才出现一次的。完全能够讲的通了。
现在,我们再测试一次将采样模式换为连续采样的模式。
设置为连续采样的时候,原来的设置采样数量接口(10)将表示缓存区的大小。
如果是这样的话,循环就连续执行,并不像有限采样那样,等到采够了所需的点数再进行读取显示,而是不停地读取显示。这就是与有限采样的不同。因此需要在while循环中,增加延时函数,在延迟结束时读取缓存区内的数据。
这样所读取的采样点数为延迟时间内所采到的数据。若延迟时间过大,那么缓冲区存满之后,缓存区将重新刷新,那样在读取数据的时候将会损失掉一部分数据。
[page]
另外做类似的程序时,最好在循环外部加上 DAQmx Start和Stop函数,免得read和write每次运行都要重新开始任务。
即类似于这样的结构。
综上所述:单点采样 连续采样 的read函数不等待,一直根据函数结构进行读取和处理。
另:程序采样开始于 开始任务(DAQmx Start) 函数
下面的说法可以解释上述的现象:在read函数中可以设置采样数目!是这样定义的!N采样的情况下,read函数包含设置采样个数的节点,每通道采样数指定要读取的采样数。 如未连线该输入端或将其设置为-1,NI-DAQmx将根据任务进行连续采样或采集一定数量的采样,确定要读取的采样数。
如任务进行连续采样且该输入的值为-1,VI将读取缓冲区中当前可用的全部采样。
如采集一定数量的采样且该输入的值为-1,VI将等待任务获取全部所需采样,然后读取采样。如读取全部可用数据属性的值为TRUE,VI将读取缓冲区中当前可用的采样,而不等待任务获取全部所需采样。
另外合理利用好DAQ的各属性节点。如DAQ读取属性节点(测量IO——DAQmx数据采集——DAQ读取属性节点等)
如将上面的程序修改一下。
就可以在while循环运行时,显示出目前缓冲区内可用的样点数目。
当然:我们可以在read.VI中设置 每次读取的采样数目(每通道采样数)。如下图
上一篇:关于波形数据与1D普通数组
下一篇:关于xcontrol的一个角落
推荐阅读最新更新时间:2024-03-30 23:04