DAQ是虚拟仪器中最具代表性的技术之一,通过PCI、PCI-e、PXI或者PCMCIA、USB等,计算机就可以动态地采集到实际的外界物理信号。
对于使用LabVIEW来进行信号采集时,最难搞清楚的就是在连续采集(Continuous Mode)模式时对一些参数的设置问题,比如rate、samples per channel、number of samples per channel等,并且NI-DAQ内部对缓冲区的也有一些配置原则,所以希望在本文中能够给大家一个比较清楚的summary。
首先,rate是指采样的频率,单位是采样数每通道每秒,这是在Timing这个vi里可以设的,但是如果在Timing那里的Source里设定了采样引脚的话(比如PFI0之类的),rate值就没有什么意义,但是为了Timing这个vi顺利运行,还是需要设一个值的。samples per channel在finite sample mode时候就是指要读入或写出的data的字节长度,但是在continuous mode时就是另外一个含义,即表示缓冲区大小(Buffer Size)。但是NI-DAQmx在这里对于不同的rate会有一个参考的Buffer Size,如下表所示,如果这里sample per channel所设的值小于参考值的话,那么系统会自动选择参考值作为Buffer的大小,这点非常需要注意,因为这个是implicit的,即在内部实现,如果实际你觉得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
当然,你确实可以一定要设你想要设的Buffer Size,这个可以通过一个叫DAQmx Configure Input Buffer.vi来实现,或者直接用DAQmx Buffer这个属性节点中的Input.Buffsize来设,如下图所示:
最后一个参数是number of samples per channel,这个是在DAQmx Read.vi里设定,所代表的意思其实也很清楚,就是每次要读多少字节的数据,如果设为-1就是说Buffer里面有多少就读多少,如果是其他固定的数则每次就读固定字节的数据,如果当时Buffer里数据还没够的话,程序就会一直等,等到Buffer里数据达到指定字节数,如果等到超时,那么就会显示Time out的报错信息。一般而言,对于Continous Sample Mode,这个number of samples per channel的值一般设为Buffer Size的1/2到1/4最理想,这是官方的建议。
对于连续采样,主要可能会出现两个最常见的问题,Overwritten和Overflow。
Overwritten错误是指Buffer里的数据已满,因此在采集到新数据后,就会出现覆盖掉原来的老数据的情况,因此出现overwritten现象。在DAQmx的Read Node里有一个Available Samples per channel,将它放在循环中后可以即时地读到buffer里的数据字节长度,从而实时地监控Buffer是否出现overwritten的现象。此外,如果设为1/2到1/4的话,一般不会出现Overwritten。
Overflow是表示DAQ卡上的Onboard Memory溢出,这个问题没Overwritten那么好解决,一般是建议改成DMA或者增加DMA来解决。
文章评论(0条评论)
登录后参与讨论