Skip to main content

LabVIEW 编程经验

开源共享版本说明

《我和 LabVIEW - 一个 NI 工程师的十年编程经验》,由北航出版社出版发行,ISBN:9787512408487。这本书是笔者在学习和使用 LabVIEW 编程过程中的经验总结。书中由浅入深地对 LabVIEW 最常用的功能和 LabVIEW 学习过程中常见的问题进行了一一介绍。

images_2/cover.png

在征得北航出版社的同意后,笔者在 GitHub 网站开源共享了本书全部内容,希望能够帮助到更多的读者。因为原书名有些不太适合近况,所以开源项目把原书名缩短成了一个更加通用的名字。同时也欢迎读者加入这个项目,如果有意修改书中的错误、增删内容、补充示例等,可以直接在项目中进行。如有任何问题,可在留言区留言。GitHub 是全球最大的开源项目托管平台,本书的修改以及留言讨论需要一个 GitHub 账号,是免费注册的。

为提高阅读体验,可以使用本书阅读页面:https://lv.qizhen.xyz/https://labview.qizhen.xyz/。本书所有的文字和图片都保存在 GitHub docs 文件夹 下。相关的示例代码保存在 code 文件夹 下,书中提到的示例基本都可以在此文件夹下找到,仅有个别示例因为过于简单或版权问题没有提供出来。

笔者并没有发行版书籍的电子文档,开源的是本书的原稿。最初的原稿与发行版内容基本相同,主要是少了漂亮的排版。笔者依然在维护、改进本书,随时间推移,开源的版本与发行版之间的差别会越来越大。受笔者水平所限,在编写此书的过程中难免会有疏忽和差错。本书发行之后,收到了不少热心读者的反馈,帮助指正了书中错误,使得笔者可以修正这些错误。在此谨向读者们表示诚挚的感谢! 欢迎读者在本书的 讨论区 留言提问或就书中内容进行讨论。

我和 LabVIEW

一转眼工作已经十年了。自从成为 NI 公司的一名软件工程师,LabVIEW 就一直是我日常工作中最主要的编程语言。所以当我考虑以哪种方式来纪念我参加工作十周年时,把我积累的 LabVIEW 编程经验总结成书,应当是最有意义的一种方式了。

还是在大学的时候,有一次老师要求编写一个程序,用来模拟一个控制系统:给它一个激励信号,然后显示出它的输出信号。那时,我的脑海里就闪烁过这样的想法 —— 是否可以把每一个简单的传递函数都做成一个个小方块模样,编程时可以根据需要选择相应的函数模块,用线把它们连起来,这样就可以方便地搭建出各种复杂系统。

后来,当我第一次看到别人给我演示的 LabVIEW 编程时,发现它就是把一些小方块用线连起来,完成了一段程序。这和我曾经有过的那种想法多么相似啊!一种亲切感油然而生。从此,我对 LabVIEW 的喜爱就一直胜过其它的编程语言。

这些年里,我对 LabVIEW 编程的认识经历了不少转变。刚开始接触 LabVIEW 的时候,第一印象就是觉得用这东西编程序比 C 语言简单多了,尤其在设计界面的时候。LabVIEW 是一种真正意义上的图形化编程语言。与 C、Basic 等文本编程语言相比,它在编程过程中有更详细的提示信息,如函数的功能、参数类型等等,程序员再不需要去记忆那些枯燥的函数信息了。而且,一段编写风格良好的图形程序代码,要比文本代码更加清晰直观,便于阅读。

刚开始用 LabVIEW 编程时,我连一本相关的书籍都没读过,可以说完全是靠自己摸索。当时,市面上几乎没有有关 LabVIEW 的中文书籍,而阅读英文资料又感觉太慢太累。但是,靠自己摸索的方法也有好处,最明显的就是有成就感。自己琢磨着解决了一个问题,要比模仿别人的方法更令人兴奋。再者,他人的方案并不一定是最佳的,自己独自思索就不至于被他人的方案局限住思路。

当然,我不可能满足于只用 LabVIEW 编写一些简单程序,当然还希望能够用它来编写大型的软件,并且提高自己的开发效率。这时,自己对编程的要求有了一个质的提高,不阅读相关的书籍资料就不行了。有些问题,不读书,自己可能永远都得不到最佳的答案。同样,有些 LabVIEW 的功能,如果不阅读原始资料,自己也许永远都掌握不了。于是,我把能得到的 LabVIEW 的中高级教程都阅读了一遍。因为已经有了一定的基础,我就可以在读书的过程中反思自己以前的编程方法是否合理、高效。在我参考过的所有资料中,最好的教程还是 NI 自己编写的 LabVIEW 中高级教程。但书本中一般原理讲得多,具体的编程技巧涉及得少,所以还必须大量阅读他人的代码,才能学习到更多更好的编程方法。

