《我和 LabVIEW - 一个 NI 工程师的十年编程经验》,由北航出版社出版发行,ISBN:9787512408487。这本书是笔者在学习和使用 LabVIEW 编程过程中的经验总结。书中由浅入深地对 LabVIEW 最常用的功能和 LabVIEW 学习过程中常见的问题进行了一一介绍。
在征得北航出版社的同意后,笔者在 GitHub 网站开源共享了本书全部内容,希望能够帮助到更多的读者。因为原书名有些不太适合近况,所以开源项目把原书名缩短成了一个更加通用的名字。同时也欢迎读者加入这个项目,如果有意修改书中的错误、增删内容、补充示例等,可以直接在项目中进行。如有任何问题,可在留言区留言。GitHub 是全球最大的开源项目托管平台,本书的修改以及留言讨论需要一个 GitHub 账号,是免费注册的。
为提高阅读体验,可以使用本书阅读页面:https://lv.qizhen.xyz/ 或 https://labview.qizhen.xyz/。本书所有的文字和图片都保存在 GitHub docs 文件夹 下。相关的示例代码保存在 code 文件夹 下,书中提到的示例基本都可以在此文件夹下找到,仅有个别示例因为过于简单或版权问题没有提供出来。
笔者并没有发行版书籍的电子文档,开源的是本书的原稿。最初的原稿与发行版内容基本相同,主要是少了漂亮的排版。笔者依然在维护、改进本书,随时间推移,开源的版本与发行版之间的差别会越来越大。受笔者水平所限,在编写此书的过程中难免会有疏忽和差错。本书发行之后,收到了不少热心读者的反馈,帮助指正了书中错误,使得笔者可以修正这些错误。在此谨向读者们表示诚挚的感谢! 欢迎读者在本书的 讨论区 留言提问或就书中内容进行讨论。
一转眼工作已经十年了。自从成为 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 的更新,添加新内容,去除过时的内容。