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

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

自动生成数据文件,请教下两个vi间的全局变量如何优化

已解决!
转到解答

一个数据采集的vi主要从ADC采集来的数据收集,生成.dat文件。

一个主程序vi负责仪器控制等等。两个vi因为机制不同,暂时没有考虑合并两个vi。

现在实现了通过记录固定的循环次数之后,通过布尔全局变量来控制数据采集vi的自动生成.dat文件。

附件是对于我的情况的一个简单的Demo。

因为全局变量里面会有竞争关系并且会造成数据采集延迟,所以实际情况下不允许使用全局变量,请问下各位还有什么好方法可以优化这种布尔全局变量的。先谢谢各位了:)

下载全部
0 项奖励
1 条消息(共 9 条)
2,646 次查看
0 项奖励
2 条消息(共 9 条)
2,634 次查看

谢谢回复,我根据你的提示,自己优化了结构,可是不知为何,还是无法实现自动保存。

我的目的就是想实现,在main.vi可以每隔10个循环给getcap.vi中的数据采集程序传递生成记录文件指令,自动生成数据记录文件。

中可能是自己的局部变量使用不恰当,暂时还没有解决,依照大佬的观点可以怎么修改呢?

0 项奖励
3 条消息(共 9 条)
2,615 次查看

还是无法实现自动保存

说详细点.

 

George Zou
0 项奖励
4 条消息(共 9 条)
2,611 次查看

我理解了你说的生产者消费者模式,也将我的程序v2版本修改成了队列的生产者消费者模式。

我的程序分为两部分,main_v2.vi以及Getcap_v2.vi(包含子vi为File_Produce_v1.vi),main_v2.vi理解成控制仪器运动(比如压电台往复运动),Getcap_v2.vi为数据采集程序(DAQ系统)。在main_v2.vi控制仪器运动时,里面循环结构就是仪器不同的位置,每10次之后,仪器回复到初始零位置。那么我就想用数据采集vi在仪器每一次回到零位置之后,自动新建一个.dat的数据采集的文件。

程序的思路:通过main_v2.vi里面的循环结构以及事件结构,在每10次循环之后,传递布尔变量(由False变为True)给数据采集的Getcap_v2.vi,让Getcap_v2.vi里面的程序先关闭当前的.bat数据采集文件,然后立即生成一个新的.dat数据采集文件,这里Getcap_v2.vi以10hz的频率采集0-10的随机数,从而实现在main_v2.vi每10次循环就能让数据采集Getcap_v2.vi重新采集数据。

程序的问题:现在我在main_v2.vi里面通过事件结构设置好了,每10次循环即让布尔变量改变,此时队列传递一个True值给Getcap_v2.vi,让Getcap_v2.vi重新生成一个新的.dat文件,可是不知道为何Getcap_v2.vi一直没有自动生成。所以向你求助下,不知道是不是事件结构有问题还是说队列结构有问题。

0 项奖励
5 条消息(共 9 条)
2,607 次查看
解答
已被主题作者 Yuki203 接受

File_Produce_v1.vi 单独运行时, 能产生新文件.

你不会用 Probe 吗?  Probe 一下马上就有答案的.

image.png

你的触发机制有问题.  局部变量不起作用.  必需用property node.

 

为什么不在这里直接 enqueue ?

 

George Zou
0 项奖励
6 条消息(共 9 条)
2,603 次查看
解答
已被主题作者 Yuki203 接受

十分感谢你的解答,我试了你说的probe节点,确实实现了!

是的,现在改成了在该循环结构里面直接enqueque,这样还能节省下局部变量以及属性节点的数据传输,谢谢!
enqueque.PNG

 

0 项奖励
7 条消息(共 9 条)
2,600 次查看

probe不是节点. 它给你程序执行时的数值. 这样你就知道某一段程序有没有执行过.

image.png

image.png

 

George Zou
0 项奖励
8 条消息(共 9 条)
2,592 次查看

原来是这样,谢谢你的耐心解答!

0 项奖励
9 条消息(共 9 条)
2,582 次查看