LabVIEW新手5大错误

发布者:EEWorld资讯最新更新时间:2013-09-05 来源: EEWORLD关键字:LabVIEW 手机看文章 扫描二维码
随时随地手机看文章

    虽然NI LabVIEW软件长期以来一直帮助工程师和科学家们快速开发功能测量和控制应用,但不是所有的新用户都会遵循LabVIEW编程的最佳方法。 LabVIEW图形化编程比较独特,因为只需看一眼用户的应用程序,就马上可以发现用户是否遵循编码的最佳方法。有些用户会犯这些错误是因为他们没有真正理解LabVIEW框图数据流背后的原理,而有些用户则是不知道哪些特性可提高LabVIEW编程质量。

    本文介绍了经验欠缺的LabVIEW程序员最经常犯的一些编程错误,同时也提供了采用正确LabVIEW编程方法的建议。

图 1. LabVIEW新手典型“杰作”

过度使用平铺式顺序结构

    许多LabVIEW新手并不完全了解“数据流”执行背后的概念,而这些概念却是LabVIEW编程的基础。其中一个现象是用户往往在程序框图中过度使用平铺式顺序结构。用户经常依赖平铺式顺序结构来实现程序框图的代码串行执行,而不是使用数据流和节点之间的连线。

图 2. 用户往往过度依赖平铺式顺序结构,而没有充分理解数据流编程概念。

    数据流编程是指只有在所需的数据输入全部到达时,框图上的节点(子VI、本原、结构等)才开始执行。 这对于使用LabVIEW的程序员来说非常有用,因为独立的进程本身就可以实现并行运行,而命令式语言却需要额外的设置才能实行并行执行。随着计算机CPU的不断增多,LabVIEW可自动分解并行流程,提高代码性能,而无需用户编写任何额外代码。而强行使用平铺式顺序结构来执行程序框图不仅会限制并行运行,还会丧失这一优势。限制程序框图中不必要的结构有助于提高整体可读性和保持更简洁的框图。

    错误连线可以有效地实现程序框图上的数据流,而不需要依靠平铺式顺序结构,此外错误连线还有助于实现错误处理策略。

何时应该使用平铺式顺序结构?

    通过平铺式顺序结构来执行程序框图有助于代码性能的基准测试。通过使用框架内具有时间计数器的顺序结构,您可以决定两个时间计数器之间代码执行所花费的时间。这是一般数据流执行所无法实现的。

图 3. 平铺式顺序结构和时间计数器VI有助于代码的基准测试。

    关于数据流编程的更多信息,请访问在线自学培训(ni.com/self-paced-training)LabVIEW核心课程1的“数据流”。购买LabVIEW或具有标准服务项目(ni.com/ SSP)会员资格的用户可以免费参加在线自学培训。

错误使用局部变量

    LabVIEW编程中另一个常见的错误是过度使用局部变量。局部变量是共享内存中的一个区域,用于在计算机程序不同部分之间传递数据。局域变量通常用于文本编程语言,具有非常强大的功能,但如果出现竞争条件,就会产生问题。

    对于其他编程语言来说,通过变量传递数据是必需的,而LabVIEW则提供了一种数据流方法,可将数据从程序的一个部分移动到另一个部分

    LabVIEW固有的并行性机制决定着用户不能过度使用变量,因为同一时间内通常会有多个不同的位置的程序访问共享内存。如果过度使用变量,则会出现某个读/写操作赢了“竞争”,而其他操作则输了“竞争”,丢失数据的操作会被忽视,因此在LabVIEW中过度使用变量可能会最终导致数据丢失。

    您可以通过多种方法安全地将数据从LabVIEW程序的一个部分传递到另一个部分,包括连线、队列、事件、通知、功能全局变量等等。每个机制都是针对特定情况设计的,但都具有消除竞争条件的功能。

    关于在LabVIEW程序内正确移动数据的更多信息,请访问在线自学培训(ni.com/self-paced-training)LabVIEW核心课程1的“局域变量”和LabVIEW核心课程2的“通知、队列和事件”。

忽略代码模块化

    通常情况下,新LabVIEW用户创建的是“即写即忘”应用程序去完成简单的任务,而没有考虑到以后是否会用到这些代码。随着编程工作越来越多,他们会发现自己一遍又一遍地重写同一段代码。而如果在编程同时创建一个可复用于其他应用的模块化子VI,就可以节省大量的开发时间。

    如果您知道代码的特定部分将会重用于同一应用程序,或感觉该部分代码可能会用于未来的应用程序,那么您应该花一点时间将该部分代码变成一个子VI。如果要使某部分代码成为一个子VI,您需要做的主要是添加一个文档、使用“接线端”、禁用某些VI属性。创建子VI的最简单方法之一是高亮标记程序框图中的某部分代码,然后从菜单栏中选择“编辑>>创建子VI”。这样这部分代码就会放到一个单独的VI,然后使用“接线端”。您仍然需要为图标添加说明,并将文档记述添加到程序框图和VI属性中,然后取消某些VI设置,但“编辑>>创建子VI”可帮助您很好地了解代码的模块化功能。

