即便是用了LV多年,有些基本概念还是非常模糊的,比如"节点"和"函数"(NODE AND FUNCTION),我们称LV本身提供的函数为节点,或者节点函数,那自己做的子VI被调用时算不算节点,它内部包含的下一级别的子VI是不是节点那? 控件是不是节点?装饰是不是节点?程序的结构比如顺序结构、循环结构是否是节点那?

LV经常用节点的数量来统计VI的性能,所以了解节点的真正含义是非常有必要的。

首先看看帮助文件对节点的定义:


节点是程序框图上的对象,带有输入输出端,在VI运行时进行运算。节点类似于文本编程语言中的语句、运算符、函数和子程序。LabVIEW有以下类型的节点:

函数-内置的执行元素,相当于操作符、函数或语句。
子VI-用于另一个VI程序框图上的VI,相当于子程序。
Express VI-协助常规测量任务的子VI。Express VI是在配置对话框中配置的。
结构-执行控制元素,如For循环、While循环、条件结构、平铺式和层叠式顺序结构、定时结构和事件结构
公式节点和表达式节点-公式节点是可以直接向程序框图输入方程的结构,其大小可以调节。表达式节点是用于计算含有单变量表达式或方程的结构。
属性节点和调用节点-属性节点是用于设置或寻找类的属性的结构。调用节点是设置对象执行方式的结构。
通过引用节点调用-用于调用动态加载的VI的结构。
调用库函数节点-调用大多数标准库或DLL的结构。
代码接口节点(CIN)-调用以文本编程语言所编写的代码的结构。

      这里函数的概念本身就不好理解,内置的执行元素,加减运算符号算一个节点,一个文件操作函数内部包含大量的子函数或者子VI,也是一个节点?
      我们自己制作的VI称作子VI,它可以理解成函数吗?从分类上看显然不是,那它到底有那些不同呢?

      下面是简单的vi例子,有2个输入控件和一个输出控件,一个运算内置函数和一个装饰件。

      下图是对上图的分析结果

      显然,两个输入控件+一个显示控件+运算符号共四个节点,前面板的装饰当然也是控件,因为我们可以得到它的参考,进而控制它的属性,从分类上看,它也是继承于最基本的图形对象的,所以装饰是控件,但不是输入控件,也不是输出控件,换个角度看,它没有数据的流入或者流出,因此,装饰不属于节点。

       下面再看一个例子

      从上图可以看出,常量,结构,属性节点都属于节点,一个属性节点可以同时控制多个属性,它仍然只算是一个节点,所以通过一个属性节点控制可以减少节点数量,全局变量和局部变量也都属于节点,因为它都涉及了数据的流入或者流出。

      我们感兴趣的是自己做的子VI和内置函数有何不同之处

      上图中,顶层VI有三个节点,但是EXPRESS VI内部包括53个节点,自己做的SUBVI内部包含8个节点,而WRITE SPREAD SHEET尽管内部包含大量操作,我们可以打开跟踪,但是它只是一个节点,从这里可以看出,经管EXPRESS VI使用非常方便,但是LV没有把EXPRESS VI称为函数,而写文本文件VI尽管内部非常复杂,但是仍然是一个节点。

      所以使用LV内置的函数可以提高程序运行效率,而EXPRESS VI尽管使用方便,但是效率很低.

      上图表明,我的计算二次函数VI,的确内部包含8个节点,那么如果我多次调用它,情况会如何那?

      二次函数本身8个节点没有变化,每多调用一次,节点增加一个,6+8=14个节点.
对于经常使用的操作,如果作成子VI,可以有效地减少节点数量,提高运行效率.

      为什么LV内置的函数只是一个节点那,而我们自己做的子VI却包含内部使用的节点那?

       猜测LV启动后,很多内置的函数已经调入内存了,因此我们使用它不过是增加了一个节点,而我们自己做的SUBVI则不同,它是添加在程序框图中被调入内存的,所以节点数量应该包括它内部使用的节点.




Leave a Reply.