LabVIEW事件结构停止按钮

LuoBeiCe

        今天终于弄懂了前几天学习LabVIEW时遇到的事件结构中停止按钮直接连接到条件接线端子出现的问题。自己悟出来的,属实不易,另外,《LabVIEW宝典》是真的不错。

问题描述:在自学LabVIEW编程时,遇到了如下图的一个问题:为什么在while循环里面嵌入了一个事件结构,按下停止按钮后不会停止运行,而是要连续两次按下确定按钮后才停止呢?

又或者是如下图所示的问题:为什么要按两次停止按钮才能停止程序呢?

 

        针对这种问题,我在网上找到了相关解释,可以参见链接:https://blog.csdn.net/weixin_41413693/article/details/81048284?spm=1001.2014.3001.5506

但是当时解释我是没看懂的,只知道停止按钮不能直接接到while循环的接线端子上,要通过超时分支,或者将停止按钮创建一个值改变事件,或者取消勾选

“锁定前面板“来解决问题。自己对为何会出现这种问题还是不清楚。现在我懂了,我将介绍自己的理解,希望能帮助到朋友们。

        首先我们得知道LabVIEW事件结构和while循环的运行知识:

1.事件结构通常只能处理一次事件,执行过程是:“等待事件发生“-”处理事件“-”事件结构结束“。要想连续处理事件,就得将其包含在循环结构里,这就是我们为啥通常将事件结构和while结构一起使用的原因。

2.一个循环内只能有一个事件结构,否则会锁死。

3.while循环:当框图内的程序执行完之后,而且条件接线端为false时,会进入下一个循环。

4.事件结构:为其超时分支指定时间后,在设定时间内没有其他事件发生时,会默认超时事件发生,执行一次其中的程序。

        接下来解释上述第二个问题。

        程序具体运行顺序为:

        进入while循环,此时i=0,注意:当i=0时,此时的停止按钮为false,这就意味着,当本次while循环执行一次其框图内的程序后,必定会跳到下个循环(也就是i=1,可以在循环计数端子加个显示控件看看)。

此时,等待事件发生。当按下停止按钮后,触发事件结构,执行完事件结构后,立刻进入下一个循环,即i=1。在i=1时,由于按下停止按钮后接线端子为true,故执行完本次循环后就会停止循环。问题就出现

在这里,必须要执行完本次循环才能退出,而本次循环的内容就是再一次响应事件结构,也就是说事件结构还在等待再一次触发事件(也就是必须得再按一次停止按钮)才能执行本次循环,执行完成本次循环

后就退出。第一次按的停止按钮响应了第一次的事件结构,但是第一次按的停止按钮需要执行两次while循环才能完全退出,而每次循环都必须执行一次事件结构才能往后进行,所以需要按第二次停止执行第二

次循环里面的事件结构才能完全退出。

        懂了第二个问题后就容易理解第一个问题了。

 

        每按一次“确定”按钮,布尔灯就改变一次,按下“停止”后结束程序。实际上,按下停止按钮后不会停止程序,而是要再按两次确定之后才会真的停止。这和上面的情况是一样的,不同的只是换了个事件结构的触发条件而已。

解决上面的办法有很多,最好的方法就是将停止按钮置于事件结构中,而不是直接与while条件端子直连。

        此时程序执行顺序为:进入while循环,i=0。等待事件响应,由于此时条件接线端子暂时没有输入,故还不知道能否进入下一循环。当按下停止按钮时,执行事件分支,此时其值为true,并通过隧道传递给条件接线端,就意味

着本次循环结束后立即退出循环,因此达到了一按就停的目的。

        希望这些分享能帮到大家,解答大家心中的疑惑。

posted on 2022-04-10 13:04  我shi罗  阅读(4816)  评论(0编辑  收藏  举报