Qizhen's profileLabVIEWPhotosBlogListsMore Tools Help

Blog


    女儿的名字

    虽然我的下一代影都还没有呢,但我未雨绸缪,已经开始为他们想名字了。由于干我这行的倾向于生女儿,目前只考虑了女儿的名字。

    老婆是山东人,所以老早给女儿想了个名字叫“阮思齐”。我并不是很喜欢这个名字,理想的名字应当是:字不算太生僻,但组合起来却没有重名的。“思齐”这个名字网上一搜一大把,创意不够。

    上个星期,回南京参加同学聚会。老同学得知我十年没跳槽,还在NI工作,跟我打趣说:“你打算在NI呆一辈子啦,将来生个孩子叫‘阮恩爱’得了。”
    “阮恩爱”这名字不算常见,不过听起来像是韩剧里的人物,不好。再说了,也不能真把公司名挪来用啊。叫“阮恩爱”、“阮仪器”,将来孩子会恨我的。

    不过这事还没完,回上海的路上,老婆说如果把你们公司名称里的“恩”“仪”两个字取出来做名字还是不错的。回到家Google上一搜还真没有叫“阮恩仪”的。我仔细想了想,这个名字还不错:常用字、无重名、有纪念意义,还带着台湾味,比韩版的好听多了。


    LabVIEW 2009 新功能 - 传引用

    以前版本的LabVIEW虽然也有多种方法可以让数据以引用的方式在程序间传递,但是用起来都有些麻烦。LabVIEW有了构建数据传引用的节点,大大简化了传引用的程序代码。

    新添的有关传引用的两个节点在函数选板“Programing->Application Control->Memory Control”中,分别是“New Data Value Reference”和“Delete Data Value Reference”。“New Data Value Reference”用于创建一个数据的引用,“Delete Data Value Reference”可以从引用中取回原来的数据。

    image

    引用最主要应用于多线程程序中。如果两个线程同时对同一份数据进行修改,则必须使用传引用的机制。否则,使用值传递的方式,数据在数据线分叉的地方,就会编程独立的两份,之后在两个线程内分别修改的是两份完全独立的数据,没办法对同一份数据进行修改的。

    比如下图这个程序,程序输入了一个数组,然后需要在两个并行的子VI中同时对这个数组中的数据进行修改。每个子VI可能修改了数组不同的元素,程序运行结束产生的数组应当把两个子VI中的修改都包含进来。因此,程序一开始需要数组数据生成一个引用,然后把引用分别传递到两个子VI中去。两个子VI都运行结束后,在从引用中取回数据。

    image

    LabVIEW中已有的函数还都是为值传递设计的,所以使用值传递少不了把数据取出、放回的过程。这以过程中,可能又会产生数据拷贝,效率会比较差。好在我们可以使用“In Place Element Structure”结构来处理从引用中取出、放回数据的过程。配合了“In Place Element Structure”结构使用后,LabVIEW会尽量使用数组原地址,而不是把从引用中取出的数据复制一份,这样就做到了传引用与效率的兼顾。比如下面两图中的程序,功能是完全相同的,但LabVIEW会对下面一幅图中的程序进行优化,提高效率。

    image

     image

    Express VI 5 - 创建 Express VI 的框架

    Express VI 有多种创建方式,但是普通用户只有唯一的一条途径来创建Express VI。LabVIEW中自带了一个专用于创建 Express VI 的工具,用户可以使用这一工具创建或修改Express VI。这个工具在LabVIEW的菜单“工具->高级->创建或编辑Express VI”下。

    image

    这个工具的主界面包含一张列表,列出以往创建过的一些Express VI。从列表上可以看到,一个Express VI有两个主要的功能VI组成:Source VI 和 Configure VI。Source VI实现的是Express VI 的功能;Configure VI实现的是Express VI的配置对话框。

    image

    我们可以在列表上双击Express VI这两个功能VI,然后对其修改。不过,为了更详细的演示Express VI的功能,我们还是从一个全新的Express VI说起。点击“创建或编辑Express VI”对话框上的“新建”按钮,将会弹出Express VI的创建向导,帮助我们一步一步创建出新的Express VI。我们可以选择从零做起,也可以以一个已经存在的VI或Express VI为模板,在基础上创建Express VI。

    image

    我们选择从空白VI开始,创建一个和LabVIEW已有的“时间延迟”功能类似的Express VI来。点击“下一步”,向导提示为新Express VI起一个名字。

    image

    再点击“完成”,一个空白的Express VI就创建成功了。它的Source VI和Configre VI还都是一个空架子,需要进一步添加内容才可以成为具有一个功能的Express VI。

    image

    返回《我和LabVIEW》的补充内容

    《我和LabVIEW》中清晰版的插图

    有读者反映书中部分插图很不清晰,这是从word文档到出版社专用的排版软件文档转换时产生的损失(参考《重新截取书中插图》)。我后来把书中所有的插图又重新保存成了单个图片文件,重新交给出版社。现在书中大部分插图使用的都是我后来截取的图片,有些图片虽然没有更新,却也足够清晰。但是书中还有一些插图不知是何原因,使用的仍是从word转换过来的不清晰的图片(主要集中在第11、12章里)。
    我在这里会列出所有那些不够清晰的图片,并把清晰版的图片上传至博客的相册里。大家在下面的列表中直接点击图片编号,就可以查看到清晰图片。对于大尺寸的图片,在 Windows Live 相册中查看时,它会自动收缩尺寸以显示全图。这样的图片看上去可能还是不够清晰,只要再点击这些图片按照原尺寸查看,或将其下载到本机再查看就可以了。

    页码    插图编号(点击查看清晰插图)
    240      8.30
    276      10.1
    336      11.19
    338      11.22
    340      11.25
    340      11.26
    342      11.27 
    342      11.28
    349      11.33
    357      11.46
    358      11.47
    359      11.49
    360      11.50
    360      11.51
    360      11.52
    361      11.53
    370      12.11 (这一张图原图也稍微有一点不清晰,非常抱歉,实在找不到完全清晰的版本了)
    385      12.31
    386      12.32

    返回《我和LabVIEW》主页

    在上海书城看到我的书了

    今天休假,又没什么事情,于是跑到上海书城去看书。书城把LabVIEW和其它编程语言归在一个区内,LabVIEW在编程区最后面一个柜台跟程序设计理论相关的书挤在一起。

    书城里有关LabVIEW的书还挺多的,不下十几种。《我和LabVIEW》摆在一堆LabVIEW书籍当中。数量不是很多,我去看的时候只有7本,没有旁边几种LabVIEW教程的数量多。

    20090927006

    我正好也想看看别的书,在旁边柜台站了好一阵。期间恰好看到一位读者路过这里,拿起我的书翻了几页,然后夹在胳肢窝里走了。我在旁边偷摸得意了一下

    《我和LabVIEW》的写作过程

    《我和LabVIEW》章节摘录

    我会摘录书中的部分内容,以供计划购书的读者参考。

    《我和LabVIEW》主页

    《我和LabVIEW》书评及反馈意见

    如果大家对本书有任何意见和建议可以直接在这里或下列链接中的任意一个回帖,我会一一解答。由于不是每天都有时间更新博客,所以提出的问题可能会延迟一两天才回答,希望大家谅解。下面的列表是我收集的其它网站上有关本书的评论:

    专栏

    讨论贴

    《我和LabVIEW》主页

    《我和LabVIEW》勘误

    这里列出的是在本书出版之后,又发现的一些错漏。对于不清晰的插图,可以点击这里查看清晰版插图

    页码 位置
    原文
    修改后内容
    注释
    序1 第二段,倒数第1行,第1列 一个人, 人, 删除“一个”两字。
    前言2 第6行 自己的一点绵薄之力。本书的内容和特点 自己的一点绵薄之力。
        本书的内容和特点
    “本书的内容和特点”是新的一节,应当另起一行。
    35 第二段,第4行 其含义是 1904-01-01 08:00:00 这一时刻 其含义是北京时间 1904-01-01 08:00:00 这一时刻 这一时间是指在中文电脑上使用北京时间,相当于格林威治时间 1904-01-01 12:00am
    65 表2.3,第4排,第2列,第2行 只使用英语不用 只使用英语。不用 断句不正确。
    65 表2.3,第4排,第3列,第2行 使用本地化语言在后面加一 使用本地化语言。在后面加一 断句不正确。
    78 第四段,第2行 在图3.5中,数据从顺序结构流到“迭代次数”;然而,在图3.6、图3.7中,看不到这个数据是如何产生的,只有等到顺序结构切换到第一帧,才能找到数据来源。 在图3.6中,数据从顺序结构流到“迭代次数”;然而,在图3.5、图3.7中,看不到这个数据是如何产生的,只有等到顺序结构切换到第二帧,才能找到数据来源。 引用图片的次序需要调整。
    190 图6.30中,第五个注释框里的文字 关闭所有打开的VI引用,以避免可 关闭所有打开的VI引用,以避免可能引发的内存泄漏。 结尾处漏掉几个字。
    233 第二段,第2行,最后几个字 重要的数据了 重要的数据 去掉“了”字。
    241 最后一段,第1行,第11个字开始 时间顺序结构 定时顺序结构 采用LabVIEW中文版中的名称
    242 第一段,第1行,倒数第9字开始 时间顺序结构 定时顺序结构 采用LabVIEW中文版中的名称
    269 第三段,第3行,第7个字起 可以为这些机构编写一些模板 可以为这些结构编写一些模板 “机构”改为“结构”
    314 倒数第2行,第1个逗号之后 而是一个不特殊形状。 而是一个特殊形状。 去掉“不”字
    336 图11.19   点击查看正确插图 使用了错误的插图
             
             
             
             
       
     
       

    返回《我和LabVIEW》主页

    原稿中的前言

    交稿之后,出版社的编辑又帮我检查修改了数遍,改正了不少原稿中的错误,语言风格也比原来严谨些。比如前言部分,原稿中我是使用第一人称来记录自己的一些经历和感想的,在正式出版的书中则改为了第三人称。我觉得这也不是很重要的部分,不过前几天有人问起,所以我就把我的原稿也贴上来吧:

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

    0.2 本书的内容和特点

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

    0.2.1 本书特点

    近几年,随着LabVIEW在中国的普及,市面上与之相关的书籍也越来越多。不过它们多以介绍LabVIEW的函数、VI的功能为主。比如,列举一个VI的功能为何,它的参数有哪些,表示什么含义等。而本书则更加侧重于介绍如何解决问题,比如针对一个具体的编程问题,本书会介绍LabVIEW中有哪些可以实现的方法,各自优缺点是什么。

    本书的内容都是我在学习和使用LabVIEW过程中积累的经验。受写作时间和个人能力的限制,本书并没有覆盖LabVIEW所有细节内容和功能,也没有详细解释书中所使用到的LabVIEW自带VI或函数的参数设置及用法。不过这些内容在LabVIEW的帮助文档中均有详细介绍,所以在阅读本书时,若对某些具体的函数有疑问,可以打开LabVIEW,查阅相关的帮助文档。

    0.2.2 内容选取

    在写作本书前,我陆续在博客上发表了多篇关于LabVIEW编程的文章。本书大约有三分之一的内容直接选取了博客上的内容。在把它们编辑成书的过程中,我又对它们进行了重新编辑和扩充。博客文章在介绍某些知识点时,面向的是是有经验的LabVIEW程序员,所以讲解并不详细。在本书的写作过程中,考虑到LabVIEW初学者也可能参考本书,所以对知识点的介绍更加细致。书中其余三分之二的内容则是完全新写的。

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

    LabVIEW中最常用的功能。本书所介绍的内容都是LabVIEW编程者最经常使用到的功能。随着LabVIEW版本的更新,其功能也越来越多,有一些功能是极少被使用到的。这些偏僻的功能对于大多数读者帮助不大,所以本书也未做讲解。况且,目前市场上已经有过多本比较详细介绍LabVIEW控件、函数使用的中文书籍,本书就没有一一详细介绍这方面的内容。

    LabVIEW学习过程中的常见问题及易犯的错误。我曾经作为LabVIEW高级课程的讲师,给客户讲授过LabVIEW的课程,也经常在博客、论坛或通过Email解答过LabVIEW使用者们的一些疑问,在公司内部,也经常检查和指导新员工改进他们编写的LabVIEW程序。在这一过程中,我发现有些问题在LabVIEW初学者中出现的频率相当高。指正这些通病可能会使更多读者收益,所以本书有相当部分篇幅用来讲解这方面的内容。

    我个人所擅长的领域。为了保证本书的质量,本书所介绍的内容都属于我比较了解的范畴。而我平时接触不多、没有太多实际经验的部分,则不是本书涉及的范围。

    尽量不重复LabVIEW帮助文档中的内容。LabVIEW的帮助文档应当是最全面、最权威的LabVIEW工具书,它记载了LabVIEW中每一个函数、VI的使用方法,每一个对话框上的内容……对于这些可以在LabVIEW帮助文档中直接查阅到的内容,本书就不再重复描述了。那些LabVIEW帮助文档中没有涉及到的内容,如LabVIEW程序设计的原理、原则,如何选取最适合当前情景的编程方法,编程时的注意事项,LabVIEW的学习方法等等,才是本书着重介绍的内容。

    列举实际案例。在介绍LabVIEW的功能和用法时,书中会配合编程实例进行讲解。

    0.2.3 LabVIEW版本

    书中介绍的LabVIEW功能和编程方法,是以LabVIEW 8.6专业版为范本的。这是在本书写作时LabVIEW的最新版本,也将是今后一段时间内,使用最为广泛的LabVIEW版本。本书侧重介绍的是那些最为常用的功能,所以书中绝大部分内容同样适用于更早版本的LabVIEW。

    当本书出版时,也许更新版的LabVIEW已经面世了。但是,LabVIEW的编程思想不会有任何改变,并且新版本的普及也需要较长一段时间。所以即便读者使用的是新版本的LabVIEW,同样可以使用本书作为学习LabVIEW的参考书。

    如果新版本的LabVIEW有较大改进,导致本书介绍的内容不再适用时,我将会在个人博客(ruanqizhen.spaces.live.com)中,及时更新,进行详细的解说。

    0.2.4 插图和示例

    为本书编写的示例和以及在书中截取的大部分插图是在LabVIEW 8.6中文版下编写和截取的。但受条件限制,有小部分示例和插图是在旧版本的LabVIEW,或英文版的LabVIEW中制作的。书中部分插图在Windows XP系统下截取,部分在Windows Vista系统下截取。因此,书中不同截图窗口风格可能略有不同。

    受篇幅的限制,本书一般只收录一些关键设置和程序关键部分的截图。没有收录的程序框图,读者在学习本书时可以自己尝试编写,也可以直接下载本书的示例辅助学习。本书所用到的全部示例,包含插图中出现的VI,都可以从网上下载到,具体下载地址可参考我博客中的链接。

    0.2.5 更正和注解

    受本人水平所限,在编写此书的过程中难免会有疏忽和差错。在此,诚挚希望各位读者及时批评指正书中纰漏,也欢迎读者就书中内容进行讨论。对本书的任何意见和建议都可以直接发表在我的博客中(ruanqizhen.spaces.live.com)。

    本书出版之后,我会继续对其进行维护,包括修订错误、补充相关内容、回答读者疑问等。所有相关的更新也都会及时发布在我的博客中。

    返回《我和LabVIEW》文章摘录

    想的越多越痛苦

    最近这两天都有点失眠。昨晚我以为已经很累了,应当可以睡的比较长,结果今天早上3点钟的时候还是突然醒过来。天气变化的时候比较容易失眠而且这两天乱七八糟的事情想太多了。

    说道思考,我始终相信是想的越少的人越有幸福感;而想得越多的人就越痛苦。我能想到有两点原因吧:

    首先,被欺骗是幸福的;而发现被欺骗是痛苦的。有人跟你说:你现在生活进步很快,越来越富裕了。如果你就这样轻信了,可以会觉得很幸福。反之,你偏偏不信,还要自己思考:我的生活真的改善很快吗,为啥邻居小日本60年前比我还破烂,而现在收入已经是我十几倍了?那就只有越想越痛苦了。

    其次,我们很容易给自己的行为或想法找出一个短期的意义的,但很难找出一个长期意义。
    比如买一个漂亮的新手机,若只考虑眼前,它会给我带来快乐,非常有意义;但从长远来看,换个新手机对我的人生发展其实一点帮助也没有,真的没什么意义。
    买一栋大房子,从短期来看,可以让后半生都住的舒舒服服,非常有意义;但从长远来看,人住什么房子,死后都一样被埋掉(烧掉),死后能有什么区别呢,真是没啥意义。
    写一本技术书籍,从短期来看,可以帮助很多人改善工作效率,非常有意义;可是从长远来看,人类早晚有一天灭亡,多本书少本书又怎么样呢?就好像当年某个恐龙发现肉比草好吃,从而改变了整个族群的饮食习惯,恐龙们觉得很有意义。不过今天,恐龙都已经死绝了,从我们的角度看过去,它们是吃肉的还是吃草的,其实完全无所谓。

    哲学家大多极度悲观,有的还疯了。恐怕就是因为想的太长远,非要寻求什么人生的终极意义。所以,我平时总还是刻意不去考虑太遥远的事情,也不去寻求过多的意义。无论做什么事,如果能对我有近期的帮助也就可以了,免得越想越没劲。

    示例VI与文章图片和章节对照(第10~13章)

     
    第十章
    章节或插图编号
    子文件夹
    对应示例
    章节10.1
    10.1
    通道控件.vi
    透明控件.vi
    章节10.2.1.1
    10.2
    按钮界面1.vi
    按钮界面2.vi
    按钮界面3.vi
    章节10.2.2
    退出时询问.vi
    章节10.2.3
    章节10.2.4
    演示菜单.vi
    章节10.2.5
    界面控件与键盘关联.vi
    章节10.2.6
    使用简单自定义控件的VI.vi
    自定义简单控件.ctl
    使用圆形自定义控件的VI.vi
    自定义圆形控件.ctl
    章节10.3.1
    章节10.3.2
    章节10.3.3
    10.3/ Chess Interface
    Step 1.vi ~ Step 8.vi
    图10.47
    Get All Chess.vi
    图10.50
    irregular shape background.vi
    图10.52
    chess without border.ctl
    图10.53
    chess with shade.ctl
    图10.54 ~ 10.55
    Initialize.vi
    图10.56 ~ 10.57
    Pict Ring Chess.ctl
    图10.58 ~ 10.59
    Step 9.vi
    章节10.3.6
    pic 1.vi
    章节10.3.7.1
    10.3
    半透明界面.vi
    章节10.3.7.2
    不规则窗口.vi
    章节10.3.8
    动画窗口.vi
    第十一章
    章节或插图编号
    子文件夹
    对应示例
    章节11.1.1
    11.1
    最大公约数.vi
    图11.3
    杂乱的条件结构.vi
    图11.4
    整洁的条件结构.vi
    图11.7
    11.2
    内存泄漏.vi
    图11.15
    使用移位寄存器优化内存使用.vi
    图11.16
    使用元素同址操作结构.vi
    图11.17
    Array.vi
    图11.23
    输入参数接线端.vi
    图11.24
    输出参数接线端.vi
    图11.25
    使用搜索(源数据仅传入).vi
    搜索(源数据仅传入).vi
    图11.26
    使用搜索(源数据传入传出).vi
    搜索(源数据传入传出).vi
    图11.27
    11.3
    单循环.vi
    图11.28
    双循环.vi
    图11.32
    时间顺序结构.vi
    章节11.3.7
    Thread Swiching.vi
    图11.46
    11.4
    Calling My Function.vi
    图11.47 ~ 11.48
    My Function.vi
    章节11.4.6.2
    美化簇常量
    第十二章
    章节或插图编号
    子文件夹
    对应示例
    章节12.1.3
    12.1
    主界面.vi
    子界面.vi
    章节12.2.1
    12.2
    空白XControl
    章节12.2.2 ~章节12.2.12
    Othello XControl
    章节12.2.13
    Twinkle Button
    High Light Button
    章节12.2.14
    Naughty Button
    第十三章
    章节或插图编号
    子文件夹
    对应示例
    章节13.2
    13.2
    LvOOP Demo.lvproj
    章节13.3.1
    13.4
    Data File
    章节13.3.2
    不同数据类型
    章节13.3.3
    递归算法
    章节13.3.4
    框架插件结构
    章节13.3.5
    数据容器

     

    查看其它示例
    返回《我和LabVIEW》主页

    示例VI与文章图片和章节对照(第6~9章)

    查看示例下载地址:http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!4558.entry

    第六章
    章节或插图编号
    子文件夹
    对应示例
    图6.4
    6.2
    动态改变界面.vi
    图6.6 ~ 6.8
    改变VI标题.vi
    图6.9 ~ 6.10
    从VI得到控件.vi
    图6.11
    设置界面修饰物的属性.vi
    图6.12
    得到通用属性.vi
    图6.13 ~ 6.14
    修改簇中的元素的属性.vi
    图6.19
    6.3
    四种子VI调用节点.vi
    图6.20
    使用通过引用节点调用动态调用.vi
    图6.21
    使用通过运行VI方法动态调用.vi
    动态调用/主VI.vi
    图6.22
    框架插件式程序.vi
    图6.23
    阶乘循环算法.vi
    图6.24 ~ 6.25
    递归计算阶乘.vi
    图6.26 ~ 6.29
    后台任务/后台任务.lvproj
    图6.30
    启动画面/Splash Screen.vi
    图6.40
    6.4
    给所有的VI设置密码.vi
    图6.41
    6.5
    远端VI.vi
    图6.42
    控制远端VI.vi
    第七章
    章节或插图编号
    子文件夹
    对应示例
    图7.2
    7.1
    OneStep.vi
    图7.3
    SimpleModel.vi
    图7.4
    PipelineModel.vi
    图7.5
    QueueModel.vi
    图7.10 ~ 7.11
    7.2
    声音采集.vi
    图7.17
    7.3
    声音采集.vi
    图7.18 ~ 7.19
    7.4
    时间坐标.vi
    图7.20 ~ 7.21
    波形属性.vi
    图7.22
    同一坐标轴.vi
    图7.23
    不同坐标轴.vi
    图7.24 ~ 7.25
    中断的曲线.vi
    章节7.4.6
    声卡示波器.vi
    声卡信号发生器.vi
    声卡信号发生器.vi
    章节7.4.7
    时频联合分析.vi
    高级时频联合分析.vi
    声卡时频联合分析.vi
    第八章
    章节或插图编号
    子文件夹
    对应示例
    图8.1 ~ 8.2
    8.1
    Break VI.vi
    图8.3
    Set Caption.vi
    图8.8
    8.2
    其它控件探针.vi
    图8.9
    条件探针.vi
    图8.10
    条件探针,队列.vi
    图8.11 ~ 8.14
    DBL Queue.vi
    图8.15
    8.3
    Demo.vi
    图8.16
    目标程序.vi
    图8.17
    数据记录.vi
    图8.18
    8.4
    Error 1. a X b.vi
    图8.19
    Error 2. for loop.vi
    章节8.4.3
    Error 3. Wile Loop.vi
    图8.21
    Error 4. Shift Register.vi
    图8.22 ~ 8.24
    Error 5. Cluster.vi
    图8.25 ~ 8.26
    Error 6. Sequence.vi
    图8.27 ~ 8.28
    运行5秒后,循环停止.vi
    图8.29
    信号量.vi
    图8.33
    8.6
    低效率存文件.vi
    图8.34
    改进存文件.vi
    图8.35
    高效率存文件.vi
    章节8.6.2
    低效率显示波形.vi
    高效率显示波形.vi
    图8.36
    低效率创建树.vi
    图8.37
    高效率创建树.vi
    图8.38
    设置曲线名称颜色.vi
    图8.39
    低效率循环运算.vi
    图8.40
    高效率循环运算.vi
    第九章
    章节或插图编号
    子文件夹
    对应示例
    章节9.1.2
    9.1
    演示项目.lvproj
    章节9.1.4
    项目A/项目A.lvproj
    章节9.3
    9.3
    发布项目.lvproj
    图9.17 ~ 9.21
    主界面.vi

     

    查看其它示例
    返回《我和LabVIEW》主页

    示例VI与文章图片和章节对照(第4~5章)

     
    第四章
    章节或插图编号
    子文件夹
    对应示例
    图 4.1
    4.1
    极端错误处理.vi
    图 4.3
    标准错误处理.vi
    图 4.4
    可预期的错误.vi
    图 4.5
    自己创建错误信息.vi
    图 4.6
    自动错误处理.vi
    图 4.8
    简单错误处理.vi
    图 4.9
    断言无错误.vi
    图 4.10
    任一测试出错则停止.vi
    图 4.11
    异常不影响后续测试.vi
    图 4.13
    4.2
    并行执行相同子VI.vi
    图 4.14
    总延时时间.vi
    图 4.15
    运行次数.vi
    图 4.16
    测试运行次数.vi
    图 4.17
    4.3
    顺序测试.vi
    图 4.18
    定制测试顺序.vi
    图 4.19
    使用状态机的测试程序.vi
    图 4.21
    队列状态机.vi
    图 4.23
    Light.lvsc
    图 4.25
    4.4
    全局变量.vi
    测试全局变量.vi
    图 4.26
    全局变量竞争状态.vi
    图 4.27 ~ 4.28
    使用单进程共享变量.vi
    图 4.29 ~ 4.30
    功能全局变量.vi
    图 4.31
    基于反馈节点的功能全局变量.vi
    图 4.32
    使用功能全局变量.vi
    图 4.34
    4.5
    一般界面程序的框图.vi
    图 4.35
    改进的界面程序.vi
    图 4.36
    初始化事件.vi
    图 4.37 ~ 4.38
    改进的界面程序.vi
    图 4.39
    单事件创建事件.vi
    图 4.40
    单用户自定义事件界面程序.vi
    图 4.41
    处理耗时分支.vi
    图 4.43
    4.6
    变体加法.vi
    图 4.44
    使用变体加法.vi
    图 4.45
    LabVIEW自带的多态VI.vi
    图 4.46 ~ 4.50
    add polymorphic.vi
    图 4.53
    4.7
    子VI显示方式.vi
    图 4.58
    4.8
    Initialize Data.vi
    图 4.59
    Set Name.vi
    图 4.60
    Demo.vi
    图 4.62
    自定义引用句柄.ctl
    图 4.62
    (下载包:)
     
    第五章
    章节或插图编号
    子文件夹
    对应示例
    图5.3
    5.1
    动态加载DLL.vi
    图5.4
    CLN节点线程.vi
    图5.10 ~ 5.11
    5.2
    浏览网页.vi
    图5.12 ~ 5.13
    播放mp3.vi
    图5.14
    播放Flash动画.vi
    章节5.2.3
    Toolbar\Toolbar Demo.lvproj
    图5.22
    ActiveX文档.vi
    图5.25
    文本朗读.vi
    图5.27
    5.3
    浏览网页(.NET).vi
    图5.28
    5.4
    打开记事本.vi
     

     

    查看其它示例
    返回《我和LabVIEW》主页

    示例VI与文章图片和章节对照(第3章)

     
    第三章
    章节或插图编号
    子文件夹
    对应示例
    图 3.1
    3.1
    顺序执行.vi
    图 3.2
    并列执行.vi
    图 3.5 ~ 3.7
    层叠式顺序结构.vi
    图 3.8
    平铺式顺序结构.vi
    图 3.9
    测试应用程序1.vi
    图 3.10
    测试应用程序2.vi
    图 3.11
    测试应用程序3.vi
    图 3.12
    延时子VI.vi
    图 3.13
    测试应用程序4.vi
    图 3.15
    3.2
    布尔条件结构.vi
    图 3.16 ~ 3.17
    错误处理条件结构.vi
    图 3.18
    数值条件结构.vi
    图 3.19
    数值比较.vi
    图 3.20
    改进数值比较.vi
    图 3.21
    多布尔输入条件结构.vi
    图 3.22
    条件结构隧道.vi
    图 3.23
    数值比较选择函数.vi
    图 3.24 ~ 3.26
    3.3
    程序框图禁用结构.vi
    图 3.27
    3.4
    条件禁用结构.vi
    图 3.28
    示例3.4.lvproj
    图 3.29
    条件禁用结构自定义符号.vi
    图 3.30
    3.5
    循环结构.vi
    图 3.31
    循环隧道.vi
    图 3.32
    二维数组处理.vi
    图 3.33 ~ 3.34
    进度条.vi
    图 3.35
    相连的隧道.vi
    图 3.36
    移位寄存器.vi
    图 3.37 ~ 3.38
    相连的移位寄存器.vi
    图 3.39
    未初始化移位寄存器.vi
    图 3.40
    多个左侧移位寄存器.vi
    图 3.41 ~ 3.43
    反馈节点.vi
    图 3.44
    条件结束.vi
    图 3.48
    3.7
    窗格.vi
    图 3.49
    程序停止.vi
    图 3.50
    电话号码控件.vi
    图 3.51 ~ 3.53
    加法事件循环.vi
    图 3.54 ~ 3.55
    事件处理界面.vi
    图 3.56 ~ 3.57
    事件处理子VI.vi
    图 3.58 ~ 3.59
    用户自定义事件.vi
    图 3.60
    3.8
    动画界面.vi
    (一个真实的动画程序:http://www.vihome.com.cn/bbs/viewthread.php?tid=8818)
    章节 2.8.3
    定时的精度.vi (定时的精度演示)
     

     

    查看其它示例
    返回《我和LabVIEW》主页

    示例VI与文章图片和章节对照(第1~2章)

    查看示例下载地址:http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!4558.entry

    第一章
    章节或插图编号
    子文件夹
    示例VI
    图 1.9 ~ 1.10
    1
    第一个程序.vi
    图 1.11
    简单数学运算程序.vi
    图 1.12
    互不影响的两份数据.vi
    图 1.13 ~ 1.14
    数据线分叉.vi
    图 1.15
    平方根函数.vi
    图 1.22 ~ 1.25
    改善的第一个程序.vi
    图 1.26
    单按钮对话框示例.vi
    图 1.29
    持续运行的加法.vi
    图 1.30
    第一个项目.lvproj
    图 1.34 ~ 1.35
    华氏转摄氏.vi
    图 1.36
    使用子VI.vi


    第二章
    章节或插图编号
    子文件夹
    示例VI
    图 2.2 ~ 2.3
    2.1
    数值控件显示格式.vi
    图 2.6
    表达式节点.vi
    图 2.7 ~ 2.9
    公式节点.vi
    图 2.10
     
    Othello calculate valid position.vi
    图 2.11
    12.2
    Check All Position.vi
    图 2.15
    2.2
    下拉列表与枚举.vi
    图 2.18
    数组相加.vi
    图 2.19
    数组簇数组嵌套.vi
    图 2.20
    数组比较.vi
    图 2.21
    数组自动索引.vi
    图 2.22 ~ 2.23
    数组索引.vi
    图 2.24 ~ 2.25
    创建数组.vi
    图 2.26 ~ 2.28
    强度图.vi
    图 2.30
    簇捆绑松绑.vi
    图 2.31
    字符串不同显示方法.vi
    图 2.32 ~ 2.33
    正则表达式使用.vi
    图 2.34
    相对路径.vi
    图 2.36 ~ 2.37
    2.3
    表示法转换.vi
    图 2.38
    数值与布尔转换.vi
    图 2.39
    格式化时间.vi
    图 2.40 ~ 2.42
    变体数据类型转换.vi
    章节 2.3.7
    平化至字符串.vi
    图 2.44 ~ 2.45
    平化至XML.vi
    图 2.47
    强制类型转换DBL to I64.vi
    图 2.48
    布尔与U8之间转换.vi
    图 2.49
    字符串与U8数组之间转换.vi
    图 2.50 ~ 2.51
    时间与数值的转换.vi
    图 2.52
    2.4
    使用子VI参数默认值.vi
    图 2.53
    使用局部变量改变控制控件的值.vi
    图 2.54
    两个独立循环.vi
    图 2.55
    两个有依赖关系的循环.vi
    图 2.56 ~ 2.60
    控件的属性和方法.vi
    图 2.61
    2.5
    字符串公式求值.vi
    图 2.62 ~ 2.63
    字符串至布尔数组.vi
    图 2.64 ~ 2.65
    程序运行时,改变控件标题.vi
    图 2.66 ~ 2.67
    禁用枚举中的某些项.vi
    图 2.68 ~ 2.69
    在字符串中显示多种字体.vi

     

    查看其它示例
    返回《我和LabVIEW》主页

    签名

    最近一想起签名就头疼,因为我写字实在太难看了。一般人就算写字难看,自己的名字总还是写得不错的,毕竟这几个字练得最多。可是我却连名字也写不好看。其实我上学的时候也曾经正儿八经练过毛笔和钢笔书法的,可就是没什么长进。毕业之后,几乎都用不到写字了,就更不可能有进步了。

    因为不是领导,我一般也就在刷信用卡时用得着签名,所以我以前还从未担心过签名难看的问题。不过上个周末,出版社给我寄来一摞书的扉页要我在上面签名,我才真切的意识到写字难看的严重性。看样子将来有人会得到有我亲笔签名的书,希望他们打开书的时候不要笑话我,我其实还是认认真真签了名的。

    下面这幅图中手写的几个字就是我的亲笔签名。由于我的手比一般人抖得厉害,所以写出来的字稳定性比较差,每个签名都有所不同,各有各的丑法,不过神韵都是一致的:)。

    image

    《我和LabVIEW》的写作过程

    下一个期待突破的产业

    这几天我躺在床上的时候就在想,啥行业最有潜力呢,下一个吸引最多目光和投资的领域是啥呢?

    追求自由是人类的天性,这有两层含义,一是指个人的自由,二是指整个人类的自由。(此处删去xx字)整个人类的自由的提高是靠生产力的发展来获得的,以出行的自由为例:人类早期只能在家附近几公里以内活动;能够驾驭大型运输工具比如船舶之后,就可以迁移新的大陆上去;而现在人类的脚步已经踩在了月球上;将来,生产力进一步提高,人类肯定还会探访更遥远的星球。

    生产力的提高有两个途径:一是控制新能源;二是靠分工合作,减少不必要的重复劳动。我觉得人类历史上的几次重大生产力提高是这样的:
    首先是发明语言,有了语言,大家就可以交流经验。一只猴子,要把整片树林的果子都尝一遍才知道哪棵树上的最好吃。另一只猴子必须重复同样的工作才能得到答案。有了语言就不一样了,一个人尝试过所有的果子之后可以把经验告诉别人,当然,更有效的方法是每个人负责尝试一小部分,然后大家交流心得,这样很快就找到了最好的果实。省下来的时间可以用作其它生产。之后是使用工具,利用工具优化了自身能量的使用。之后是利用畜力,人类终于可以突破自身力量的限制了。再之后是文字的发明,这样就可以传播的更广泛,更久远,也避免了口口相传中产生的误差。再之后是工业革命,来自化石燃料和水利的能量远远超过生物体所能够提供的能量。人们建造大型工程,运输物资的效率大大提高。

    时下发展最快的产业是信息产业,并且据我估计,它再红火个几十年也是不成问题的。放在以前,知识的获取都是被动的。比如有人或书籍传授了我某些经验,我之后就可以在生活过做中应用它们。但是,我如果不曾学习过某些问题,我几乎没有途径可以得知是否这些问题即便已经有人解决过了。因此,我很难主动的去获取某一知识,遇到这类问题总还是要自己亲自研究一遍的。而现在,借助强大的网络,若别人已经研究过某问题,我就可以把重复研究的工作省下来了。我的工作是编程序,在开发一个新功能前,上网一查,就知道别人是否已经研究过类似问题,研究成果如何。把别人已有的成果拿来(有些需要付费才能拿来),再此基础上再继续工作,效率就高多了。

    信息产业的发展在很多方面给人们带来的高效率还不仅体现在科研开发上。我前两天刚买了个高压锅,在网上查好物品的特性,下单,第二天快递就把东西送来了。这让我想起了中学时代的一篇英语课文,大意是讲在未来,可以足不出户,就通过可视电话选购自行车。那时候还是把它当科幻文章读,没想到才过了几年它就已经成为寻常生活很自然的一部分了。

    有时候我在想,等信息产业充分发展后,人们亟待解决的问题又会是什么呢?有些事情单靠通讯的改善还是无法做到的,比如说改变某地区的气候、移民外星球等。信息传递的问题解决到一定程度,制约生产力发展的瓶颈就变成能量了:不能改变气候是因为没有足够的能量和大自然风力、水力抗衡;不能飞到外星球是因为没有足够的能量为飞船进一步加速。所以我想下一个最具吸引力的产业一定是新能源产业。比常规能源多几个数量级的大概就只有核能了,等到人们掌握了常温核聚变技术,肯定会再一次给生活带来翻天覆地的变化。那时候的汽车,只要一颗电池就可以跑一辈子,就像现在的电子表一样。

    核能进入家庭生活应该还早呢,不过很可能另一项能源将会迎来民用发展的小高潮,这就是风能。最近几年,太阳能热水器在中国的北方地区非常兴盛。经常是一栋大楼的楼顶被密密麻麻的热水器都占满。但是,像上海这种阴雨天特别多的地方,太阳能利用率是非常低的;或者天气一直炎热的地区,热水用途不大。相比之下,风能发电在这些地区会更有前途。制约家庭使用风力发电机的最大问题大概就是风车的占地面积太大。以前风力发电机主要是水平轴的,就是看上去像螺旋桨风车那种,本来它的风叶转起来就要占很大面积,而它的转动方向又要根据风向来调整,占用了更大的地方,这就注定了它们只能被安装在人烟稀少的空旷地区。不过随着计算机计算能力的提高,近年来已经在垂直轴风力发电机的设计上取得了突破。垂直轴风力发电机的形状有点像走马灯,它的最大好处是占地小。占地和太阳能热水器差不多的风电机就可以为普通家电提供能量了。等风电机的成本降低到和太阳能热水器差不多的时候,说不定家家楼顶上都会竖起一个风车了。

    示例下载

    示例程序被打包成一个压缩文件,可以从下列下载地址中任选一个进行下载:

    压缩包中包含有较多的示例VI。下面的链接详细列出了每个示例所对应的图例或章节编号:

    返回《我和LabVIEW》主页