新闻  |   论坛  |   博客  |   在线研讨会
LabVIEW 8.5助力大型应用程序的开发——AET/2008 34(3)
canso | 2009-02-24 09:10:43    阅读:1817   发布文章

  摘 要: 介绍了LabVIEW 8.5有助于大型程序开发的新特性,包括状态图模块、对多核技术的支持、功能增强的项目管理等。

  关键词: LabVIEW 8.5;状态图模块;多核;项目管理

  从1986年诞生至今,NI LabVIEW作为测试测量和控制行业的标准软件平台,一直致力于简化自动化测试和仪器控制的实现过程,使工程师和科学家们可以专注自己专业的研究领域,而不是将大量的时间和成本放在系统底层通讯和算法的实现上,从而实现效率的最大化。另一方面,随着测控系统的日趋大型化和复杂化,很多工程师们开始使用LabVIEW来开发大型的应用程序。因此,简化大型或复杂的测控系统的搭建和开发过程,成为了LabVIEW致力实现的又一个目标。

  2年前,LabVIEW 8推出的项目(Project)工具使工程师们能够从整体项目的角度进行开发,为想要开发大型应用程序的LabVIEW用户们提供了强有力的支持:在一个项目中,开发人员可以将多个程序文件有机地整合在一起,并附带相关的文档及配置文件。此外,由于LabVIEW和硬件的良好的连接性,项目中还可对多个硬件平台进行集中管理,实现分布式智能控制。可以说,当时的LabVIEW已经具备了开发大型应用程序的条件。随后的LabVIEW 8.2开始支持面向对象的编程方式。而去年8月推出的LabVIEW 8.5更是提供了多个崭新工具来协助工程师轻松而高效地实现大型系统的构架和开发。

  因此,本文将深入讨论如何使用这些新工具在LabVIEW平台下实现更高效和快捷的大型程序的开发。

  状态图(Statechart)模块

  在开发大型程序之前,对系统进行整体架构设计是必不可少的过程,而将系统的架构转换为实际可运行的代码的过程看似简单,其实会花费开发者不少的精力和时间。此外,在开发后期,开发者们还会面临需要根据实际情况对程序的结构进行频繁修改的局面。因此,一个好的系统架构方式或工具可以起到事半功倍的效果。

  LabVIEW 8.5新引入了一个功能强大的全新工具——NI LabVIEW状态图模块。有了这个基于LabVIEW平台的新功能,工程师们就能更快捷地设计出高层抽象的系统架构,并可以将状态图自动生成LabVIEW代码,从而直接运行。

  例如,要实现一个如图1所示的简单的数据采集系统,需要能够根据用户按下的不同按钮来进行相应的操作:在配置状态下按Acquisition键开始采集信号,在采集时按Pause键则暂停,在任何时候按Stop键停止整个采集系统。

  这样的要求虽然不算复杂,但是如果纯粹进行编程,还是需要花费不少的时间;而相比之下,使用状态图就能够在很短的时间内实现。图1的右边部分就是播放器的状态图,通过简单的几个状态和状态间切换的设置,就能够既直观而又轻松地予以实现。

  

 

 

  图1 使用LabVIEW状态图实现数据采集

  测控系统日益复杂,有时就需要在传统的有限状态机基础上再添加层次性、并发性以及状态间转换的全面行为定义。在1980年,以色列魏兹曼科学研究所的David Harel在设计一个复杂的航空系统时发明了状态图。在90年代,状态图被引入UML规范,从而被广泛地用于嵌入式系统的建模。

  状态图的层次性允许编程人员可以定义所谓的“超状态”,即将一个子状态嵌套在另一个状态中。超状态同时封装了出、入动作和过渡。举例来说,从超状态的单个过渡,代表了从每个超状态所包含的子状态的过渡。这一特点极大地简化了框图的设计和开发。在图2中,标有“Error”的过渡转换,可以在系统处于液罐控制的四个状态中的任一状态时发生。

  

 

 

  图2 LabVIEW状态图模块支持层次性、并发性和全面动作

  并发性也是状态图所具有的特点之一,它是指两个甚至多个状态都能在同一时刻被激活,即处于“与状态”。当描述同一框图所表示的系统中的独立函数时,与状态是非常有用的。图2中描述的系统可以同时处于灌注(Filling)和采集(Acquire)的状态。由于LabVIEW软件固有的并行处理特点,状态图的并发性特点在LabVIEW 环境下非常适合。

  除此之外,状态图第三个重要的特点就是可以用动作和转换来定义全面行为。每个状态除定义了编程人员为响应特殊事件所配置的动作外,还定义了进入和退出动作。用户可以为每个已定义的行为编写LabVIEW 数据流代码。而过渡转换也是以同样的方式工作,在已配置的触发信号产生时或者LabVIEW 保护码值为“真”时被执行。

  开发LabVIEW状态图非常简单,只需要4个步骤,如图3所示。首先在LabVIEW 状态图模块中创建系统相应的状态和状态间的转移;然后再定义状态中的动作,包括何时进入、退出、警戒等,也可以自己开发LabVIEW代码来设计自定义触发来确定什么时候发生状态转移;接下来只需要按下“生成”键即可自动生成包含状态图逻辑的子VI;最后将这些子VI嵌入到LabVIEW程序中就完成了整个开发的过程。

  

 

 

  设计状态的转换 设计转换动作 生成状态图子VI 嵌入到LabVIEW程序框图

  图3 四步骤轻松开发LabVIEW状态图

  当状态图设计完成后,LabVIEW可以在一系列的硬件平台中部署状态图代码,包括台式机、人机界面(HMI)、可编程自动化控制器(PAC)如NI CompactRIO及PXI、NI硬件中的FPGA以及任何32位单片机。这个能部署到多种硬件的特性使得LabVIEW状态图模块成为设计和部署嵌入式系统的最佳工具。

  目前的测控系统规模和复杂程度已远超过几年前,系统架构代码量以及后期的调试成本都呈指数增长,这给予了开发人员持续的压力。LabVIEW 8.5这一全新的模块则为架构复杂的大型程序提供了有利的工具,协助工程师轻松应对挑战。

  对多核技术的支持

  可以想象,应用程序规模的日益增大导致开发人员对于CPU处理器的运算速度的要求也越来越高。由于能量消耗和热量发散的限制,处理器速度的发展近年来遇到了瓶颈,通过增加时钟速度来提高性能已经不再可行,芯片制造商开始转向全新的芯片结构,即多核技术。

  以往,当电脑升级到一个更快速的CPU后,也就意味着每一条独立指令的运行速度都会加快。如今使用多核之后,如果想继续提高性能,开发者就需要设计应用程序,为每个核分配工作——本质上就是开发一个并行应用程序来取代顺序应用程序。

  然而,这对于许多习惯于开发单线程应用的开发者来说是一个极大的挑战。如果工程师使用的是串行的编程语言,如C语言,那么在进行多线程应用软件的编写时,需要专门的语义创建和管理线程,并且在线程安全方式下进行数据的传送。

  相比之下,NI LabVIEW就非常适合于创建并行的多线程应用。首先,相比文本编程语言的自上而下的顺序结构,由于LabVIEW是基于数据流的编程方式,其本身就是一种并行的编程结构;早在LabVIEW 5.0时LabVIEW就支持多线程:在程序编写完毕后,LabVIEW编译器可以自动识别线程并创建线程到不同的任务和循环上,再由操作系统分配到不同的核上运行。

  LabVIEW的未来版本还将针对多核技术提供更多特性:如可以将嵌入式实时应用自动地划分为多个线程,并将它们映射到多个处理核之中,这也被称为对称多线程处理技术,从而使设计人员可以自动将均衡的任务量分配到各个核上;同时,工程师也可以根据自身需求手动设置线程运行在特定的核上,例如将那些对时间确定性要求苛刻的采集与控制任务放在单独的核上运行,而将对确定性要求不高的界面响应、数据录入等任务放在另外一个核上运行。

  综上所述,使用多核技术已经成为工程师开发大型复杂的测控系统的必要条件,而LabVIEW 8.5则可以让用户更方便和更直接地享受到多核给系统性能带来的直线提升。

  功能增强的项目管理

  系统架构和程序设计是开发大型应用程序的核心,但是开发人员也需要一个载体能够全面管理项目中的所有资源。前文已经提到,LabVIEW 8中首次引入的LabVIEW项目极大地帮助了编程人员进行大型应用程序的开发,但是经验丰富的LabVIEW程序员依然渴望更多更强的新功能以解决他们在开发过程中所遇到的挑战。

  以前,工程师在开发过程中会遇到下面两个挑战:首先,随着应用程序大小的增长,使得查看和管理硬盘中所有与开发工程相关的文件变得愈加困难;其次,在多个程序版本存放在同一个本地硬盘时,在程序员未知的情况下,有时候VI会自动链接到不需要的或者旧版本的子VI中,这种情况被称为交叉连接(cross-linking)。

  因此,为了响应开发者的要求,在LabVIEW8.5中针对项目管理增添了两大新功能,从而解决了这两大挑战。

  同步LabVIEW项目文件夹至本地硬盘

  对于那些熟悉LabVIEW项目的开发人员而言,当使用LabVIEW 8.5中的项目浏览器时会马上发现一个明显的变化:新增加了选项卡视图(图4)。开发者们通过项目选项卡,既可以使用以前版本的LabVIEW已经存在和熟悉的LabVIEW项目组件,也可以在新增的文件选项卡中交互式地查看和改变LabVIEW项目中所有文件的位置。

  

 

 

  图4 全新的选项卡视图允许用户自由选择不同的浏览方式

  开发者从LabVIEW 8引入项目管理之后就一直希望能够定义LabVIEW项目文件夹与硬盘文件夹之间更为明确的关系。因此,LabVIEW 8.5开始允许开发者同步LabVIEW项目文件夹至硬盘上的目录,从而简化了对同一应用程序的所有文件的管理。这里所说的“同步”是指这些新的LabVIEW项目文件夹将会基于它们相应的物理目录中的内容而不断地更新。

  这些自动同步的LabVIEW项目文件夹可以即时地反映开发者在硬盘中所进行的任何操作(包括添加、移动或删除文件等)。但是,在使用自动同步的项目文件夹后,由于文件夹中的内容总是精确地匹配其物理目录的结构,从而导致开发者不能脱离硬盘上的文件层次结构来对文件实现自定义的虚拟的组织活动。但是,在LabVIEW 8.5中,这样的情况是不会发生的,因为用户可以在同一个项目中同时使用自动同步的文件夹和虚拟文件夹,从而结合两种方式以实现最大化的灵活性。

  去除交叉连接现象

  为了更清晰地说明交叉连接是什么,先举一个简单的例子:如果开发者移动了硬盘上某个VI的路径,那么在下次需要它时LabVIEW就必须搜索并重新连接倒那个丢失的VI。在某种情况下,LabVIEW可能会错误地连接到同一个代码的早期版本或另一个分支,或者是具有同样名称的不同VI,从而导致不可预料的行为发生,这种情况是很难进行定位和调试的。LabVIEW 8.5提供了新的工具以帮助开发者防止交叉连接的发生。

  第一个工具就是新增的文件选项卡,利用文件选项卡,开发者可以直观地确认存在于废弃目录中不必要的VI并且其他文件不会错误地包含在某个特定的LabVIEW项目中。其次,LabVIEW项目还提供了其他的警告和调试工具来帮助开发者了解和防止交叉连接。当LabVIEW检测到一个可能的交叉连接情况时,它将会通过在LabVIEW项目中的VI名称后面显示“冲突”(Conflict)来警告开发人员(图5)。这一信息意味着LabVIEW已检测到在同一个LabVIEW项目中多于一个具有相同名称的VI被调用。此时开发者就可以通过工具栏中的一个新对话框来解决这个冲突,它可以帮助开发者采取一种自上而下的方式来引用正确的文件。

  

 

 

  图5 LabVIEW 8.5去除交叉连接现象

  LabVIEW一直积极响应使用者的反馈来实现持续的创新和发展,从而给予工程师和科学家们更完美的编程体验。这次新增的项目管理功能则更进一步地使开发人员管理和组织项目资源变得更加简便和安全。

  纵观目前测试测控领域的发展趋势,产品的功能集成化、协议的多样化致使系统开发人员已经无法通过简单的、单线程的程序来满足要求,大型的应用系统开发成为了必然的发展趋势。作为图形化的编程开发平台,全新的NI LabVIEW 8.5所提供的多种新特性帮助了工程师更有效地来进行系统的架构、开发以及管理,大大减少了开发时间和成本,成为测量测试和自动化开发平台的不二之选。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客