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 文件夹 下,书中提到的示例基本都可以在此文件夹下找到,仅有个别示例因为过于简单或版权问题没有提供出来。

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

内容选取

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

在写作本书前,笔者陆续在博客上发表了多篇关于 LabVIEW 编程的文章。本书的一部分内容直接选用了博客上的文章。在把它们编辑成书的过程中,笔者又对它们进行了重新编辑和扩充。博客文章在介绍某些知识点时,面向的是是有经验的 LabVIEW 程序员,所以讲解并不详细。在本书的写作过程中,考虑到 LabVIEW 初学者也可能参考本书,所以对知识点的介绍更加细致。本书的内容都是笔者在学习和使用 LabVIEW 过程中积累的经验。受写作时间和个人能力的限制,本书没能覆盖 LabVIEW 所有细节内容和功能。在具体选择书中内容时,主要考虑和偏重了如下几部分:

  • 笔者个人擅长的领域。LabVIEW 可以被看作是一门编程语言,也可以被看作是一个测控工具。基于笔者的技术背景,本书主要从编程语言的角度来讲解如何使用 LabVIEW:如在 LabVIEW 环境中编写出高效、稳定、易读、可扩展的程序代码。书中常常会把 LabVIEW 与其它编程语言作类比,帮助读者从不同的角度来理解 LabVIEW。
  • LabVIEW 学习过程中的常见问题及易犯的错误。笔者曾经作为 LabVIEW 课程的讲师,为企业客户和在校大学生讲授过 LabVIEW 课程,也经常在博客、论坛或通过 Email 解答过 LabVIEW 使用者们的一些疑问,在公司内部,也经常指导和帮助新员工改进他们编写的 LabVIEW 程序。在这一过程中,笔者发现有些问题在 LabVIEW 初学者中出现的频率相当高。指正这些通病可能会使更多读者收益,所以本书有相当部分篇幅用来讲解这方面的内容。
  • 列举实际案例。在介绍 LabVIEW 的功能和用法时,书中会配合编程实例进行讲解。针对一个具体的编程问题,本书会介绍 LabVIEW 中有哪些不同的解决方案,各自优缺点是什么。
  • 优先讲解 LabVIEW 中最常用的功能。受限于时间和精力,笔者会优先介绍常用功能,较为偏僻的功能在恰好用到时再做介绍。
  • 优先讲解其它资料覆盖较少的内容。目前市场上已有不少 LabVIEW 中文书籍,笔者居住在国外,还无法购买市面上的书籍,但是会参考这些书籍公布出来的内容介绍和目录,然后优先把其它书籍中缺乏的内容加入本书。当然,为了保证书籍在阅读时具有连续性,很多基础内容也是必不可少的。笔者会在保持本书特色的基础上也尽量做到内容完整全面。
  • 本书无法替代 LabVIEW 的帮助文档。在阅读本书时,若对某些具体的函数或参数有疑问,可以打开 LabVIEW,查阅相关的帮助文档。

本书尽量按照从简至难的顺序来排布内容。但是,书中前面的章节也会偶尔提及后面章节才会详细讲解的技术,如果不影响继续学习,可以先跳过一些不容易理解的地方,待到后续章节再学习。如果需要查找一些特定的知识点,可以在本书阅读页面右上角的搜索框中进行搜索。

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

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

编程是一项实践性非常强的技能,再高深的理论也不如解决实际问题的能力。再好的书籍都只能作为参考,关键还在于实践,一定要亲自动手编写代码才能真正掌握书中的知识。

我和 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 在中国的普及和推广尽自己的一点绵薄之力。

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

我第一次接触 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 编程的人带来的,不仅仅是技术上的指引和技巧分享,它也是一种用十年经验书写的鼓励。我非常期待这本书的出版。