如何忽略在特定序列帧外触发的 LabView 事件?

How to ignore events in LabView triggered outside of a particular sequence frame?

在 LabView 中使用事件结构可能会让人感到困惑,尤其是在将它们与大部分同步的工作流混合使用时。我的问题是,当序列的一个帧中存在事件结构时,我如何强制它忽略在工作流处于序列的另一帧中时触发的事件(例如,特定按钮上的鼠标按下)?

目前,事件结构只处理序列中正确帧的事件,但如果在工作流处于前一帧时触发了一个事件,它也会处理那些事件,我希望它忽略任何未触发的事件' 在事件结构存在的框架中触发。

http://puu.sh/hwnoO/acdd4c011d.png

这是我工作流程的一部分。如果在执行左侧部分时触发了 mousedown,我希望事件结构在序列到达时忽略这些事件。

http://puu.sh/hwsBE/fe50dee671.png

我不知道如何刷新 mousedown 等内置事件类型的事件队列,但我设法通过创建对 VI 的静态引用并将光标设置为忙来解决这个问题序列,禁用点击。然后,当达到事件结构的序列时,我将光标从繁忙状态取消设置,这会重新启用点击。

不要将事件结构放在主程序序列中,而是将其放在一个单独的循环中,并让它通过队列将每个事件的详细信息传递给主序列。然后您可以通过在适当的点刷新队列来丢弃不需要的事件的详细信息。

或者,您可以使用布尔值控件来确定事件循环是将事件详细信息发送到队列还是丢弃它们,并使用主序列中的局部变量切换布尔值。

您可以动态注册活动。注册是事件结构开始排队事件的时间点,在您的情况下,当事件结构所在的 VI 进入 运行 模式(意味着它正在执行或它的调用者之一正在执行)时,就会发生这种情况。您可以更改它,以便您使用 Register for Events 节点进行注册,然后您将仅从该点开始获取事件。当您取消注册时,您将停止接收事件。

杰克·唐纳威 (Jack Dunaway) 的演讲非常精彩,详细介绍了事件 here

您可以找到它的代码 here

在 LabVIEW 2013 及更高版本中,还有用于控制事件队列的其他选项,但我不会在这里详细介绍。