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

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

如何在一个不断被调用的子VI中调用另外一个子VI呢?

大家好!在我的程序中会不断用call by reference node调用一个子VI来更新结果,此时我需要在这个子VI中调用另外一个子VI显示某些计算数据,最初我直接用子VI的形式来调用,可是这个子VI的前面板会不停的闪烁,请问一下如果解决这个问题呢?(在子VI运行的时候不能影响主VI的工作)谢谢!

帖子被暖小八在 09-26-2009 09:51 AM
时编辑过了
0 项奖励
1 条消息(共 11 条)
6,378 次查看

这个子VI是需要显示它的前板么?如果不需要的话,可以在它的windows appearance (CTRL+I)中把 "Show front panel when called" 和 "shwo front panel when loaded" 勾掉。

 

snap002256.png

 

如果你需要这个子 VI 显示它的前板的话,那它是会闪烁的,因为你调用它时,它的前板打开了,但很快用过之后前板就会关掉,然后你马上又调用它,这样它就处在一个不停的开关的状态下。一个办法是让这个子程序一直运行,然后用全局变量或其它方法来控制它。或者把它的计算结果输出到住 VI 里,由主 VI 显示,这样它本身就没有必要显示了。

2 条消息(共 11 条)
6,367 次查看
感谢楼上!我还是想把这个结果显示在一个单独的小窗口中,所以设计了一个子VI,我曾试过用循环来让这个子VI一直运行,可是这个时候由于调用它的VI一直在被主程序不停的调用,就会出现“可重入性”的错误。很明显,这个循环也在不停的被调用,就出错了。这种情况有没有好的解决方法呢?
0 项奖励
3 条消息(共 11 条)
6,357 次查看
感谢!我还是想把这个结果显示在一个单独的小窗口中,所以设计了一个子VI,我曾试过用循环来让这个子VI一直运行,可是这个时候由于调用它的VI一直在被主程序不停的调用,就会出现“可重入性”的错误。很明显,这个循环也在不停的被调用,就出错了。这种情况有没有好的解决方法呢?
0 项奖励
4 条消息(共 11 条)
6,356 次查看

"...个办法是让这个子程序一直运行,然后用全局变量或其它方法来控制它...", 在调用这个子VI的时侯 (要用call by reference),先检查它是否已在运行,如果已经运行,就不必要再调用了,可以用全局变量来控制。当然如果主程序退出的时候,要告诉这个调用的子VI也要退出。

 

5 条消息(共 11 条)
6,348 次查看
感觉你这个方法可以哈~我试试看哦~谢谢谢谢!!
0 项奖励
6 条消息(共 11 条)
6,337 次查看
祝你成功!
7 条消息(共 11 条)
6,331 次查看
麻烦再问一下,如何判断一个VI是否在运行呢?我找了半天没找到,谢谢!
0 项奖励
8 条消息(共 11 条)
6,328 次查看

 

有几种方法了,例如使用全局变量,或使用以下两个:

snap002268.png

这个属性 给出所有已经调用的 VI 名字,你可以检查一下子 VI 的名字。

 

snap002269.png

这个 VI 属性 给出当前 VI 的状态,你可以检查它是否已经在运行。

9 条消息(共 11 条)
6,326 次查看

是否能够在不断被调用的子VI里,将要显示的数据发送到一个队列中。

然后在运行一个从队列中取数据并显示的VI。

10 条消息(共 11 条)
6,258 次查看