强制跳出子vi的运行程序,继续执行主vi

2019-07-17 15:48发布

一个子vi里面只有顺序结构,结构内是一些算法模块,假设调用该子vi后,因为某些原因导致某一个算法模块卡住了,也没有提示信息,在子vi中有没有调用节点可以做一个超时,让程序强制停止,然后主程序继续运行


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
krize
1楼-- · 2019-07-17 18:31
木头feng 发表于 2016-12-16 12:35
算法模块是labview自带的,不是调用的dll,只是一个模块,而且主程序需要自动化测试,没有人为干预,所以需要监测是否超时,然后给出错误结果,自动重测

1.从根本上解决这个问题:算法会卡死这种情况在编程上是不允许出现的,是否在某些情况下算法的输入不合理,或者算法里某些逻辑不正确,通过调试应该是可以解决算法卡死这个问题的。我所遇到的LabVIEW自带功能里能在没有循环且输入正常的情况下卡死的情况只有一种,是关于数值引用和同址结构的,不知道你遇到的是不是这种。
2.Abort调用节点应该是能终止掉任何VI的,就跟你按了一下程序框图里的那个终止执行的红点一样。如果这个节点也终止不了,那么你在运行的时候把算法模块的前面板显示出来,等它卡死的时候你在程序框图里点一下终止程序的红点看看能不能停。我挺想研究一下什么类型的程序是Abort终止不了的。
3.再退一步,如果实在停不掉,把你的算法模块子VI设置成可重入执行,用可重入异步调用的方式调用算法模块,返回数据的方式还跟我前面说的一样用队列,这样如果你的算法卡死了,就让它卡在那吧,下次还可以用可重入异步调用的方式再执行这个算法。这种方法前提是你的算法是允许设置成可重入的,优点是算法就算卡死了主程序也能继续跑,而且下次还能再调用这个算法,缺点是卡死的算法还在那运行,占用CPU、内存资源。
建议还是从根本入手,调试算法为什么会卡死。 最佳答案
左耳朵的耗子
2楼-- · 2019-07-17 20:37
除非你子VI的顺序结构里面有while循环,没有循环是不会卡住的,如果有while循环,你可以用计时,没循环一次计时,比如循环了300次,你就直接退出While循环,进行下一个顺序结构
发烧友Mrhe
3楼-- · 2019-07-18 01:40
当然可以,很简单!你把算法后边加个子VI,子VI是判断有没有错误的 有错误,错误处理下继续进行就可以了!  小子好好学吧!
zhnuaa
4楼-- · 2019-07-18 01:44
 精彩回答 2  元偷偷看……
李春明
5楼-- · 2019-07-18 07:09
没有学到这一块 学习了
发烧友Mrhe
6楼-- · 2019-07-18 12:58
zhnuaa 发表于 2016-12-15 20:44
你这个是扯蛋啊。他的算法VI卡住了不结束还怎么输出错误信息。。。
就这水平还让别人好好学学?

道理是通的,在顺序结构前后价格时间计时 在算法那加个循环,计算下时间,时间到了就执行下一步,这不就行了,活学活用,你们学的太僵硬!!!!

一周热门 更多>