概览
LabVIEW已被数百万工程师和科学家用于开发复杂的测试,测量和控制应用程序。LabVIEW提供了从交互式助手到可配置的用户定义界面的各种功能和工具,但它的图形化,通用编程语言(称为G)以及相关的集成编译器,链接器和调试工具与众不同。
追求高级编程的简史
为了更好地理解LabVIEW图形化编程的主要价值主张,回顾一些有关第一种高级编程语言的背景知识将很有帮助。在1950年代中期现代计算机时代的曙光中,IBM的一个小团队决定创建一种更实用的替代方法,以便以最底层的汇编语言对大型IBM 704大型机(当时的超级计算机)进行编程。当时可用的语言。结果就是FORTRAN,一种更易理解的编程语言,其目的是加快开发过程。
工程界最初怀疑这种新方法的性能可能优于汇编中手工制作的程序,但很快就证明了FORTRAN生成的程序的运行效率几乎与汇编中编写的程序一样。同时,FORTRAN将程序中所需的编程语句数量减少了20倍,这就是为什么它通常被认为是第一种高级编程语言的原因。毫不奇怪,FORTRAN迅速获得了科学界的认可并具有影响力。
五十年后的今天,这个故事仍然有重要的教训。首先,五十多年来,工程师一直在寻求更简便,更快捷的方法来通过计算机编程来解决问题。其次,工程师选择用来翻译其任务的编程语言已趋向更高的抽象水平。这些经验教训有助于解释G自1986年问世以来的巨大普及和广泛采用。G代表一种极高级的编程语言,其目的是提高其用户的生产率,同时以与FORTRAN,C和C ++等低级语言几乎相同的速度执行。
LabVIEW:图形化,数据流编程
LabVIEW在两个主要方面与大多数其他通用编程语言不同。首先,通过在图形上将图形图标连接在一起来执行G编程,然后将其直接编译为机器代码,以便计算机处理器可以执行它。尽管用图形表示而不是用文本表示,但G包含与大多数传统语言相同的编程概念。例如,G包括所有标准构造,例如数据类型,循环,事件处理,变量,递归和面向对象的编程。
图1. G中的While循环由图形循环直观地表示,该循环一直执行到满足停止条件为止。
第二个主要区别是,使用LabVIEW开发的G代码是根据数据流规则执行的,而不是大多数基于文本的编程语言(例如, C和C ++。诸如G(以及Agilent VEE,Microsoft Visual Programming Language和Apple Quartz Composer)之类的数据流语言将数据视为任何程序背后的主要概念。数据流执行是数据驱动的或与数据相关的。程序中节点之间的数据流而不是文本的连续行决定了执行顺序。
起初,这种区别可能看起来很小,但影响却是非凡的,因为它使程序各部分之间的数据路径成为开发人员的主要重点。LabVIEW程序中的节点(换言之,函数,结构(如循环,子例程等))具有输入,处理数据并产生输出。一旦给定节点的所有输入均包含有效数据,该节点将执行其逻辑,生成输出数据,并将该数据传递到数据流路径中的下一个节点。从另一个节点接收数据的节点只能在另一个节点完成执行后才能执行。
G编程的好处
直观的图形化编程
像大多数人一样,工程师和科学家可以通过查看和处理图像来学习,而无需任何有意识的沉思。许多工程师和科学家也可以被称为“视觉思想家”,这意味着他们特别擅长使用视觉处理来组织信息。换句话说,他们认为图片效果最好。在大学和学院中通常会加强这种情况,在这种情况下,鼓励学生将问题的解决方案建模为流程图。但是,大多数通用编程语言都要求您花费大量时间来学习与该语言关联的特定的基于文本的语法,然后将语言的结构映射到要解决的问题。使用G进行图形编程可提供更直观的体验。
G代码通常使工程师和科学家更容易快速理解,因为他们非常熟悉根据框图和流程图(也遵循数据流规则)对流程和任务进行可视化甚至是图形化建模的过程。另外,由于数据流语言要求您以数据流为基础构建程序的结构,因此建议您从需要解决的问题出发进行思考。例如,典型的G程序可能首先获取多个温度数据通道,然后将数据传递给分析功能,最后将分析后的数据写入磁盘。总体而言,该程序中涉及的数据流和步骤在LabVIEW图表中易于理解。
图2.数据起源于采集功能,然后通过导线直观地流向分析和存储功能。
交互式调试工具
由于LabVIEW图形G代码易于理解,因此常见的编程任务(如调试)也变得更加直观。例如,LabVIEW提供了独特的调试工具,您可以用来观察数据以交互方式在LabVIEW程序的连线中移动的过程,以及在数据从一个函数传递到另一函数时查看数据值的情况(在LabVIEW中称为执行突出显示)。
图3.高亮执行提供了一种直观的方式来理解G代码的执行顺序。
LabVIEW还提供了与传统编程工具相当的G调试功能。这些功能可作为图表工具栏的一部分进行访问,包括探针,断点和上移/移入/移出。
图4.框图工具栏提供对标准调试工具(如步进)的访问。
使用G调试工具,您可以同时在程序的许多部分上探查数据,暂停执行并进入子例程,而无需进行复杂的编程。尽管这在其他编程语言中是可行的,但更容易可视化程序的状态以及代码的并行部分之间的关系(由于其图形性质,它们在G中很常见)。
图5.探针是LabVIEW中查看值在整个应用程序中传播的有效方法,即使对于代码的并行部分也是如此。
图6.在“ Probe Watch”窗口中查看探针值,该窗口显示整个应用程序(包括子例程)中所有探针的探针值。
LabVIEW中最常用的调试功能之一是永远在线的编译器。在开发程序时,编译器会不断检查错误并在应用程序上提供语义和语法反馈。如果存在错误,则无法运行该程序–您只会在工具栏中看到一个损坏的“运行”按钮。
图7.损坏的Run箭头提供立即反馈,指示G代码中的语法错误。
按下损坏的“运行”按钮将打开您必须解决的问题列表。解决了这些问题后,LabVIEW编译器便可以将程序编译为机器代码。编译后,G程序的性能可与更传统的基于文本的语言(如C)相媲美。
图8.错误列表显示了整个代码层次结构中每个语法错误的详细说明。
自动并行性和性能
LabVIEW等数据流语言可实现自动并行化。与诸如C和C ++的顺序语言相反,图形程序固有地包含有关应并行执行代码部分的信息。例如,一个常见的G设计模式是生产者/消费者设计模式,其中两个单独的While循环独立执行:第一个循环负责产生数据,第二个循环处理数据。尽管并行执行(可能以不同的速率执行),但仍使用队列在两个循环之间传递数据,队列是通用编程语言中的标准数据结构。
图9. LabVIEW Producer / Consumer设计模式通常用于提高需要并行任务的应用程序的性能。
并行性在计算机程序中很重要,因为由于计算机处理器设计的最新变化,并行性可以释放相对于纯顺序程序的性能提升。40多年来,计算机芯片制造商提高了处理器时钟速度,以提高芯片性能。但是,如今由于功耗和散热限制,提高时钟速度以实现性能提升已不再可行。结果,芯片供应商转而使用一种在单个芯片上具有多个处理器内核的新芯片架构。
为了利用多核处理器中提供的性能,您必须能够在应用程序中使用多线程(换句话说,将应用程序分解为可以独立执行的离散部分)。如果使用传统的基于文本的语言,则必须显式创建和管理线程以实现并行性,这是非专家程序员面临的主要挑战。
相反,G代码的并行特性使多任务和多线程易于实现。内置的编译器在后台连续工作以标识代码的并行部分。只要G代码在电线中具有分支或该图上的节点平行顺序,编译器就会尝试在LabVIEW自动管理的一组线程中并行执行该代码。用计算机科学的术语来说,这称为“隐式并行性”,因为您不必为了并行运行而专门编写代码。G语言自行处理并行性。
除了在多核系统上实现多线程之外,G还可以通过将图形编程扩展到现场可编程门阵列(FPGA)来提供更大的并行执行能力。FPGA是大规模并行化的可重编程硅芯片-每个独立的处理任务都分配给芯片的专用部分-但它们不受可用处理内核数量的限制。结果,当添加更多处理时,应用程序一部分的性能不会受到不利影响。
从历史上看,FPGA编程仅是受过专门培训的专家,对数字硬件设计语言有深刻的了解。越来越少的没有FPGA专业知识的工程师希望使用基于FPGA的定制硬件来实现独特的定时和触发例程,超高速控制,与数字协议的接口,数字信号处理(DSP),RF和通信以及许多其他需要高速应用的应用硬件可靠性,定制性和严格的确定性。G特别适合于FPGA编程,因为它清楚地表示了并行性和数据流,并且作为寻求并行处理和确定性执行的开发人员的一种选择工具,其正在迅速普及。
图10.在LabVIEW中管理内存是可选的,但是高级用户可以配置内存使用情况,以帮助确定要优化的应用程序部分。
如果G代码表现出异常或意外的行为,而您无法使用前面提到的调试工具轻松解决,则可以通过LabVIEW Desktop Execution Trace Toolkit使用更高级的调试功能。该工具包是为想要对以下内容执行动态代码分析的更高级的用户而设计的:
检测内存和引用泄漏
隔离特定事件或不良行为的源,针对可提高性能的区域筛选应用程序,确定错误之前的最后一次调用确保在不同目标上应用程序的执行相同
将G与其他语言结合
尽管G代码为并行性提供了出色的表示形式,并消除了开发人员理解和管理计算机内存的要求,但它不一定适用于所有任务。特别是,数学公式和方程式通常可以用文字更简洁地表示。因此,您可以使用LabVIEW将图形化编程与几种形式的基于文本的编程相结合。在LabVIEW中运行时,可以选择文本方法,图形方法或两者的组合。
例如,LabVIEW包含公式节点的概念,该公式对程序框图上类似于C的文本数学公式和表达式求值。这些数学公式可以并行执行,并与图形化的LabVIEW代码集成在一起。
图11.公式节点使用类似于C的语法,以简洁的,基于文本的格式表示数学表达式。
解决问题的更好方法
与传统的底层替代方法相比,LabVIEW及其图形化数据流编程语言为您提供了更好的解决问题的方法,并且证明了它的长寿性。G语言编程的主要区别在于您可以创建的直观图形代码,以及控制其执行的数据驱动规则相结合,以提供一种编程体验,比其他语言更能表达其用户的思维过程。尽管G是高级语言,但由于内置的LabVIEW编译器,您仍然可以实现与C等语言相当的性能。