Qizhen 的个人资料LabVIEW照片日志列表更多 工具 帮助

LabVIEW

LabVIEW工程师的生活

计数器

Ruan Qizhen

文章安内容分类

Search

正在加载...
O Troupe of little vagrants of the world, leave your footprints in my words.
请稍候...
很抱歉,您输入的评论太长。请缩短您的评论。
您没有输入任何内容,请重试。
很抱歉,我们当前无法添加您的评论。请稍后重试。
若要添加评论,需要您的家长授予您相应权限。请求权限
您的家长禁用了评论功能。
很抱歉,我们当前无法删除您的评论。请稍后重试。
您已超过了一天之内允许提供的评论数上限。请在 24 小时后重试。
因为我们的系统表明您可能在向其他用户提供垃圾评论,您的帐户已禁用了评论功能。如果您认为我们错误地禁用了您的帐户,请联系 Windows Live 支持部门
完成下面的安全检查,您提供评论的过程才能完成。
您在安全检查中键入的字符必须与图片或音频中的字符一致。
RuanQizhen发表:
你是指书中的LabVIEW程序示例还是指LabVIEW软件本身?
示例在我这个blog上就有链接:http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!4310.entry
LabVIEW开发环境在NI主页上有下载:http://www.ni.com/support/zhs/lv2009.htm
11 月 10 日
慧芳发表:
您好,我买了您的那本书,请问在哪里能下载到labview的软件啊?
11 月 10 日
RuanQizhen发表:
编写此DLL和编写其它DLL之间并没有任何不同。找一本通用的书看看就可以了。
11 月 6 日
张耀斌发表:
阮工:
  有无编写此DLL的实例或教程之类的指导啊!谢谢!
11 月 6 日
RuanQizhen发表:
耀斌 张:由于这里的函数有"C"这个修饰,所以DLL暴露出来的函数其实是C接口而不是C++的,问题在于CString这个数据类型是一个类,LabVIEW没法处理这个数据。所谓创建一个接口DLL就是你自己再写一个DLL,把原来带有复杂数据类型的DLL函数包装一下转换成只使用简单数据类型的函数。
11 月 6 日
张耀斌发表:
阮工:
  从您的书上看到LV调用C++ DLL需要再创建一个接口DLL。如何创建??工作中刚好遇到个问题请帮忙。客户用VC++写的DLL,我用labview调用进行二次开发,下面是DLL的头文件(不全,DLL为VC++  MFC下生成的),函数返回值为空时用CLF可以调用,返回值为CString的都无法调用,请务必帮忙指点下,谢谢!
#pragma once/*--------------------------------------------------------------------------*//* CONSTANTS DECLARATION *//*--------------------------------------------------------------------------*/#ifdef _AF_EFS_ACCESS_LIB #define EFS_ACCESS_DLLEXT extern "C"__declspec(dllexport) #else #define EFS_ACCESS_DLLEXT extern "C"__declspec(dllimport) #endif

EFS_ACCESS_DLLEXT BOOL __stdcall exp_GetEFSDllVersion(CString szDllVersion);

EFS_ACCESS_DLLEXT USHORT __stdcall exp_Set_Efs_Comport_Id(const UINT uiComportId);

EFS_ACCESS_DLLEXT USHORT __stdcall exp_Set_Efs_Phone_Handle(HANDLE uiPhoneHandle);

EFS_ACCESS_DLLEXT USHORT __stdcall exp_Read_Imei(CString szImei);
11 月 5 日
走先立发表:
多谢阮工。我刚才试了一下,您说的方法可以实现我想要的效果。本来我以为在同一个文件里用ctrl+c和ctrl+v的方法都需要重新指定对应的控件,在文件间肯定更是那样。
11 月 5 日
RuanQizhen发表:
先立 走,是这样的,一个属性节点,在A VI上对应某个控件,而B VI 上并没有这个控件,所以拷贝过去必须为它重新指定一个对应的控件。有一个解决方法,你可以同时选中一个控件的接线端和属性节点,把两个节点一起拷贝到另一个VI上去。
11 月 5 日
走先立发表:
阮工:
    不好意思,这两天没来看,让你久等了。在两个.vi文件之间拷贝属性节点(比如控件的值),默认情况下,拷贝过去后这些属性节点需要指定是哪个控件的。由于属性节点特别多,一个一个去手动指定,毫无效率可言。我想请教,有没有相关设置可以改善这一点?或者其他编程技巧可以避免这种情况?
