2010年12月18日,第一稿
2011年7月9日,第二稿
2011年7月9日,第二稿
4.2 节点——图形化代码
通过例2-1,我们已经看到了基于字符串常数、连线和接线端所构成的图形化代码程序实例。这个例子极其简单,对于更复杂的程序图形化程序应该如何表示出来呢?
其实,在图形化语言中除了接线端外,节点也是程序框图中的对象,并且节点的内容更丰富。节点具有输入输出端口,在程序执行时按内部图形化代码的功能进行处理。节点类似于文本语言中语句、运算符、函数和子程序。节点的概念应该源自数据流的运行机制,在图形化代码中,数据从节点流入或流出。
NI LabVIEW提供了许多类型的节点,这些节点包含了很丰富的内容,完全满足图形化程序设计的要求。这些节点包括:
这些节点都是内置在NI LabVIEW中。也就是说,当我们安装了NI LabVIEW所有这些节点在函数选板上都可以找到,参见图2-6。
如果安装了其它工具包也会有对应子类的函数选板。
如果通俗的进行类比,NI LabVIEW中的函数类似于英文中的26个字母。这些字母的不同组合可以构成:名词、动词、形容词等单词(类似于内置VI);而这些单词的不同组合连接又构成了一篇篇章节(类似于VI);所有的章节构成一本书(类似于项目)。
利用节点我们完全可以创建各种应用程序。
其实,在图形化语言中除了接线端外,节点也是程序框图中的对象,并且节点的内容更丰富。节点具有输入输出端口,在程序执行时按内部图形化代码的功能进行处理。节点类似于文本语言中语句、运算符、函数和子程序。节点的概念应该源自数据流的运行机制,在图形化代码中,数据从节点流入或流出。
NI LabVIEW提供了许多类型的节点,这些节点包含了很丰富的内容,完全满足图形化程序设计的要求。这些节点包括:
- 函数
- 内置VI
- Express VI
- 结构
- 公式节点和表达式节点
- 属性节点和调用节点
- 通过引用节点调用
- 调用库函数节点
- 代码接口节点
这些节点都是内置在NI LabVIEW中。也就是说,当我们安装了NI LabVIEW所有这些节点在函数选板上都可以找到,参见图2-6。
如果安装了其它工具包也会有对应子类的函数选板。
如果通俗的进行类比,NI LabVIEW中的函数类似于英文中的26个字母。这些字母的不同组合可以构成:名词、动词、形容词等单词(类似于内置VI);而这些单词的不同组合连接又构成了一篇篇章节(类似于VI);所有的章节构成一本书(类似于项目)。
利用节点我们完全可以创建各种应用程序。
4.2.1 函数——原子级的图形化代码
我们对函数概念的了解来自于初等数学,而这里函数的概念与初等数学中函数的概念确大不相同。这里函数的概念是指图形化语言所特有的、最基本的、原子级的图形化代码。所谓,最基本的、原子级的图形化代码意味着这些代码对用户而言是不可再拆分的。显然,函数越丰富,图形化程序的处理能力就越强。
函数是图形化代码中具有不同功能的最小可操作元素。函数来自于函数选板,函数只可以使用在程序框图中,它没有前面板、没有程序框图,只有连接端口和图标以及固有的名称(可以重新命名)。所以我们不能够打开和编辑任何函数。我们可以通过函数图标的色彩来区分,函数的图标使用淡黄色背景色和黑色的前景色,参见下图。
函数是构成图形化代码的最基本元素,依据待解问题的要求,合理的使用函数就可以设计出满意的图形化程序。所以充分了解和掌握函数的基本功能和使用方法是任何LabVIEW的使用者都要面对的一个重要环节。
函数的基本特点:
例外:
尽管我们已经列出函数的一些特点,但总是会有一些例外发生。
情况一:
通过函数的前景色和背景色的来划分函数的方法并非是很准确,比如在函数选板中》编程》文件I/O》文件常量中的“应用程序目录”和“默认数据目录”它们都是VI并以.vi为后缀,参见下图。
函数的基本特点:
- 函数至少有一个以上的连接端口。对于双端以上的内置函数通常是以输入端和输出端的形式呈现
- 内置函数的内部是不可见的,程序的设计者或使用者是不可对其进行编辑和修改
- 内置函数是构成VI或子VI的最基本操作元素之一
- 内置函数是节点中的一部分,可通过颜色辨别(图标中的背景为浅黄色)
- 内置函数是直接命名的
- 内置函数通常没有公共线程(公共接线端——错误簇)
例外:
尽管我们已经列出函数的一些特点,但总是会有一些例外发生。
情况一:
通过函数的前景色和背景色的来划分函数的方法并非是很准确,比如在函数选板中》编程》文件I/O》文件常量中的“应用程序目录”和“默认数据目录”它们都是VI并以.vi为后缀,参见下图。
情况二:
加、减、乘、除这些函数当它们的输入数据为波形数据时,它们会自动生成公共线程连接端——错误簇(做时域的加、减、乘、除)。参见下图。
加、减、乘、除这些函数当它们的输入数据为波形数据时,它们会自动生成公共线程连接端——错误簇(做时域的加、减、乘、除)。参见下图。
以乘函数为例,在时域信号相乘时这是一个极为有趣且很实用的功能。它可以实现时域四象限乘法计算。而这种时域相乘的方法是一个非常简单、线性度又好的时域乘法器(性能取决于同步数据采集卡)。
我们知道,乘法器是比较常用的模拟运算单元。在模拟集成电路中,集成乘法器IC——AD536就很具有代表性。但是,它的四象限乘法特性很难做到优于0.2%,并且输入信号带宽很有限。在分立元件电路中,时分割乘法器很有代表性。为获得0.02%的时分割乘法器,其所付出的代价是极其昂贵的,并且输入信号带宽很有限。
采用数据采集方法,实现的乘法器(用“乘”函数)几乎没有任何局限性。它配合628x系列数据采集卡可以获得多路0.01%模拟乘法器,带宽可达数10KHz以上。它的角差特性更是其它类型的乘法器所无法比拟的。
实际上,采取适当的方法或合理的技术方案,我们采用非同步数据采集卡也达到了这样的效果,并且已经完成了技术上的验证。
使用函数可以实现其它功能的程序设计,LabVIEW中提供了基于数组、字符串、数值计算等等相关程序处理的基本函数,利用这些函数可解决大部分所遇到的问题。
例4-1 计算数组的平均值
使用函数计算数组的平均值。该实例用了四个函数和两个控件实现了对数组平均值的计算,并以vi的形式保存下来。
我们知道,乘法器是比较常用的模拟运算单元。在模拟集成电路中,集成乘法器IC——AD536就很具有代表性。但是,它的四象限乘法特性很难做到优于0.2%,并且输入信号带宽很有限。在分立元件电路中,时分割乘法器很有代表性。为获得0.02%的时分割乘法器,其所付出的代价是极其昂贵的,并且输入信号带宽很有限。
采用数据采集方法,实现的乘法器(用“乘”函数)几乎没有任何局限性。它配合628x系列数据采集卡可以获得多路0.01%模拟乘法器,带宽可达数10KHz以上。它的角差特性更是其它类型的乘法器所无法比拟的。
实际上,采取适当的方法或合理的技术方案,我们采用非同步数据采集卡也达到了这样的效果,并且已经完成了技术上的验证。
使用函数可以实现其它功能的程序设计,LabVIEW中提供了基于数组、字符串、数值计算等等相关程序处理的基本函数,利用这些函数可解决大部分所遇到的问题。
例4-1 计算数组的平均值
使用函数计算数组的平均值。该实例用了四个函数和两个控件实现了对数组平均值的计算,并以vi的形式保存下来。
函数是图形化语言的基础内核,是构成性能强大的虚拟仪器的基础“零部件”。函数的功能越丰富对待解问题的处理能力就越强。要想学习、使用好图形化语言最重要的基础就是充分了解函数的基本特性和使用方法。只有这样,才能充分发挥出图形化语言的特点,设计出满足用户需求的自动化应用程序。
4.2.2 内置VI—--面对任务的函数集合
节点中的函数为我们提供了创建图形化程序所需的最底层代码。同时,为了降低工程师和科学家程序设计的难度、提高图形化语言的开发效率,开发环境中又特别提供了数千种测控专用、功能丰富、性能各异的VI。这些VI被称为:内置VI。所谓内置VI就是由开发环境所提供的VI(也可以理解为开发环境提供的子VI),供我们在程序设计中使用。
内置VI在函数选板上同样可以看到。它们图标的背景颜色为以白色为主,前景色附以其它颜色,基本上可以通过颜色来区分出,参见下图。
内置VI在函数选板上同样可以看到。它们图标的背景颜色为以白色为主,前景色附以其它颜色,基本上可以通过颜色来区分出,参见下图。
函数是无法看到其内部程序的,而内置VI用鼠标双击后可以打开。内置VI是从许多“待解问题”中高度抽象出来的。为我们解决实际测量问题提供了极大的帮助,也是提高虚拟仪器程序设计效率的主要因素。
内置VI与我们所创建的VI不同,由于内置VI来自于NI LabVIEW中的底层库vi.lib,所以建议使用者轻易不要对它进行改动后保存,避免其它使用者找不到原来的内置VI。若需要改动请另创建一个新的子VI或使用新的名字,保存到使用者库中。
内置VI虽然数量众多、功能不一,但存在着共同的一些特点:
下面给出一个使用内置VI实现同频率信号间相位差测量的例子。
例4-2 计算同频率信号间的相位差
这是一个很简单的相位差测量程序,使用了“提取单频信息.vi”。输入两个同频率的A和B时域信号,输出信号间的相位差。
内置VI与我们所创建的VI不同,由于内置VI来自于NI LabVIEW中的底层库vi.lib,所以建议使用者轻易不要对它进行改动后保存,避免其它使用者找不到原来的内置VI。若需要改动请另创建一个新的子VI或使用新的名字,保存到使用者库中。
内置VI虽然数量众多、功能不一,但存在着共同的一些特点:
- 图标背景颜色为以白色为主,前景色附以其它颜色
- 内置VI来自于LabVIEW开发环境,是由NI公司设计、开发的
- 内置VI有自己的前面板、程序框图和图标、接线端
- 可视为图形化代码的高级部件,作为子VI来使用
- 内置VI的内部构成具有多样性
下面给出一个使用内置VI实现同频率信号间相位差测量的例子。
例4-2 计算同频率信号间的相位差
这是一个很简单的相位差测量程序,使用了“提取单频信息.vi”。输入两个同频率的A和B时域信号,输出信号间的相位差。
在程序设计中使用这些内置VI可以大大加快程序设计的进程。对于工程上的一些特殊应用,比如声音振动测试分析,可通过专用工具包所提供的内置VI实现程序的快速设计和专业化的设计。这是LabVIEW图形化编程语言与其它编程语言最大的区别之处。
例4-3 产生正弦波、全波、半波
正弦波、全波、半波是我们比较常见的信号,利用一些函数和内置VI很容易仿真出这些波形,参见下图。
例4-3 产生正弦波、全波、半波
正弦波、全波、半波是我们比较常见的信号,利用一些函数和内置VI很容易仿真出这些波形,参见下图。
这里前面板图就略去了,请注意内置函数的使用方法以及它们与波形数据之间的运算关系。输入信号与绝对值信号相加后,信号的幅度也增加了一倍,所以再乘以0.5以保证信号幅度不变。这里也间接说明加和乘的运算关系仅仅改变波形数据的幅度。其它参数不会发生变化。
4.2.3 Express VI——基于配置的模块化程序
Express VI实际上就是程序化、模块化后的VI。它采用对话框式的交互界面,用户通过简单的配置就可以快速实现常见的测量或分析任务。Express VI图标的背景色是蓝色,前景色黑色。
以“时间延迟”Express VI为例进行说明。
在程序框图中,选择:函数》编程》定时》拖拽“时间延迟”Express VI放到程序框图上,此时会弹出一个对话框要求确定所期待的延迟时间,参见下图。
以“时间延迟”Express VI为例进行说明。
在程序框图中,选择:函数》编程》定时》拖拽“时间延迟”Express VI放到程序框图上,此时会弹出一个对话框要求确定所期待的延迟时间,参见下图。
完成配置后,点击[确定]后,该Express VI执行1秒中的延迟。下图是带有扩展端的标识和图标表示方式。
二者间的切换方式单击鼠标右键,在快捷菜单中选择:显示为图标。
Express VI是以程序化的VI,它也可以转换为常规的程序代码,具体操作是:单击鼠标右键,在快捷菜单中选择:打开前面板。在对话框中选择:转换,就可以看到它的图形化代码,参见下图。
Express VI是以程序化的VI,它也可以转换为常规的程序代码,具体操作是:单击鼠标右键,在快捷菜单中选择:打开前面板。在对话框中选择:转换,就可以看到它的图形化代码,参见下图。
上图中,我们看到还有一个subTimeDelay.vi的子VI,双击这个子VI,还可以看到它的图形化程序代码,参见下图。
这个子VI的图形化代码是利用函数来实现的,同时也标明了该Express VI的层次结构。
下面给出一个使用Express VI的实例,这个实例来自网友所遇到的实际问题。它的问题很简单:已经设计完成了一个谐波测试分析程序,想验证谐波分析处理是否正确,询问有何简单的方法可以实现谐波分析验证。换句话说,就是要寻找一个标准的谐波源(标准谐波发生器)来验证他的谐波分析程序是否正确。可是那里可以找到这样的标准谐波发生器呢?
类似这样的问题应该是工程应用中比较常见的问题。其实,利用仿真的方法就可以验证谐波分析是否正确。这里采用仿真信号Express VI生成一个三角波来实现仿真。
例4-4 利用仿真信号Express VI产生三角波
现在利用仿真信号Express VI创建一个三角波发生器。在程序框图上选择:函数》信号处理》波形生成》将“仿真信号”Express VI拖拽到程序框图中。在对话框中做下图所示的设置。
全部设定完成后,点击[确定]这个仿真三角波就创建完成了,然后就可以利用这个仿真信号来实现谐波分析的验证。参见下图。
运行该程序后,在THD(%)显示控件中就可以看到三角波的THD(%)=12.107%。验证时,将上图中的Harmonic Distortion Analyzer.vi用自己的谐波分析程序替换,所分析的结果也应该满足:三角波的THD(%)=12.107%。
从这里可以看出我们可以通过仿真的形式来验证我们的设计,并检验设计是否能够解决实际问题。
有网友也提出过这样的问题:采用纯三角波为什么可以做为标准谐波发生器呢?
其实,这个问题很好理解。我们在数学或电工学中都学习过傅立叶级数,利用傅立叶级数我们可以将周期信号分解为不同正弦信号之和的形式。三角波的傅立叶级数可以用下式表示出:
上式中括弧内的第一项为:基波,第二项为:三次谐波,第三项为:五次谐波.....。三角波中没有偶次谐波,仅包含了其次谐波。
由于基波和各次谐波的幅度都是常数,所以三角波的谐波分量就为常数(THD(%)=12.107%),利用这个特性就可以将纯三角波看作是标准谐波发生器。谐波的表达式参见下式。
如果我们能够将过去所学习到的知识不断的运用到实际工程应用中,我们解决问题的能力就会越来越强。
进一步拓展思考,锯齿波的谐波失真又会如何呢?
进一步拓展思考,锯齿波的谐波失真又会如何呢?



