作为一名忠实的 LabVIEW 语言使用者,我衷心地期望着 LabVIEW 也可以成为一种被广泛使用的通用编程语言,能够在更多的领域中与 C、Java 等语言一争高下。LabVIEW 虽然有它独特的优势,但不足之处也很明显,我在编程过程中就曾感觉到它的很多不便之处。这也就成了我进一步的追求目标:尽自己所能,对 LabVIEW 作一些改进和完善,使它更加强大和易用;同时,为 LabVIEW 在中国的普及和推广尽自己的一点绵薄之力。

内容选取

笔者曾是美国国家仪器有限公司(全名:National Instruments Co. Ld. 简称:NI)的研发工程师,但是本书的写作完全属于个人行为,书中的某些见解可能与 NI 的官方意见并不完全一致,仅供读者参考。

在写作本书前,笔者陆续在博客上发表了多篇关于 LabVIEW 编程的文章。本书的一部分内容直接选用了博客上的文章。在把它们编辑成书的过程中,笔者又对它们进行了重新编辑和扩充。博客文章在介绍某些知识点时,面向的是是有经验的 LabVIEW 程序员,所以讲解并不详细。在本书的写作过程中,考虑到 LabVIEW 初学者也可能参考本书,所以对知识点的介绍更加细致。本书的内容都是笔者在学习和使用 LabVIEW 过程中积累的经验。受写作时间和个人能力的限制,本书并没有覆盖 LabVIEW 所有细节内容和功能,也没有详细解释书中所使用到的 LabVIEW 自带 VI 或函数的参数设置及用法。不过这些内容在 LabVIEW 的帮助文档中均有详细介绍,所以在阅读本书时,若对某些具体的函数有疑问,可以打开 LabVIEW,查阅相关的帮助文档。

近几年,随着 LabVIEW 在中国的普及,市面上与之相关的书籍也越来越多。本书会尽量介绍一些其它书籍覆盖较少的部分。比如更加侧重于介绍如何解决问题,针对一个具体的编程问题,本书会介绍 LabVIEW 中有哪些可以实现的方法,各自优缺点是什么。

在具体选择书中内容时,主要偏重如下几部分:

  • LabVIEW 中最常用的功能。本书所介绍的内容都是 LabVIEW 编程者最经常使用到的功能。随着 LabVIEW 版本的更新,其功能也越来越多,有一些功能是极少被使用到的。这些偏僻的功能对于大多数读者帮助不大,所以本书也未做讲解。况且,目前市场上已经有过多本比较详细介绍 LabVIEW 控件、函数使用的中文书籍,本书就没有一一详细介绍这方面的内容。
  • LabVIEW 学习过程中的常见问题及易犯的错误。笔者曾经作为 LabVIEW 课程的讲师,为企业客户和在校大学生讲授过 LabVIEW 课程,也经常在博客、论坛或通过 Email 解答过 LabVIEW 使用者们的一些疑问,在公司内部,也经常指导和帮助新员工改进他们编写的 LabVIEW 程序。在这一过程中,笔者发现有些问题在 LabVIEW 初学者中出现的频率相当高。指正这些通病可能会使更多读者收益,所以本书有相当部分篇幅用来讲解这方面的内容。
  • 笔者个人擅长的领域。LabVIEW 可以被看作是一门编程语言,也可以被看作是一个测控工具。基于笔者的技术背景,本书主要从编程语言的角度来讲解如何使用 LabVIEW:如在 LabVIEW 环境中编写出高效、稳定、易读、可扩展的程序代码。书中常常会把 LabVIEW 与其它编程语言作类比,帮助读者从不同的角度来理解 LabVIEW。
  • 尽量不重复 LabVIEW 帮助文档中的内容。LabVIEW 的帮助文档应当是最全面、最权威的 LabVIEW 工具书,它记载了 LabVIEW 中每一个函数、VI 的使用方法,每一个对话框上的内容…… 对于可以在 LabVIEW 帮助文档中直接查阅到的内容,本书尽量不再重复。那些 LabVIEW 帮助文档中没有涉及到的内容,如 LabVIEW 程序设计的原理、原则,如何选取最适合当前情景的编程方法,编程时的注意事项,LabVIEW 的学习方法等等,是本书着重介绍的内容。
  • 列举实际案例。在介绍 LabVIEW 的功能和用法时,书中会配合编程实例进行讲解。针对一个具体的编程问题,本书会介绍 LabVIEW 中有哪些不同的解决方案,各自优缺点是什么。

