我有一个接收两个引用路径作为输入的子。 该子项目是根据第一个项目改变第二个路径的值。 (它添加了用户选择的文件夹)可以认为第一个路径引用是真正的输入,第二个是输出。 (认为C:将指针传递给应该由函数修改而不是返回值的东西)如何触发子变量中的值更改事件,该事件引用了可能的更改值?
说我插入根目录,vi将子目录写入第二个路径引用。
"/" -> subvi -> "/subdirectory/"
这工作正常。
现在我想将这些子VI链上的两个在一起,使用户可以选择一个文件夹结构的两层,就像这样:
"/" -> subvi1 -> "/subdirectory/" -> subvi2 -> "/subdirectory/subsubdirectory/"
只是要清楚:本是同子VI,二手在子面板中的同一个主vi中两次。
连锁vis不按预期工作。 每个子项都注册第一个路径引用的值更改事件。我这样做的动机是通知任何后续的子实例,其根路径的值发生了变化。
subvi1中进行的更改应该反映在subvi2中,以便subvi2在subvi1中选择的路径上运行。 更改事件不会触发。并没有反映出subvi1的变化。
这是因为我有路径引用作为输入?向他们添加一个值变化事件意味着引用必须改变才能引发它,事实并非如此。如果是这样,如何添加一个更改事件到引用引用的内容而不是引用本身?
我过度使用参考? 我应该只使用路径而不是路径的引用吗?
请看看下面的图片,它显示了如何创建两个子视图并将其推入到子面板中。
而且一些更多的信息,我希望这有助于。
每个子视图只是为它接收的第一个路径引用的更改事件添加一个案例。
当通过参考设置您的值时使用值(信令)。这种价值变化会产生价值变化事件。 并通过值(信令)将结果写入第二个参考。 我怀疑这是问题出在哪里,因为它改变了引用内容的值,而不是引用本身。
值更改事件从不执行。
LabVIEW没有引用路径。我假设你是指一个路径控件的引用(它也跟踪你正在谈论的值变化事件)。
好的,我滥用术语。我很抱歉有任何混淆。是的,我的意思是对路径控制的引用。
如果您确实需要将消息作为消息传递(例如,如果您有并行进程),我会建议使用其他机制,比如用户事件,而不是值更改事件。 VC事件可以工作,但它们是为UI使用而设计的。以编程方式使用它们可以使你的代码变得复杂。
我确实需要这个并行,因为我有2个子。这是多么的复杂?我通过了一个即将改变的参考,就是这样。 If the information should go the other way, from main, to subvi, the suggested solution from national instruments is also to pass a reference as can be seen in this tutorial.
你只在登记事件后,已经发生了
我不知道这是如何,因为这两个子VI坚持主。我可以反复点击它们,这应该反复发生变化事件。
它可能会使它更清晰一些,包括你试过的代码片段 – Swinders