LabVIEW:如何在事件结构中停止循环

时间:2018-04-11 08:31:44

标签: loops events labview

我为两个按钮创建一个事件结构,启动ROI并停止ROI。当用户按下开始ROI时,它将转到此事件并执行以下操作:

  1. 检查相机是否打开并处于空闲状态
  2. 入队"无"到队列来初始化队列
  3. 循环中的
  4. 在每次迭代时出列,以查找是否有从回调中插入的调用消息
  5. 如果元素被"调用"然后更新区域
  6. 我看到的问题是,当它处于循环中时,我无法按下停止ROI或任何其他按钮。但ROI不断更新。我很困惑为什么会这样。

    enter image description here enter image description here

    你能帮我吗?

    谢谢,

2 个答案:

答案 0 :(得分:0)

Disable front panel locking

编辑该案例的事件(屏幕截图中显示的事件),并确保未选中标题为“锁定前面板”的框。这应该可以解决您的问题。

答案 1 :(得分:0)

据我所知,您的事件结构应该尝试处理stop ROI值更改事件。它并不需要,因为您需要响应该事件的唯一地方是在最里面的循环中,并且您正在处理按钮单击轮询其终端的值。

然而,正如@Dave_St所解释的,这只有在循环定期运行时才会起作用,即Dequeue Element函数是定期接收数据还是短暂超时,因为否则它将无限期地等待数据并循环迭代在出列队员执行之前不会完成。为点击按钮设置事件处理程序在这里没有帮助,因为它不能中断程序流 - 事件结构只等待事件发生,然后允许相应帧中的代码执行。 / p>

更一般地说,看着你的前面板,表明你想要处理进一步的控制和事件,问题是你正在尝试做一个耗时的任务里面一个事件结构。那是not how event structures are designed to be used。您应该为您的应用程序使用设计模式,将UI(响应用户输入)与流程(从相机获取图像)分开 - 也许 queued message handler 是合适的。这一开始可能看起来更难理解,但它会使您的程序更容易开发,扩展和维护。

您可以在LabVIEW安装及其在线帮助中找到更多信息examples and templates。我建议尽可能使用其中一个模板作为起点,因为它们已经实现了许多常用功能,可以为您节省大量的多余工作。