我试图通过创建只处理相关控件的SubVIs,通过控件拒绝来消除一个大的UI。
现在,当从主VI中提取代码并重新连接到子VI中时,事情变得杂乱无章。
要读/写这些推荐信,我必须做两个步骤。首先添加一个终端以获得控件折返值,然后添加另一个终端以获取该控件的值。

在任何地方连接拒绝并不是一个真正的选择,因为这将创造更多的意大利面,如果有两个以上。(通常为4-10)
有更好的办法吗?
更新
伙计们,这是一个关于上面图片的低级问题,不是关于大规模架构/设计模式的问题。我用的是QMH,类,et.al。视情况而定。
我只是觉得应该有一种方法从类型化控件ref中一步获得类型化值。感觉有点普通。
发布于 2016-04-22 02:58:26
在调用方VI中,在控件/指示符实际存在的地方,创建所有引用,然后将它们捆绑到相关片段的集群中。将集群传递到您的子subVI中,只给出它需要的集群。这既保持您的丙烷清洁,并使它清楚的接口,每个subVI正在交谈。您可能希望创建一个LV类来进一步封装和定义子UI操作,而不是集群,但这通常只适用于较大的项目,其中一些UI组件将在其他UI中重用。
发布于 2016-04-21 15:19:20
我不确定是否有一种低触点的方式去消除意大利面,一个有很多控制和指示器的UI。
我的建议是将顶层VI重新工作到排队消息处理程序中,这将允许您将用户交互与应用程序的响应分离开来。换句话说,与其将处理其更改的控件和代码都移动到子this (正如您当前所做的那样),不如将控件保持在它们所在的位置(因此您不需要使用ref num和属性节点),而只将代码移动到subVIs。
此设计模式内置于LabVIEW的最新版本:导航到文件?创建项目,以使LabVIEW生成您可以评估的项目。有关如何扩展和自定义它的更多信息,请参见此NI幻灯片库:队列消息处理模板设计背后的决策。

发布于 2016-04-21 12:02:42
一般来说,从性能角度来看,使用refnum读取/写入值并不是最佳做法。它需要每次将线程交换到UI线程(这是一个很重的进程),而FP终端可以在不切换执行线程和互斥摩擦的情况下更新面板。
使用对访问值的引用,需要在每次调用前面板项时更新它们。 它们是按引用传递的函数,而不是按值传递的函数。这意味着它们本质上是指向特定内存位置的指针。指针必须是非引用的,然后更新内存中的值.取消引用变量的过程会导致它们比控件/指示符或局部变量慢。属性节点导致SubVI的前面板保持在内存中,这增加了内存的使用。如果没有显示SubVI的前面板,请删除属性节点以减少内存使用。
如果在此之后要使用此方法,则可以使用VI脚本来加快进程:http://sine.ni.com/nips/cds/view/p/lang/en/nid/209110
https://stackoverflow.com/questions/36768500
复制相似问题