在事件结构内执行 while 循环期间无法按下 LabVIEW 中的停止按钮
Stop button in LabVIEW cannot be pressed during while loop execution inside an event structure
我目前正在做一个 LabVIEW 项目,发现自己卡在了如何在按下中止(停止)按钮时退出 while 循环。对于一个简单的 while 循环,我知道如何做到这一点——但问题是这个 while 循环嵌套在一个事件结构中,我猜测在循环执行时无法按下按钮。这里附上了我的部分代码的图片(其中包含导致我出现问题的特定事件案例): To spend a little more time explaining what the problem is - I think the code is doing what I want it to do (namely output a set of commands in a repeated cycle with a wait timer) but I cannot stop the code mid cycle (pressing the abort button with my mouse does nothing - as in the button doesn't show it being pressed and the indicator shows no change, I also can't use any other functionality of my program during the cycle which I'm assuming is related). And I do not want to stop the LabVIEW program from running entirely - just the code inside the while loop pictured above. This is what the front panel is configured too for completeness:
基本上我想要发生的是当我按下 DWG 时执行的 while 循环,并且在循环中间能够中止它。对不起,如果我的代码看起来有点乱。此外,我最初使用 for 循环尝试了相同的代码(通过条件终端,因此它可以提前停止),但也没有用。感谢您的帮助,我很感激!
您的问题是在事件结构内部,默认情况下 UI 被冻结,因此在您退出该帧之前不会处理任何 UI 操作 (keyboard/mouse/etc)。
选项 1。您可以右键单击事件结构和select“编辑此案例处理的事件”对话框然后取消选中“锁定面板”复选框——这将允许 UI 在您处于该帧时处于活动状态。我通常不推荐此解决方案,除非您有一个极其简单的用户界面,因为它会导致用户能够更改控件而无需处理这些控件背后的事件(对用户来说不是很好的 UI 体验)。但如果 UI 足够简单,那就行得通。
选项 2。您可以创建一个用户事件,它是您想要在 While 循环中使用的代码。当按下 Deg Wait Go 按钮时,使用“生成用户事件”节点来触发该事件。在用户事件案例中执行相同的操作,以便当且仅当未按下“中止”按钮时事件重新触发。
选项 3. 在 UI 循环之外创建一个单独的循环,用 UI 之间的某种命令队列 运行 进行处理=] 循环和另一个循环。另一个循环根据 UI 循环的请求进入各种状态...它是一个在收到“开始”消息之前什么都不做然后继续循环直到收到“停止”消息的循环。您可以 Google“队列消息处理程序”了解此解决方案的详细信息。这是复杂 UI 需求的最常见解决方案,对于将 UI 代码与执行代码的关注点分离特别有用。
我目前正在做一个 LabVIEW 项目,发现自己卡在了如何在按下中止(停止)按钮时退出 while 循环。对于一个简单的 while 循环,我知道如何做到这一点——但问题是这个 while 循环嵌套在一个事件结构中,我猜测在循环执行时无法按下按钮。这里附上了我的部分代码的图片(其中包含导致我出现问题的特定事件案例):
基本上我想要发生的是当我按下 DWG 时执行的 while 循环,并且在循环中间能够中止它。对不起,如果我的代码看起来有点乱。此外,我最初使用 for 循环尝试了相同的代码(通过条件终端,因此它可以提前停止),但也没有用。感谢您的帮助,我很感激!
您的问题是在事件结构内部,默认情况下 UI 被冻结,因此在您退出该帧之前不会处理任何 UI 操作 (keyboard/mouse/etc)。
选项 1。您可以右键单击事件结构和select“编辑此案例处理的事件”对话框然后取消选中“锁定面板”复选框——这将允许 UI 在您处于该帧时处于活动状态。我通常不推荐此解决方案,除非您有一个极其简单的用户界面,因为它会导致用户能够更改控件而无需处理这些控件背后的事件(对用户来说不是很好的 UI 体验)。但如果 UI 足够简单,那就行得通。
选项 2。您可以创建一个用户事件,它是您想要在 While 循环中使用的代码。当按下 Deg Wait Go 按钮时,使用“生成用户事件”节点来触发该事件。在用户事件案例中执行相同的操作,以便当且仅当未按下“中止”按钮时事件重新触发。
选项 3. 在 UI 循环之外创建一个单独的循环,用 UI 之间的某种命令队列 运行 进行处理=] 循环和另一个循环。另一个循环根据 UI 循环的请求进入各种状态...它是一个在收到“开始”消息之前什么都不做然后继续循环直到收到“停止”消息的循环。您可以 Google“队列消息处理程序”了解此解决方案的详细信息。这是复杂 UI 需求的最常见解决方案,对于将 UI 代码与执行代码的关注点分离特别有用。