什么是 LabVIEW

原文: https://labview.qizhen.xyz/

什么是 LabVIEW
LabVIEW与文本编程语言的区别
LabVIEW是美国国家仪器有限公司(National Instruments, NI)最核心的软件产品。LabVIEW是一种编程语言,与其它常见的编程语言相比,最大的特点就在于它是一种图形化编程语言。
我们常见的编程语言如C、Java、VB等,都是文本编程语言。它们的使用领域和方法虽然各不相同,但都有一个共同特点:即都是使用字母构成单词,用单词表示数据存储的地址或对数据的某种操作;再由单词构成语句,用语句表示完整的对某个数据的赋值、计算等操作。这几种计算机语言都借鉴了人类的自然语言,尽管它们比自然语言要简略、死板、严格,但是它们的词法、语法等概念和自然语言是相同的。
文本语言是一种高度抽象的语言。它的优点是效率高,用简短的文字就可以表达丰富的含义。它的缺点也很明显,文本不够直观,也不容易学习。在使用文本语言编程之前,必须花费较长的时间学习并熟记其关键字、数据的表示方法、语法等等。字母构成的关键字和函数是不容易记忆和阅读的,对于中国人来说,记住这些英文单词也许更加费劲。文本语言的上下文相关性也比较紧密,仅仅阅读程序中的某一段代码往往无法理解其意义,必须从头到尾阅读整段代码才能了解其逻辑关系。比如说,代码中使用了一个变量,但这个变量中的数值是从哪里来的?接下来又会在哪里被使用?文本语言往往并不能直观地给阅读者提供类似的信息。只有通篇阅读完、并弄懂全程序之后才会了解这些数据变化的过程。
与计算机交互,人们普遍喜欢的是图形化的方式。比如程序的界面,早期的DOS系统下的应用程序,使用的都是文本方式在人机间交互。在屏幕上显示出一行提示文字,再等用户输入相关的命令或数据。而后来的Windows系统下的应用程序则采用了图形化界面,用户主要通过拖拽和点击鼠标与计算机进行交互。这两种方式受欢迎程度的差别是非常明显的------今天,Windows几乎完全取代了DOS。
目前,多数高级编程语言在进行程序界面设计时,都引进了可视化设计的方式,或者叫所见即所得的设计方式。编程者不需要敲入文本命令,直接使用鼠标就可以选择和调整应用程序的界面,直接看到程序运行时的效果。但是,这样的编程语言仍不能被称为图形编程语言,因为它们在设计界面时虽然采用了图形方式,但程序功能依然需要通过文本编程来实现。
LabVIEW不但在程序界面设计时采用了与其它高级语言类似的图形化方式,更重要的是,它在编写程序代码、实现程序功能的时候,使用的也是图形化的操作方式。打开LabVIEW的程序,看到的不是一行行的文本,而是由一条条彩色线段连接起来的、各式各样的小图形块。这是一种全新的编程方式。由于图形比文字更为直观,LabVIEW比其它编程语言更适合初学者进行学习。一个对计算机软件完全不了解的初学者,通常只需学习两三天的时间,就可以随心所欲地编写一些简单的程序了。这是其它编程语言学习者无法想象的。
LabVIEW的编程效率之高也是文本编程语言所无法比拟的。LabVIEW拥有丰富的工具包,尤其是针对测控、仿真等领域,这些工具包往往可以为编程者提供其所需的大部分功能。因此,在LabVIEW程序中,有时几个简单的图形和连线,就能够完成文本语言中几十行甚至上百行代码才能完成的功能。
G语言
G语言是图形化编程语言(Graphical Programming Language)的缩写。LabVIEW不是唯一的图形化编程语言,却是当今最完善、影响力最大的一种图形化编程语言。因此,LabVIEW已经成为了图形化编程语言的代名词------LabVIEW有时也被称为G语言。我们可以这样理解,LabVIEW是一种开发环境(类似的,Visual Studio也是一种开发环境),在这个环境下编写的代码就是G语言代码(类似于在Visual Studio下写出的C代码)。
但至今,LabVIEW仍常常被误认为是一种仅应用于工业测控领域的应用软件,而不算作是一种编程语言。误解的原因有两个:首先是因为它和其它常见的编程语言完全不同。初次见到LabVIEW,人们很容易联想到电路板布线、工业总线配置等应用软件。其次,是源于LabVIEW在中国使用的年头不多,接触、熟悉它的人很少,且绝大多数用户局限于测控领域。
既然是一门编程语言,在使用LabVIEW的时候,就应该按照程序设计的思维来考虑。使用LabVIEW开发软件与使用其它语言的开发过程是相同的。一般来说,都需要经历以下五个步骤:收集需求、设计、编码、测试、发布及维护。如果有其它计算机语言的使用经验,是会对学习LabVIEW语言有一定帮助的。但是,在学习LabVIEW的时候,需要格外注意图形化编程语言与文本编程语言的差异之处,有些文本语言的使用经验不能直接套用在LabVIEW上。本书在介绍LabVIEW时,会提及LabVIEW区别于其它文本编程语言的独特之处,并将它与其它文本编程语言进行对比,以帮助文本编程语言的程序员注意到这些区别。
对于那些把LabVIEW作为第一门计算机编程语言学习的读者而言,今后再继续学习其它语言时,也可参照这些区别之处。
LabVIEW的应用领域
LabVIEW编程语言有很多优点,尤其在某些特定领域,它的势更加明显。因此,当需要在这些领域开发计算机软件时,可以优先考虑LabVIEW。
测试测量:LabVIEW最初就是为进行测试测量而设计的,因而测试测量也就成为了当前LabVIEW被应用得最为广泛的领域。经过多年的经营,LabVIEW在测试测量领域获得了广泛的支持。至今,大多数主流的测试仪器、数据采集设备都拥有专门的LabVIEW驱动程序,使用LabVIEW可以非常便捷地控制这些硬件设备。同时,用户也可以十分方便地找到各种适用于测试测量领域的LabVIEW工具包,这些工具包几乎覆盖了用户所需的所有功能。用户在这些工具包的基础上再开发程序就容易多了。有时甚至于只需简单地调用几个工具包中的函数,就可以组成一个完整的测试测量应用程序。
控制:控制与测试是两个相关度非常高的领域,从测试领域起家的LabVIEW自然而然地首先拓展至控制领域。LabVIEW拥有专门用于控制领域的模块:LabVIEW DSC。除此之外,工业控制领域常用的设备,数据线等通常也都带有相应的LabVIEW驱动程序。使用LabVIEW可以非常方便地编调各种控制程序。
仿真:LabVIEW包含了多种多样的数学运算函数,特别适合进行模拟、仿真、原型设计等工作。在设计机电设备之前,可以先在计算机上用LabVIEW搭建仿真原型,验证设计的合理性,找到潜在的问题。在高校教育领域,有时受条件限制,无法完成课程中提及的与某些硬件相关的实验。这时如果使用LabVIEW进行软件模拟,几乎可以达到同样的效果,使学生不致失去实践的机会。
儿童教育:由于图形外观漂亮且容易吸引儿童的注意力,同时图形比文本更易于被儿童接受和理解,所以LabVIEW非常受少年儿童的欢迎。对于没有任何计算机知识的儿童而言,可以把LabVIEW理解成是一种特殊的"积木":把不同的原件搭在一起,就可以实现自己所需的功能。著名的可编程玩具"乐高积木",使用的就是LabVIEW编程语言。儿童经过短暂的指导就可以利用乐高提供的积木搭建成各种车辆模型、机器人等,再使用LabVIEW编写控制其运动和行为的程序。除了应用于玩具,LabVIEW还有专门用于中小学生教学使用的版本。
快速开发:根据我对自己所参与的一些项目的统计,完成一个功能类似的大型应用软件,熟练的LabVIEW程序员所需的开发时间,大概只是熟练的C程序员所需时间的五分之一左右。所以,如果项目开发时间紧张,应该优先考虑使用LabVIEW,以缩短开发时间。
跨平台:如果同一个程序需要运行于多个硬件设备之上,也可以优先考虑使用LabVIEW。LabVIEW具有良好的平台一致性。LabVIEW的代码不需任何修改就可以运行在常见的三大台式机操作系统上:Windows、Mac OS、Linux。除此之外,LabVIEW还支持各种实时操作系统和嵌入式设备,比如常见的PDA、FPGA,以及运行VxWorks和PharLap系统的RT设备。
LabVIEW的发展历史
美国国家仪器有限公司(NI)成立于1976年。在它成立的第十个年头,也就是1986年,LabVIEW的第一个版本正式发布。
LabVIEW 1.0 版本是在1986年(NI公司成立的第十年)发布的。第一个版本的LabVIEW只能运行在当时最流行的个人电脑:苹果机上;那时的Apple电脑的CPU采用的是摩托罗拉68000。LabVIEW 1与之后的LabVIEW语言都不同,它是解释型语言。语法和功能都相当简单,比如:每个函数只能用于一种类型的数据;唯一的数值类型是浮点数等。
LabVIEW 1.1 中引入了LabVIEW的一个重要优化技术:缓存重用。LabVIEW程序采用的数据流驱动方式,最大的效率隐患就是产生了过多的数据拷贝。采取缓存重用机制,LabVIEW会尽量减少不必要的数据复制、利用已有的内存控件,从而大大提高的LabVIEW的效率。知道今天,LabVIEW程序员在为自己的程序做内存优化时,主要考虑的依旧是如何有效利用LabVIEW的缓存重用机制。
LabVIEW 2.0 最重要的革命性改进是它使用编译器代替来原来的解释器,LabVIEW从此变成编译型语言了。它首先把一段程序编译成为针对摩托罗拉68000 CPU机器码,然后再运行。这样执行速度就有了质的飞跃。LabVIEW 2.0 在编译程序时同时会对程序做语法检查,比如:把两个不同数据类型的控件连在一起,LabVIEW 会给出相应错误提示。LabVIEW 2.0另外一项重大的创新是开始支持并行计算。当时的LabVIEW并不支持多线程,但是,它在程序内部实现了类似多线程的调度。LabVIEW 会把代码中没有先后顺序依赖的部分分成不同的“模块”,然后快速交替执行各个模块,让它们在宏观上看起来是并行执行的。
LabVIEW 跨平台是从 LabVIEW 2.5开始的。在这个版本中,它首次开始支持x86架构的CPU。此后,LabVIEW从未放弃过对跨平台的支持。在后续的版本中,LabVIEW陆续开始支持PowerPC以及其它一些当年比较常用的CPU。至今,LabVIEW仍然是支持不同平台和操作系统数目最多的编程语言之一。这也给LabVIEW带来了一些麻烦。最明显的就是LabVIEW开发环境的界面风格与一般的Windows应用程序有些格格不入:面板是深灰色的,按键的3D效果也与众不同。看惯了Windows的各种界面,可能会觉得LabVIEW有些别扭。这都是因为LabVIEW要考虑到对其它平台的支持,就不能简单地调用Windows已经实现的各种界面元素。还有一些可能不太容易被发现的差异。比如,对于整数的存储,LabVIEW即便是运行在x86系统上,采用的也是高地址位存高位数据(big-ending)方式,这与我们习惯了的x86 CPU使用的格式正相反。这往往会给编写存取二进制文件带来些麻烦。
LabVIEW 4 是笔者接触到过的最早接触的LabVIEW版本。它的发布包是一个装有十几张三寸软盘的大盒子。安装的时候要按顺序把软盘一个一个塞到计算机里。尽管当时LabVIEW的界面并不好看,但笔者还是非常喜欢它。真方便呐!比如要画一个开关,把控件选板上现成的控件一拖过来就好了。当时还没有任何一个文本编程语言实现了类似的可视化界面设计功能。如果要自己动手用C语言设计一个如此好看的开关,那得花多少时间啊!我尤其喜欢它通过连线来编程的方式,尽管很多熟悉了文本编程语言的人刚开始会对这种图形化的编程方式非常不适应。
LabVIEW 5 开始引入了一项新的模块GenAPI,用以更有效的支持多种硬件设备。GenAPI可以生成多种CPU的程序执行代码,这样一来,LabVIEW就具备了交叉编译的能力,比如在一台x86的电脑上,可以编译出在RT设备上运行的程序。LabVIEW 5.0的另一项重大改进是它开始支持多线程了。
LabVIEW 6 中添加了漂亮的立体效果控件和对事件响应的支持,以及对于网路编程的支持。 LabVIEW 7 中添加了Express VI,以及对于FPGA、DSP等嵌入式设备编程的支持。
LabVIEW 8 针对于编译器最主要的改进是优化了CPU寄存器的分配机制。再此之前,LabVIEW 采用固定的模式为数据分配寄存器,LabVIEW 8 开始采用了动态分配方式。同时 LabVIEW 8 的编译器也开始加入优化方式,比如移除无效代码分支等。LabVIEW 8 在工程管理方面添加了工程库和面向对象编程新功能。
LabVIEW 2009是编译器改进比较重大的一个版本。首先,它加入了64位的编译器,可以生成64位的执行程序。再有,它开始对LabVIEW的编译器分层化。首先细分出来的是DFIR(Dataflow Intermediate Representation)-位于程序框图和可执行代码之间的逻辑表达层。有了这样一层中间层,LabVIEW编译器可以做更多的优化工作了,比如:常数合并,无效代码删除,循环内不变代码移出等。
LabVIEW 2010中,编译器在DFIR与机器码之间又细化出一层:LLVM(Low-Level Virtual Machine),底层虚拟机。在这一层上,编译器可以进行如:指令调度,循环判断条件外提,指令组合,以及更复杂的寄存器分配等优化。2010在已有的DFIR层上也引进了新的优化方式,比如:运算关联,相同代码合并,达式消除,循环展开,以及子VI内联等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值