NI LabVIEW,CVI,数据采集等产品讨论区

取消
显示结果 
搜索替代 
您的意思是: 

【求助】用c++对NI6015连续采集问题

已解决!
转到解答

各位老师:

     

    本人在对NI6015的采集函数进行学习的时候,在NI提供的函数里没找到控制FIFO缓存读取的函数,比如说半满或全满时读取,那位能告诉我怎么样判断FIFO的状况。

    在NI给的示例中,我发现了DAQmxErrChk (DAQmxRegisterEveryNSamplesEvent(taskHandle,DAQmx_Val_Acquired_Into_Buffer,10,0,EveryNCallback,NULL));

这个函数,他通过不断调用回调函数EveryNCallback来连续把数据采集到data数组中,

但我在MFC中用的时候,却不能进入回调函数EveryNCallback中,请问各位谁知道是怎么回事,改怎么解决呢?

在这里先谢谢大家!

 

 

                                                                                                       刘长青

0 项奖励
1 条消息(共 5 条)
5,401 次查看

DAQmx 在读函数里面就有读取缓存的设置,例如

DAQmxReadAnalogF64 (TaskHandle taskHandle, int32 numSampsPerChan, float64 timeout, bool32 fillMode, float64 readArray[], uInt32 arraySizeInSamps, int32 *sampsPerChanRead, bool32 *reserved);

其中的numSampsPerChan参数就是指定每满多少个点读一次,默认值是-1,即有多少读多少,可以参考DAQmx帮助获得更多的信息。 如果实现每多少个数读一次的话,是不需要用到事件处理的DAQmxRegisterEveryNSamplesEvent的函数,该函数用于自定义操作手法的时候。至于为什么你在MFC中调用的不进去的话,需要提供更多的问题细节,不过建议你直接用读函数里面的参数设置

2 条消息(共 5 条)
5,385 次查看

谢谢你的回答!

我还想请问一下,我把读函数放在一个for循环里面,这样能保证我data数组持续更新,而且不丢数据吗?

怎么才能做到呢?                                       

                                                                               

                                                                                               刘长青

 

0 项奖励
3 条消息(共 5 条)
5,361 次查看
解答
已被主题作者 tqm 接受

一个采集任务开始以后,采集的数据是不断地填充到板卡的板载fifo里面了,而您使用的read函数只是完全将这些数据从板载的fifo搬移到PC上的工作,所以您的数据不管PC是如何以及何时读取的,采集进来是数据是不断填充进来,不会丢失的。

当然为了使板载的fifo不发生缓冲区满的情况,您的读取的速度不能太慢,否则会发生缓冲区数据被覆盖的错误。

 

Best Regards

NI Application Engineer

 

District Sales Manager | Shanghai Pudong, China
4 条消息(共 5 条)
5,351 次查看

我想问一下当FIFO半满以后FIFO的数据会传到PC ,我们读的只是缓冲区的数据,但是我想问的是将FIFO半满数据存到缓冲区这个逻辑流程是什么呢?如果我不想使用Stream,我想自己处理FIFO的数据,如何弄比较好呢?谢谢

0 项奖励
5 条消息(共 5 条)
5,248 次查看