在LabVIEW中使用通知器时出现错误1

更新 Jun 11, 2024

适用于

软件

  • LabVIEW

问题详述

LabVIEW程序出现了一个跟通知器(Notifier)相关的错误:
 
Error 1 occurred at Send Notification in Wait on Multiple Notifiers.vi 

Possible reason(s):
LabVIEW: (Hex 0x1) An input parameter is invalid. For example, if the input is a path, the path might contain a character not allowed by the OS such as ? or @.

 
图片.png

解决方案

首先,该错误出现的原因是:当尝试访问一个已经释放引用了的通知器时即会出现错误1

事实上,在某些特定场景中(例如下面截图所示的代码),编程者是有意利用这个错误的出现来停止消费者循环(即Notifier Loop 1和Notifier Loop 2这两个循环)。因此在这些场景中,这些错误的出现是预期中的,是整个程序流程的一环节。这样使用是因为生产者循环(即Notification Loop这个循环)内没有其它的变量可以使生产者循环本身以及消费者循环都停止,所以才故意运用了“错误1”的出现来停止消费者循环。请注意,使用这种方法时,不应该把消费者循环的错误簇输出到程序最末端的建议错误处理器中(否则就会让这个故意被运用的错误被提示出来,使得用户将其与其它可能出现的错误混淆)。
图片.png

当运用“利用错误的出现停止通知器程序”这种手法时,建议使用如下的两种方法之一来避免“错误1”带来的影响:
  • 不将消费者循环的错误簇连线到后续的程序流中,即:在消费者循环内终止这些错误簇数据流的传递;
  • 针对消费者循环流出的错误簇使用清除错误VI错误1人为地去除过滤掉。

如果您想要避免运用这种方式来停止消费者循环,则需要有方法将生产者循环的停止信息传递到消费者循环中。基于这种思路,增加一个专门用来传递循环停止条件的辅助通知器也许会是最佳做法。请参阅下面截图的示例:
图片.png

注意:上面的两个代码片段均出自LabVIEW自带的范例。在LabVIEW程菜单中选择帮助>>查找范例。在NI范例查找器中,选择浏览方式为目录结构,在Sychronazation的文件夹目录下即可找到通知器的相关范例。