热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

labview中java联合编程_LabVIEW编程还可以这么简单?五大总结助你事半功倍!

描述虽然NILabVIEW软件长期以来一直帮助工程师和科学家们快速开发功能测量和控制应用,但不是所有的新用户都会遵循LabVIEW编程的最佳方法。LabVIEW图形化

描述

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

小编辛苦总结了经验欠缺的LabVIEW程序员最经常犯的一些编程错误,同时也提供了采用正确LabVIEW编程方法的建议。

aa998f8dcdb889933c3880b9c63dad69.png

LabVIEW新手典型“杰作”

01过度使用平铺式顺序结构

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

1b48d9a050ccad4f9b80cf223dad236e.png

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

数据流编程是指只有在所需的数据输入全部到达时,框图上的节点(子VI、本原、结构等)才开始执行。这对于使用LabVIEW的程序员来说非常有用,因为独立的进程本身就可以实现并行运行,而命令式语言却需要额外的设置才能实行并行执行。

随着计算机CPU的不断增多,LabVIEW可自动分解并行流程,提高代码性能,而无需用户编写任何额外代码。而强行使用平铺式顺序结构来执行程序框图不仅会限制并行运行,还会丧失这一优势。限制程序框图中不必要的结构有助于提高整体可读性和保持更简洁的框图。

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

5b7a6641f1069f93bc2f48f911762b07.png何时应该使用平铺式顺序结构?

平铺式顺序结构的数据流不同于其他结构的数据流。 所有连线至帧的数据都可用时,平铺式顺序结构的帧按照从左至右的顺序执行。 每帧执行完毕后,将数据传递至下一帧。 即一个帧的输入可能取决于另一个帧的输出。

297b239b98a786820bff6a16eddf62e6.gif

与层叠式顺序结构不同,平铺式顺序结构中不必使用顺序局部变量在帧与帧之间传递数据。 平铺式顺序结构在程序框图上显示每个帧,故无需使用顺序局部变量即可完成帧与帧之间的连线,同时也不会隐藏代码。

在平铺式顺序结构中添加或删除帧时,结构会自动调整尺寸大小。

不可在平铺式顺序结构的各个帧之间拖曳隧道。

应确立数据依赖或使用流经参数可控VI的数据流,避免过度使用平铺式顺序结构。

(Real-Time, Windows)右键单击平铺式顺序结构,在快捷菜单中选择替换为定时顺序,可将平铺式顺序结构替换为定时顺序结构。

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

423bf3519b50070bdad0fdec723f78e4.png

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

02过度使用局部变量

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

对于其他编程语言来说,通过变量传递数据是必需的,而LabVIEW则提供了一种数据流方法,可将数据从程序的一个部分移动到另一个部分。LabVIEW固有的并行性机制决定着用户不能过度使用变量,因为同一时间内通常会有多个不同的位置的程序访问共享内存。如果过度使用变量,则会出现某个读/写操作赢了“竞争”,而其他操作则输了“竞争”,丢失数据的操作会被忽视,因此在LabVIEW中过度使用变量可能会最终导致数据丢失。

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

03忽略代码模块化

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

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

8fba6fbd40a7de1a945e9175ae27271b.png

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

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

04创建庞大繁琐的程序框图

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

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

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

5e09e4b14c1c35bd8dcc87b505359611.png

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

05不重视文档记录

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

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

434cd9d1a8eeddb7820ae322df6dfd64.png

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

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

打开APP精彩内容

点击阅读全文



推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 从高级程序员到CTO的4次能力跃迁!如何选择适合的技术负责人?
    本文讲解了从高级程序员到CTO的4次能力跃迁,以及如何选择适合的技术负责人。在初创期、发展期、成熟期的每个阶段,创业公司需要不同级别的技术负责人来实现复杂功能、解决技术难题、提高交付效率和质量。高级程序员的职责是实现复杂功能、编写核心代码、处理线上bug、解决技术难题。而技术经理则需要提高交付效率和质量。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
author-avatar
童恩_658
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有