图 4. 采用正确的LabVIEW代码模块化操作可以帮助您节省大量开发时间

    代码模块化时必须取消的一项设置是“允许调试”。 您可在“VI属性(文件>>VI属性)”下的“执行”目录中找到此选项。代码完全正常运行无需再使用高亮执行等调试功能时,在执行设置中取消“允许调试”,然后再次运行VI。这样做的好处是由于在编译过程中进行了优化,应用程序的运行速度可能加快,而且由于启动调试的代码被关闭,VI所占的磁盘物理空间也相应减少了。

    关于代码模块化的更多信息,请访问在线自学培训LabVIEW核心课程1的“理解模块化”。

创建庞大繁琐的程序框图

    许多新LabVIEW用户都会把程序框图编写得非常繁琐庞大。对于一些复杂的应用程序,我们难免需要编写较大的程序框图,但庞大的程序框图从一定程度上也可以表明该程序缺乏编程架构。如果没有一个基本的架构,要长期维护该程序是非常困难的,而且如果以后要添加新功能也会非常困难。正如只有一个好的框架才能建造一栋结构合理的房子,一个好的编程架构可以为您构建应用程序提供了一个安全可靠的框架。

    几乎所有的程序员都会发现常见的框架中,软件架构是非常有用的。实际上LabVIEW中的许多架构,如生产者/消费者和状态机,与其他编程语言非常相似。

    了解LabVIEW的架构可以缩短开发时间和提高应用程序的可扩展性。 LabVIEW 2012包含了模板和项目范例,使理解架构变得更加容易。模板解释了不同的架构及应用。项目范例则是基于模板的更大型应用程序,演示了如何使用模板来应对实际的挑战。您可以将硬件加入到范例项目中,或者需要时可将项目范例作为一个整体应用程序,同时项目范例具有开放性且文档记述也很完整,所以您可针对具体应用进行自定义。

图 5. LabVIEW 2012中的模板和项目范例使得理解软件架构变得非常轻松。

    关于LabVIEW架构的更多信息,请访问在线自学培训(ni.com/self-paced-training) for LabVIEW核心课程2的“设计模式”。

不重视文档记录

    优秀的代码文档可以有效地帮助他人理解自己写的程序。遗憾的是,许多程序员通常在开发周期末期功能开发结束之后才开始进行文档撰写。这使得用于对代码进行文档记录的时间变得非常少。正确的做法应该是在开发过程中就需抽出时间来开始进行文档记录。文档对于编程人员自身也非常有用,尤其是当他们过段时间回来看代码却不记得当初他们为什么选择某些代码时。程序员经常会一边喝着咖啡,一边熬夜编程,这往往会出现“短暂失忆”。而文档则可以帮助程序员进行回忆。

    一般情况下,相对于基于文本的程序,LabVIEW的图形化特性使得程序阅读更为容易,但是有效的文档记录可以减少“解码”程序所需的时间。添加文档注释到程序框图的最简单方式是使用自由标签。您可以在框图的空白位置双击左键,并输入文字,添加注释。然后,使用箭头标记来指向自由标签引用的特定代码。如果需要添加图片,则可将它们复制到剪贴板,然后粘贴到程序框图中。物理系统图片和数学公式均有助于清晰说明程序框图内的代码上下文。

图 6.架构正确且文档记录充分的代码不仅可帮助其他人理解您的代码,也可帮助您更好地理解自己的代码。

    对代码进行文档记录不仅只是针对复用程序库,而应该是针对每一个程序。当一个人需要为其他人讲解时,他对该主题将会有更深刻的理解。文档记录从本质上看就是在迫使程序员进行讲解,以帮助他们更好地了解自己的代码。

    关于文档记述的更多信息,请访问在线自学培训LabVIEW核心课程1的“对代码进行文档记录”。

    LabVIEW旨在帮助工程师和科学家更成功地应对全球最严峻的挑战

    LabVIEW社区拥有庞大的工程师和科学家会员,为其提供了一个有效的平台来与他人分享知识。如果您愿意分享自己所犯过的新手错误,请发布到bit.ly/lvrookiemistakes。






关键字:LabVIEW 引用地址:LabVIEW新手5大错误

上一篇:适用于每个LabVIEW开发者的巧妙调试技巧
下一篇:MathWorks 引入两款 Polyspace 代码验证新产品

推荐阅读最新更新时间:2024-05-02 22:45