本书创作的时间跨度非常长。书中范例和截图最初使用的是 LabVIEW 8.6 中文专业版,在之后不断维护的过程中,又使用了不同新版本的 LabVIEW,有些是英文版的,有些在不同的操作系统下。这造成了本书截图中 LabVIEW 的界面风格有不一致,还望谅解。受篇幅的限制,本书一般只收录一些关键设置和程序关键部分的截图。没有收录的程序框图,读者在学习本书时可以自己尝试编写,也可以直接下载本书的示例辅助学习。 本书所用到的全部示例,包含插图中出现的 VI,都保存在本书所在的 GitHub 项目 中。

LabVIEW 一直在不断的改进、演化中,但是,LabVIEW 的编程思想是不会轻易变动的。所以即便读者使用的是新版本的 LabVIEW,同样可以使用本书作为学习 LabVIEW 的参考书。笔者也会尽量紧跟 LabVIEW 的更新,添加新内容,去除过时的内容。

    —— 美国国家仪器有限公司 上海研发中心 总经理 郭文哲

我第一次接触 LabVIEW 是在 1991 年。那时我刚加入 NI 公司六个月。我当时主要是做 VXI 控制器的底层驱动程序,本来跟 LabVIEW 没有太大关系,但当时 NI 准备在 LabVIEW 平台上支持 VXI 控制器,所以老板要我写一个支持 VXI 的 LabVIEW 库。

那时我还不会用 LabVIEW,所以就报名参加了 NI 面向客户为期三天的 LabVIEW 培训课程。讲师是一个年轻的应用工程师(AE),跟我差不多同时加入公司的,讲课非常认真。LabVIEW 培训课程的模式是:讲师介绍一段 LabVIEW 的功能,然后让学生自己做习题,运用刚讲过的 LabVIEW 功能来解决一些问题。我觉得这种用动手的方式学习还是很有效的。后来我发现每次做完习题还有剩余时间,所以就跳到下一章的习题继续做。LabVIEW 毕竟不难学,看了教材以后,大部分的习题都能自己做了。就这样,三天的 LabVIEW 课程,大概两天半就毕业了。

我讲这个故事是想说明一点:十几年前的 LabVIEW,可以 3 天就学会。当然,这个说法也不完全准确,正如很多其他东西一样,LabVIEW 是易学难精。要真正用好 LabVIEW,不可能只用 3 天时间。但是要想在 3 天内入门,也并非难事。而今天,经过十几年的发展,LabVIEW 一方面功能日渐强大,以前无法实现的功能,现在都实现了。比如 LabVIEW 在 6i 版增加了对互联网的支持;7.0 版本增加了 Express,简化了很多基本操作;在 8.x 版本中增加了对面向对象的支持,并从各个角度加强了的大规模程序的管理能力。但另一方面,LabVIEW 也日益难学了。这就是为什么我认为阮奇桢的书非常实用。现在要学好 LabVIEW,需要详尽的学习指南,而我认为奇桢是写这本 LabVIEW 指南的不二人选。作为一位资深的 LabVIEW 开发工程师,他写这本书也有着得天独厚的条件。他积累了十年使用 LabVIEW 的经验,从底层的仪器驱动程序,到 LabVIEW 人机界面,乃至 LabVIEW 核心算法,他都用 LabVIEW 开发过。而且奇桢是一个对技术、对编程怀有极大热忱的人。他不只是出于工作需要去学习 LabVIEW,他更是用一个发烧友的热情去研究 LabVIEW。他的这种热情我是亲眼目睹的,因为经常看到奇桢桌子上堆满了 LabVIEW 和其他方面的技术书。我好奇地问奇桢是不是项目上需要他学这么多东西,他回答:不是,只是个人兴趣爱好。

十年磨一剑。奇桢用十年学习和使用 LabVIEW 的经验和心得凝聚成一本书:《我和 LabVIEW》,正如书名所示,奇桢和 LabVIEW 已如十年同窗好友,相知甚深。十年中,奇桢编写的 LabVIEW 代码已经远远超过这本书的厚度。这十年,我们亲历了技术领域的瞬息万变,而坚持和创新始终是一名工程师不变的素质。虽然我偶尔会怀念三天速成 LabVIEW 的日子,但我更欣赏作者十年如一日对技术的执着。我相信,这本书给所有想精通 LabVIEW 编程的人带来的,不仅仅是技术上的指引和技巧分享,它也是一种用十年经验书写的鼓励。我非常期待这本书的出版。