Git Product home page Git Product logo

labview_book's Introduction

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

labview_book's People

Contributors

ruanqizhen avatar primeking avatar fuxiaohou avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.