代码之家  ›  专栏  ›  技术社区  ›  ptomato

LabVIEW VI能否分辨出它的一个输出端子是否已连接?

  •  4
  • ptomato  · 技术社区  · 14 年前

    在LabVIEW中,是否可以从VI中判断输出终端是否连接到调用VI中?显然,这将取决于调用VI,但也许有某种方法可以找到VI当前调用的答案。

    在C语言中,这就像定义一个函数,该函数接受指向输出参数存储位置的参数,但会接受 NULL 如果调用者对该参数不感兴趣。

    5 回复  |  直到 14 年前
        1
  •  4
  •   CharlesB Craig McQueen    14 年前

    正如前面所说的,您不能以自然的方式来实现这一点,但是有一个使用数据值引用的解决方法(需要LV2009)。给输出参数指定NULLpointer的想法是一样的。结果在input中作为数据值引用(指针)给出,并检查 不是参考资料

    下面是子vi(case true当然不起作用):

    alt text

    这里是召唤六:

    alt text

    图像是VI代码段,因此您可以在图表上拖放以获取代码。

        2
  •  2
  •   eaolson    14 年前

    我建议你走错路了。如果编译器没有足够的智能来避免自己的计算,那么就做两个版本的VI。一个做昂贵的计算,一个不做。然后做一个多态VI,让你可以在它们之间切换。在设计时你已经知道你想要哪个版本(因为你要么连接输出终端要么不连接),所以只需要使用正确版本的多态VI。

    或者,传入一个变量,用于打开或关闭计算中昂贵部分的Case语句。

        3
  •  1
  •   Yair    14 年前

    你可以看看 here

    扩展你的类比,你可以在LV中这样做,除了LV没有C的空概念。你可以看到这样一个例子 here

    请注意,所提供的链接底流中的代码不会在可执行文件中工作,因为在构建EXE时,默认情况下会剥离图表,而且RTE不支持其中使用的某些属性和方法。


    对不起,我看我误解了这个问题。我以为你是在问意见,所以我的建议不适用。不过,我指出的限制确实适用。

        4
  •  1
  •   Joe Z    14 年前

    可以使用“脚本”特性对代码进行静态分析。这需要拉取调用层次结构,并跟踪连线引用。

    拉拢一个试验这个,有一些困难。同一图表上的多个相同的子vi很难区分。而且,终端引用似乎主要通过名称来访问,这可能导致与其他vi的同名终端发生一些冲突。

    this .

        5
  •  0
  •   Yair    14 年前

    一般来说,LV编译器优化机器代码的方式是,未使用的代码甚至不会内置到可执行文件中。

    这不适用于subVIs(因为无法知道您不会尝试以某种方式使用指示符的值,尽管LV可以在构建可执行文件时删除FP,也可能会这样做),但是有一种方法可以让它应用于subVI-内联subVI,这样编译器就可以看到没有使用的输出。您还可以将它的优先级设置为subroutine,这可能也会这样做,但我不建议这样做。

    官方称,in-lining仅在lv2010中提供,但在旧版本中有访问私有VI属性的方法。不过,我不建议这样做,而且2010年在这方面可能有一些老版本没有的优化。

    一般来说,编译过程的细节不会公开,并且随着NI调整编译器,在LV版本之间会有所不同。整个过程应该在LV2010中进行了一次重大升级,并且应该在NI的网站上进行一次网络直播,其中包含一些细节。