11 月 5 日
RuanQizhen发表:
先立 走, 我不太理解你的问题,需要说的再具体点:文件间是什么意思,使用哪一种属性节点,重新链接是指什么?
11 月 3 日
走先立发表:
向阮工请教:
文件间的属性节点如何复制呢?我用了较多的属性节点,复制过去后需要重新链接,太费时了。
10 月 30 日
没有名字发表:
谢谢阮工~~
10 月 19 日
RuanQizhen发表:
我也不能确定乱码发生的原因。有一个可能的原因是,LabVIEW不支持unicode的编码,所以文本编码必须使用mutibyte的编码方式。mutibyte有多种语言设置,如果在转换编码时没有设置好,会出现乱码。
LabVIEW中没有地址的概念,所以也不支持得到某个变量的地址这一用法(这与Java, C#是一样的)。
10 月 19 日
没有名字发表:
阮工:您好!我目前在LabVIEW里面调用VC编的一个DLL,用的是ActiveX控件,实现将数据进行网络组播,这是作为发送端,然后用编一个UDP进行接收的接收端,但发现得到的都是乱码。不知道出现乱码是因为什么原因呢?
     还有一个问题,在LabVIEW中想取一个变量的内存地址,不知道应该怎么实现呢?
 
10 月 17 日
RuanQizhen发表:
提高效率问题要视具体情况而定,不同的程序差别很大。对于一般的情况,属性节点要尽量少用,另外属性节点一般是在UI线程内运行的,可以把包含有属性节点的VI设置为在UI线程下运行,以减少线程切换。
10 月 13 日
徐成宏发表:
阮工:您好。
我在用属性节点的时候遇到一些效率上的问题,不知道您有没有使用属性节点时应注意的事项和性能问题这方面的资料,希望您能给点建议,谢谢!
10 月 13 日
RuanQizhen发表:
CIN 已经被彻底放弃了,所以不会再有任何关于它的新文章了。如果你需要在 C 中实现部分程序,应该把它编译成动态链接库,然后使用 CLN 节点调用。
9 月 24 日
邱彬发表:
阮大侠:
     CIN作为LabVIEW是非常好的辅助编程工具,但网络上大部分的文章都是基于VC6.0的,而没有讲述VS 2005(或2008)中C++环境的配置和使用特点。请问如何配置VS 2005(或2008),如何使用?
9 月 24 日
RuanQizhen发表:
目前的控件已经满足用户普遍需求了。对于客户特殊化的需求,最好是由用户自定义完成。
关于Picture控件,我觉得画点和线已经是最基本的操作了。公司内部的人使用这个控件,也就是调用它提供出来的这几个VI。Picture内部的实现,可能需要调用系统API提供的画图函数,但具体怎么实现的我也不是太了解。使用它的时候,其实也没必要了解它的内部格式。
我从它的机构上猜测,Picture控件实际上记录的是用户的画图过程,它有自己的记录格式。基本格式是flatten后的簇数据。然后再内部调用系统的绘图函数,把图形绘制出来。当然,我没研究过这部分内容,只是自己猜测一下。
9 月 16 日
邱彬发表:
阮大侠:
     对于labVIEW常用控件库从labVIEW7.0到LabVIEW2009都似乎没什么变化,而通过我的观察,控件库中添加最多的可以说是应用Picture控件自定义Xcontrol的3D控件了,由此趋势也可以发现Picture控件其实是最好用来自定义特殊界面的控件了,虽然labVIEW中开放了诸如:画点,画线等基本函数用来操作Picture控件画图,但还是不如直接深入工具包的内核探究其中如何操作Picture控件的。通过底层的代码我大概了解到Picture的一些特点,但只能管中窥豹,觉得学的很辛苦,请问是否能提供一些资料(Picture中的定义,格式)?
9 月 13 日
RuanQizhen发表:
cslc l:估计再过一个月吧。
hobo liang:你要先设置Active Plot。
8 月 12 日
lianghobo发表:
阮老师,我把三个数组同时画在一个波形图上,想用控件控制选择显示其中的某条曲线。属性节点中的plot.name似乎每次返回的都是最后一条曲线的名称,有没有什么好的办法呢?微笑
8 月 12 日
lcslc发表:
阮老师,你好,怎么样了,什么时候能出版发行了,我都等不急了呀
8 月 11 日
RuanQizhen发表:
Jie Wang:

我没有使用过MatLab,所以不太好对他俩进行比较。LabVIEW的mathscript遵循的语法与MatLab应当是同一个,所以它俩写出来的程序应该是相同的。
LabVIEW主要还是在工控测试领域中应用,其它行业的工具包的确没有MatLab多。mathscript只是LabVIEW以下部分,我觉得LabVIEW最具特色的还是它的图形化编程方法。
6 月 29 日
WangJie发表:
What do you think about LabView when comparing with MatLab? LabView seems a good one for signal processing and measurement, and instrument simulation. LabView uses the same mathscripts from MatLab. MatLab has a huge amount of various toolboxs from engineering, bioinformatics to finance. Personally, I think LabView is still specialized in instruments. It would be a very long way if NI wants it to be generalized.
6 月 25 日
第 1 张,共 20 张
正在加载...

女儿的名字

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

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

上个星期,回南京参加同学聚会。老同学得知我十年没跳槽,还在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》主页