尽管NILabview软件长时刻以来一向协助工程师和科学家们快速开发功用丈量和操控运用,但不是一切的新用户都会遵从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用户都会把程序框图编写得十分繁琐巨大。关于一些杂乱的运用程序,咱们不免需求编写较大的程序框图,但巨大的程序框图从必定程度上也能够标明该程序缺少编程架构。假如没有一个根本的架构,要长时刻保护该程序是十分困难的,并且假如今后要增加新功用也会十分困难。正如只要一个好的结构才干制作一栋结构合理的房子,一个好的编程架构能够为您构建运用程序供给了一个安全可靠的结构。
简直一切的程序员都会发现常见的结构中,软件架构是十分有用的。实践上LabVIEW中的许多架构,如生产者/顾客和状态机,与其他编程言语十分类似。
了解LabVIEW的架构能够缩短开发时刻和进步运用程序的可扩展性。LabVIEW2012包含了模板和项目典范,使了解架构变得愈加简略。模板解说了不同的架构及运用。项目典范则是根据模板的更大型运用程序,演示了怎么运用模板来应对实践的应战。您能够将硬件加入到典范项目中,或许需求时可将项目典范作为一个全体运用程序,一起项目典范具有开放性且文档记叙也很完好,所以您可针对详细运用进行自定义。
图 5.LabVIEW2012中的模板和项目典范使得了解软件架构变得十分轻松
关于LabVIEW架构的更多信息,请拜访在线自学培训(ni.com/self-paced-training) forLabVIEW中心课程2的“规划形式”。
不注重文档记载
优异的代码文档能够有用地协助别人了解自己写的程序。惋惜的是,许多程序员一般在开发周期晚期功用开发完毕之后才开端进行文档编撰。这使得用于对代码进行文档记载的时刻变得十分少。正确的做法应该是在开发进程中就需抽出时刻来开端进行文档记载。文档关于编程人员本身也十分有用,尤其是当他们过段时刻回来看代码却不记住最初他们为什么挑选某些代码时。程序员常常会一边喝着咖啡,一边熬夜编程,这往往会呈现“时刻短失忆”。而文档则能够协助程序员进行回想。
一般状况下,相关于根据文本的程序,LabVIEW的图形化特性使得程序阅览更为简略,可是有用的文档记载能够削减“解码”程序所需的时刻。增加文档注释到程序框图的最简略方法是运用自在标签。您能够在框图的空白方位双击左键,并输入文字,增加注释。然后,运用箭头符号来指向自在标签引证的特定代码。假如需求增加图片,则可将它们复制到剪贴板,然后粘贴到程序框图中。物理体系图片和数学公式均有助于明晰阐明程序框图内的代码上下文。
图 6.架构正确且文档记载充沛的代码不只可协助其别人了解您的代码,也可协助您更好地了解自己的代码
对代码进行文档记载不只仅仅针对复用程序库,而应该是针对每一个程序。当一个人需求为其别人解说时,他对该主题将会有更深入的了解。文档记载从本质上看就是在迫使程序员进行解说,以协助他们更好地了解自己的代码。