最 近在做了一个程序,是实现采集之后把数据保存下来,我把采集和保存放在一个循环里面,循环时间最慢是0.2-0.3秒,包括数据采集和运动控制的时间,采 集没有定时,是按照最快速度采集,然后想定时保存,用的是elapsed time函数,到了设定的时间就把它保存下来,但是保存的时间不准确,比如我设定的保存时间是1秒,有可能1.1或1.2秒才会保存一次。我想是因为循环 的时间太长所致,比如循环时间是0.3秒,设定保存时间是1秒,就要到1.2秒的时候才能保存一次。我想过用队列输入输出的办法来实现较精确定时,把采集 和控制放在队列输入的循环里面,把保存单独用一个定时循环,作为队列输出,但效果还是不行,因为这样一来采集的时间就会变慢,和设定的保存一样了。请问各 位老师,有什么办法能实现比较精确的定时吗?或者数据采集循环时间太长就没有办法了呢?
问题内容较多,实质上就是采集循环与存储循环交换数据的问题,采用队列肯定是可以的,所谓速度变慢的问题,肯定是队列的用法存在问题。

使用队列解决上述问题是队列的非常规用法,是把队列当作数据缓冲区来用,而不是常规的同步。恰恰相反,为保证存储循环每秒存储一次,是不能采用同步方式的,因为采集和存储要求就是不同步的。
 
这种情况下,不能采用出队列函数,而应该采用清空队列函数。
Picture
如果使用数据缓冲区,也可以实现相同效果,LV的例子程序中提供了类似的例子。
Picture
Picture
下面的循环稍加修改就可以作为存储逊循环
Picture
 





Leave a Reply.