Labview - 基本概念

引言

《百度百科》词条"LabVIEW"中提到:

LabVIEW(Laboratory Virtual Instrument Engineering Workbench)由美国国家仪器(NI)公司研制开发,是一种用图标代替文本行创建应用程序的图形化编程语言,它广泛地被工业界、学术界和研究实验室所接受,视为一个标准的数据采集和仪器控制软件。与CBASIC一样,LabVIEW也是通用的编程系统,有一个完成任何编程任务的庞大函数库。采用数据流编程方式,程序框图中节点之间的数据流向决定了VI及函数的执行顺序。

Labview

基本概念

在使用LabVIEW进行软件开发的过程中,少不了提及一些专有名词和概念,这里对常用的几个概念进行简要说明。

VI

VI 是(Virtual Instrument)的简称,其对应的 .vi 文件是LabVIEW软件开发过程中用到的基本单元,类似于 C/C 语言开发的 .c/.cpp 文件。无论是用于显示的用户界面,还是不用于显示的函数,都是以 .vi 文件形式存在。

项目

相对于独立的vi文件,LabVIEW项目则是一个大的容器,它可以包含一个或多个 .vi 文件,以及其它类型的依赖文件,如 .dll 链接库文件**.rhm** 菜单文件**.lvproj** 工程文件**.lib** 函数库文件**.ctl** 自定义控件文件等。当然,一个项目还可以包含**.txt** 等数据文件。独立的 vi 可以单独执行,但如果需要打包成 .exe 可执行文件或 .setup 安装包文件,就必须创建项目文件,通过 "程序设计规范" 对项目文件进行打包处理。

Labview project

前面板

在LabVIEW开发环境中,vi程序分前面板程序框图两部分。其中前面板用于设计用户界面,可以放置各种程序控件,是软件用户能够看见的交互界面。如果作为函数vi,其前面板还可以设置函数接口。软件完成并生成可执行文件后,软件用户界面显示的就是该界面所对应vi程序的前面板,而其它仅实现某种函数功能而无需显示的vi程序,其前面板将不会在调用过程中显示。

Labview frontPanel

程序框图

程序框图作为vi程序的另一部分,用于实现软件功能。从前面板获取用户数据,在程序框图中进行逻辑运算,并将运算结果返回前面板或存储至本地文件。在框图中,开发人员可以通过各种控制结构(顺序、循环、条件、事件、定时等)控制程序的执行顺序,通过调用LabVIEW内置函数库中的大量函数实现软件功能。

Labview flowChart

局部变量

与其它编程语言一样,LabVIEW也有局部变量全局变量局部变量**作用域为本vi程序,只能在本vi中调用。本vi启动时,系统为其分配内存空间;当本vi结束运行后,系统释放其内存。

全局变量

对于一个多vi的项目而言,如果某个或某些变量需要被两个或多个vi调用时,可以考虑使用全局变量。该变量作用域为项目中的所有vi程序,软件启动时,系统为其分配内存空间;软件关闭后,系统释放其内存。

根据我的编程经验,可以依据以下几种情况考虑是否使用全局变量:

  • 某变量仅被一个vi调用,无需设定全局变量;
  • 某变量仅被两个vi调用,而且不会频繁更新,可以通过函数接口传递参数,无需设定全局变量;
  • 某变量被3个或3个以上vi调用,且vi之间没有函数接口,可以考虑使用全局变量;
  • 某变量被两个或两个以上的用户界面调用,多个界面可能并行执行,必须使用全局变量。

注意:全局变量也是以vi形式存在,但是它只有前面板,没有程序框图。此外,多个全局变量可以放置在同一个vi中,我们也推荐这么做,这样可以减少全局vi的个数。如果项目文件较小,全局变量个数较少,完全可以只用一个vi文件存储所有的全局变量;如果项目比较庞大,所需的全局变量较多,可以适当增加全局vi文件个数,但也应该将全局变量归类,相同或相似功能的变量应放在一个vi中。

属性节点

学习LabVIEW软件开发属性节点也是必须掌握的一个内容。这个词可以分为"属性"和"节点"两部分,对应前面板的所有控件,即使是修饰性控件也有其属性。以数值输入控件为例,其属性配置界面如下图所示:

Labview properties

开发人员可以在属性配置界面配置控件的默认属性,该操作适用于无需再次更改的属性。每个控件都有其可修改的属性列表,开发人员可以选择控件本身或其接线端,通过 "右键→创建→属性节点→属性" 创建或查看该控件的属性项。

Labview node

除属性节点外,LabVIEW中还有大量的"节点",如"表达式节点"公式节点"反馈节点"调用节点"等。对"属性节点"而言,可以举个简单的例子,以人为例,每个人都可以看做一个节点,人包含"姓名"身高"体重"性别"年龄"等属性,那么属性节点就可以理解为包含多个属性的人。读写"属性节点"就是对该节点的某项属性进行读写操作。

接线端

对于前面板上的一个控件而言,它在前面板仅出现一次,但在程序框图中可以多种方式出现,包括接线端引用局部变量属性节点,但每个控件的接线端有且只有一个,其它方式则可以多次出现或不出现接线端与我们所说的采集卡的接线端是一个道理,它是程序框图与前面板之间传递参数的桥梁。当我们删除前面板中的某个控件时,其程序框图中的接线端也会随之删除,反之亦然。

Labview port

引用

上面提到的引用也是非常常用的一个功能,它相当于C/C++中的指针,通过它可以获取控件的识别标识、修改控件属性等。最重要的一点:当我们把控件A的引用作为函数参数传递至某个函数后,被调函数对该引用的操作直接作用在控件A上,而不再需要回调参数或全局变量的参与,这是非常重要和实用的功能。

标签&标题

在前面板中,每个控件都有对应的标签标题,两者是有区别的。默认显示的是标签,而且标签和标题的默认值是一样的。在程序框图中,只能显示控件的标签,无法显示其标题。Ctrl+H打开控件的说明信息,其显示的既有标题信息,又有标签信息。通常,标签名称较短,用于程序框图使用;标题可以稍长些,在前面板显示标题可以详细描述控件功能,同时放在帮助信息中方便用户查询。

Labview tag&title

不同控件的标签和标题都可以相同,但不建议这样做,标签通常是唯一的,唯一指定某一个控件,类似于人的学号。对标题的要求则宽松些,可同可不同。

小结

这里讲述了LabVIEW常用的一些基本概念,其它未提及的常用概念较为简单,或是仅对某些特定控件有意义,这就不多说了。