在事件结构内的while循环执行期间无法按下LabVIEW中的停止按钮

时间:2021-06-11 22:53:47

标签: labview

我目前正在开发一个 LabVIEW 项目,但我发现自己被困在如何在按下中止(停止)按钮时退出 while 循环。对于一个简单的 while 循环,我理解如何执行此操作 - 但问题是这个 while 循环嵌套在一个事件结构内,我猜在循环执行时无法按下按钮。此处附上我的部分代码的图片(其中包含导致我出现问题的特定事件案例):Stop Button Inside While loop 花更多时间解释问题所在 - 我认为代码正在做我想要的它要做(即使用等待计时器在重复循环中输出一组命令)但我无法在循环中停止代码(用鼠标按下中止按钮没有任何作用 - 因为按钮没有显示它被按下并且指标显示没有变化,我也不能在我假设相关的周期中使用我的程序的任何其他功能)。而且我不想完全停止 LabVIEW 程序的运行——只是上图所示的 while 循环中的代码。为了完整性,前面板也是这样配置的:front panel for stop button

基本上我想要发生的是当我按下 DWG 时要执行的 while 循环,并且在循环的中间能够中止它。对不起,如果我的代码看起来有点乱。此外,我最初使用 for 循环尝试了相同的代码(通过条件终端,因此它可以提前停止),但这也不起作用。感谢您的帮助,我很感激!

1 个答案:

答案 0 :(得分:3)

您的问题是在事件结构内部,默认情况下 UI 是冻结的,因此在您退出该框架之前不会处理任何 UI 操作(键盘/鼠标/等)。

选项 1。可以右键单击事件结构并选择“编辑此案例处理的事件”对话框,然后取消选中“锁定面板”复选框——即将允许 UI 在您处于该框架中时处于活动状态。我一般不推荐这个解决方案,除非你有一个非常简单的用户界面,因为它导致用户能够更改控件而无需处理这些控件背后的事件(对用户来说不是一个好的 UI 体验)。但如果用户界面足够简单,那就行了。

选项 2。您可以创建一个用户事件,它是您想要在 While 循环中使用的代码。当按下 Deg Wait Go 按钮时,使用“生成用户事件”节点来触发该事件。在用户事件案例中做同样的事情,当且仅当没有按下 Abort 按钮时,事件才会重新触发。

选项 3。 在 UI 循环之外创建一个单独的循环,通过在 UI 循环和其他循环之间运行的某种命令队列进行处理。另一个循环根据 UI 循环的请求进入各种状态……它是在收到“go”消息之前什么都不做,然后继续循环直到收到“stop”消息的循环。您可以谷歌“排队消息处理程序”以获取此解决方案的详细信息。这是复杂 UI 需求的最常见解决方案,对于将 UI 代码的关注点与执行代码的关注点分开特别有用。

相关问题