《我和 LabVIEW - 一个 NI 工程师的十年编程经验》,由北京航空航天大学出版社出版发行,ISBN:9787512408487。这本书是笔者在学习和使用 LabVIEW 编程过程中的经验总结。书中通俗易懂地介绍了 LabVIEW 最常用的功能以及在 LabVIEW 学习过程中经常遇到的问题。
在征得北航出版社的同意后,笔者将本书的全部内容在 GitHub 网站上开源共享,希望能够帮助更多的读者。由于原书名有些不太适合当前情况,开源项目将原书名缩短为更通用的名字。同时也欢迎读者加入这个项目,如果有意修改书中的错误、增删内容、补充示例等,可以直接在项目中进行。如有任何问题,可在留言区留言,也可以在知乎、豆瓣相关的条目下留言。GitHub 是全球最大的开源项目托管平台,修改本书以及留言讨论需要一个 GitHub 账号,注册是免费的。
为提高阅读体验,可以使用本书阅读页面:https://lv.qizhen.xyz/ 或 https://labview.qizhen.xyz/。手机屏阅读的时候,查看全书目录需要点击一下页面左上角 3 根横线的那个按钮。本书所有的文字和图片都保存在 GitHub docs 文件夹 下。相关的示例代码保存在 code 文件夹 下,书中提到的示例基本都可以在此文件夹下找到,唯有少数示例因为过于简单或版权问题没有提供出来。
开源的最初版本是本书发行版的第二版的原稿。在开源之后,笔者对开源版本做了大量更新和补充,开源版本与发行版之间的差别也越来越大。由于笔者水平有限,本书可能存在错误或缺陷。本书发行之后,收到了不少热心读者的反馈,帮助指正了书中错误,使得笔者可以提升书籍质量。在此谨向读者们表示诚挚的感谢!如果您发现任何错误或有任何建议,欢迎在留言区留言或直接联系笔者。笔者将非常感激您的帮助,并尽快进行改进。
笔者曾是美国国家仪器有限公司(全名:National Instruments Co. Ltd. 简称:NI)的研发工程师,但本书的写作完全是个人行为,书中的一些观点可能与 NI 的官方观点并不完全一致,仅供读者参考。
在写作本书之前,笔者曾在博客(https://ruanqizhen.wordpress.com)上发表了多篇关于 LabVIEW 编程的文章。本书的一部分内容直接选用了这些文章。在将它们编辑成书的过程中,笔者对它们进行了整理和扩充。博客文章在介绍某些知识点时,是针对有经验的 LabVIEW 程序员的,因此讲解并不详细。在本书的写作过程中,考虑到 LabVIEW 初学者也可能参考本书,因此对知识点的介绍更加细致。本书的内容都是笔者在学习和使用 LabVIEW 过程中积累的经验,受写作时间和个人能力的限制,本书没能覆盖 LabVIEW 的所有细节内容和功能。在具体选择书中内容时,主要考虑并偏重了以下几部分:
- 笔者个人擅长的领域。LabVIEW 可以看作是一种编程语言,也可以看作是一种测控工具。基于笔者的技术背景,本书主要从编程语言的角度讲解如何使用 LabVIEW:如何在 LabVIEW 环境中编写出高效、稳定、易读、可扩展的程序代码。书中常常会把 LabVIEW 与其他编程语言进行类比,以帮助读者从不同的角度理解 LabVIEW。
- LabVIEW 学习过程中常见的问题和易犯的错误。笔者曾经担任 LabVIEW 课程的讲师,为企业客户和在校大学生讲授 LabVIEW 课程。在公司内部也经常指导和帮助新员工改进他们编写的 LabVIEW 程序。在这一过程中,笔者发现有些问题在 LabVIEW 初学者中出现的频率相当高。纠正这些常见问题可能会使更多读者受益,因此本书有相当部分篇幅用来讲解这方面的内容。
- 提供实际案例。在讲解 LabVIEW 的功能和用法时,本书会配合编程实例进行解释。针对一个具体的编程问题,本书会介绍 LabVIEW 中有哪些不同的解决方案,并讨论各自的优点和缺点。
- 优先讲解 LabVIEW 中最常用的功能。由于时间和精力的限制,本书首先介绍常用功能,在需要时再讲解较为偏僻的功能。
- 优先讲解其他资料中没有涵盖的内容。目前市场上已有许多 LabVIEW 中文书籍,笔者居住在国外,无法购买这些书籍。但是,本书会参考这些书籍发布的内容介绍和目录,并优先把其他书籍中缺乏的内容加入本书。当然,为了保证书籍在阅读时具有连贯性,很多基础内容也是必不可少的。本书也会在保持自身特色的同时,尽量做到内容完整。
- 本书无法替代 LabVIEW 的帮助文档。在阅读本书时,若对某些具体的函数或参数有疑问,可以打开 LabVIEW,查阅相关的帮助文档。
为了帮助读者更好地学习,本书组织内容时先从简单的开始,再逐渐递进到更复杂的内容。但书中前面的章节偶尔也会提及后面章节才会详细讲解的技术,如果读者在阅读过程中遇到难以理解的内容,可以先跳过,等到读过后面的章节后再回来学习。另外,读者可以在本书的阅读页面右上角的搜索框中搜索特定的知识点。
本书的创作过程很长,书中的范例和截图最初使用的是 LabVIEW 8.6 中文专业版,之后在维护的过程中又使用了不同版本的 LabVIEW,包括英文版和在不同操作系统下的版本。这导致本书的截图中 LabVIEW 的界面风格有所不同,希望读者能够谅解。由于篇幅的限制,本书一般只包含一些关键设置和程序关键部分的截图。没有收录的程序框图,读者在学习本书时可以自己尝试编写,也可以直接打开本书的示例程序来帮助学习。本书使用的所有示例程序,包括书中插图中出现的 VI,都保存在本书所在的 GitHub 项目 中。
编程是一项实践性非常强的技能,再好的书籍都只能作为参考,一定要亲自动手编写代码才能真正掌握书中的知识。
本书首版发行的时候,恰好是我工作十周年。自从成为 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 在中国的普及和推广尽自己的一点绵薄之力。
—— 美国国家仪器有限公司 上海研发中心 总经理 郭文哲
我第一次接触 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 编程的人带来的,不仅仅是技术上的指引和技巧分享,它也是一种用十年经验书写的鼓励。我非常期待这本书的出版。