如何通过SIT链接Maltalb2011b和Labview2011
1、先安装matlab2011b,然后安装LabView2011 说明: a.必须先安装Matlab2011b,然后安装LabView2011 b.安装LavView2011必须选择安装Simulink Interface Toolkit,因为Matlab和Labview是通过这个组件进行链接的 2.打开Matlab,运行edit matlabrc,在打开的matlabrc文件末尾添加: addpath('C:SimulationInterfaceToolk it'); % 将SimilinkInterfaceToolkit 添加到Path中 NISIT_AddPaths; NISITServer;
[测试测量]
借助于LabVIEW仪器驱动,可以轻松连接至任意仪器
每种可编程测试测量仪器都有一组自身的命令。通常,与该仪器相配套的程序员手册中记录了这些命令,然后我们再从中寻找所需的命令。有些命令如识别命令(*IDN?)对大多仪器来说都是一样的。但是对于多数仪器来说,不同的仪器模型的命令和参数都是不同的。 仪器驱动抽象化每种仪器的底层命令,并为所有仪器提供了一个相似的API,从而来简化寻找所需命令的过程。通过这种仪器驱动,你可以将精力集中于开发应用程序中,而无需将大量时间花在寻找正确命令、规范命令语言、解析返回数据上。另外,NI Labview仪器驱动是建立在虚拟仪器软件架构(VISA)标准上的,所以它们的总线和平台是彼此独立的。譬如,要进行自测试的话,你仅需使用LabVIEW的Sel
[测试测量]
借助于<font color='red'>LabVIEW</font>仪器驱动,可以轻松连接至任意仪器
LABVIEW和LABWINDOWS区别
labwindows cvi 与 labview 区别 ==================================================================================== 修改时间 07-19-2009 03:16 AM NI的工程师你们好: labview与lab windows cvi 都是贵公司的产品吧,他们之间有什么联系或者区别呢? LabVIEW is a graphical programming language. It is made up of a user interface which
[测试测量]
基于LabVIEW的电池管理系统与充电机通信协议测试
0 引言 随着近年来电动汽车行业如火如荼的发展,电动汽车技术相关的各种标准也相继推出,其中包括了《电动汽车非车载传导式充电机与电池管理系统之间的通信协议》(GB/T 27930-2011)。该协议是基于CAN应用层协议SAE J1939,J1939 是目前在国内汽车行业中应用广泛的CAN总线应用层协议。只有电池管理系统与充电机之间的正常数据交互才能保证电动汽车进行高效、安全的充电。因此,电池管理系统与充电机通信协议测试是电池管理系统测试的一个必不可少的项目。 本课题来源于北方车辆研究所电池管理系统测试平台项目。美国国家仪器NI PXI CAN采集卡以及Labview为模拟充电机与BMS通信提供了良好的软硬件环境。 LabVIEW
[测试测量]
基于<font color='red'>LabVIEW</font>的电池管理系统与充电机通信协议测试
LabView学习笔记(3)温度监测
利用随机数发生器产生温度值,并设置温度报警上限,用布尔开关切换温度报警的功能项,当前温度值超过设定的上限值时,点亮布尔指示器。程序框图如下图: 前面板设计: 这种简单的图形化编程方式,真是让人激动不已!
[测试测量]
LabVIEW程序设计模式(四)—状态机和事件结构的结合
上两节分别解决了基本状态机的第(1~5)个问题,但是是否具备一种模式能够综合队列型状态机模式和用户界面事件型模式的优点呢?这样可以同时避免基本状态机的第(1~5)个问题。答案是肯定的,本节将介绍如何将状态机与事件结构结合起来形成一种新的、稳定的模式。 状态机模式的基本构成元素是while循环和case结构,而事件结构模式的基本构成元素是while循环和event结构,因此新的模式应该由while循环、case结构和event结构组成。而while循环的目的是为了保证程序的持续运行,因此必须在最外层,这样就只剩下了图 20所示的两种组合方式。 在第一种方式中,每次循环的运行需要经过一个事件结构才能够实现case中各个分支的运行,那么到
[测试测量]
<font color='red'>LabVIEW</font>程序设计模式(四)—状态机和事件结构的结合
基于LabVIEW的FPGA模块FIFO深度设定实现
  引言   数据进入FPGA的速率高于传出的速率,持续的传输会造成数据的溢出,断续的传输可能会造成数据不连续。使用基于LabVIEW FPGA的DMA FIFO作为主控计算机和FPGA之间的缓存,若DMAFIFO深度设置的合适,FIFO不会溢出和读空,那么就能实现数据输出FPGA是连续的。   本文在介绍了LabVIEW FPGA模块程序设计特点的基础上,结合DMA FIFO的工作原理,提出了一种设定FIFO深度的方法,解决了FIFO溢出、读空的问题,实现了数据的连续传输。实验结果表明该方法正确、可行,程序设计满足系统对数据传输连续性的要求。   1 LabVIEW FPGA模块   LabVIEW FPGA是LabVI
[测试测量]
基于<font color='red'>LabVIEW</font>的FPGA模块FIFO深度设定实现
基于LabVIEW的远程测控方法
1 远程测试系统的组成   根据远程测控数据流量状况及不同的测试需求可采用基于Client/Server(简写为C/S)和Browser/Server(简写为B/S)两种网络模型组建远程测试系统。C/S模式适合数据传送量大的情况,而且具有效率高,数据可靠完整、兼容性强等特点。而对于数据传送量不大,需要远程模拟仿真的情况可以采用B/S模式,这样对于客户端的需求会很低,不需在客户端上安装相应的客户端软件,只需要浏览器便可登陆服务器对远程测试进行监控。远程测控系统结构图如图1所示。其中测控服务器作为测量发布节点,主要完成数据采集、数据发布以及将采集的数据存储到数据库服务器中的功能。Web服务器主要提供基本的网站功能,客户端通过访问
[应用]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved