Qizhen 的个人资料LabVIEW照片日志列表更多 ![]() | 帮助 |
LabVIEWLabVIEW工程师的生活
文章安内容分类
O Troupe of little vagrants of the world, leave your footprints in my words.
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发表:
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 日
|
女儿的名字虽然我的下一代影都还没有呢,但我未雨绸缪,已经开始为他们想名字了。由于干我这行的倾向于生女儿,目前只考虑了女儿的名字。 老婆是山东人,所以老早给女儿想了个名字叫“阮思齐”。我并不是很喜欢这个名字,理想的名字应当是:字不算太生僻,但组合起来却没有重名的。“思齐”这个名字网上一搜一大把,创意不够。 上个星期,回南京参加同学聚会。老同学得知我十年没跳槽,还在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”可以从引用中取回原来的数据。 引用最主要应用于多线程程序中。如果两个线程同时对同一份数据进行修改,则必须使用传引用的机制。否则,使用值传递的方式,数据在数据线分叉的地方,就会编程独立的两份,之后在两个线程内分别修改的是两份完全独立的数据,没办法对同一份数据进行修改的。 比如下图这个程序,程序输入了一个数组,然后需要在两个并行的子VI中同时对这个数组中的数据进行修改。每个子VI可能修改了数组不同的元素,程序运行结束产生的数组应当把两个子VI中的修改都包含进来。因此,程序一开始需要数组数据生成一个引用,然后把引用分别传递到两个子VI中去。两个子VI都运行结束后,在从引用中取回数据。 LabVIEW中已有的函数还都是为值传递设计的,所以使用值传递少不了把数据取出、放回的过程。这以过程中,可能又会产生数据拷贝,效率会比较差。好在我们可以使用“In Place Element Structure”结构来处理从引用中取出、放回数据的过程。配合了“In Place Element Structure”结构使用后,LabVIEW会尽量使用数组原地址,而不是把从引用中取出的数据复制一份,这样就做到了传引用与效率的兼顾。比如下面两图中的程序,功能是完全相同的,但LabVIEW会对下面一幅图中的程序进行优化,提高效率。 Express VI 5 - 创建 Express VI 的框架Express VI 有多种创建方式,但是普通用户只有唯一的一条途径来创建Express VI。LabVIEW中自带了一个专用于创建 Express VI 的工具,用户可以使用这一工具创建或修改Express VI。这个工具在LabVIEW的菜单“工具->高级->创建或编辑Express VI”下。 这个工具的主界面包含一张列表,列出以往创建过的一些Express VI。从列表上可以看到,一个Express VI有两个主要的功能VI组成:Source VI 和 Configure VI。Source VI实现的是Express VI 的功能;Configure VI实现的是Express VI的配置对话框。 我们可以在列表上双击Express VI这两个功能VI,然后对其修改。不过,为了更详细的演示Express VI的功能,我们还是从一个全新的Express VI说起。点击“创建或编辑Express VI”对话框上的“新建”按钮,将会弹出Express VI的创建向导,帮助我们一步一步创建出新的Express VI。我们可以选择从零做起,也可以以一个已经存在的VI或Express VI为模板,在基础上创建Express VI。 我们选择从空白VI开始,创建一个和LabVIEW已有的“时间延迟”功能类似的Express VI来。点击“下一步”,向导提示为新Express VI起一个名字。 再点击“完成”,一个空白的Express VI就创建成功了。它的Source VI和Configre VI还都是一个空架子,需要进一步添加内容才可以成为具有一个功能的Express VI。 《我和LabVIEW》中清晰版的插图有读者反映书中部分插图很不清晰,这是从word文档到出版社专用的排版软件文档转换时产生的损失(参考《重新截取书中插图》)。我后来把书中所有的插图又重新保存成了单个图片文件,重新交给出版社。现在书中大部分插图使用的都是我后来截取的图片,有些图片虽然没有更新,却也足够清晰。但是书中还有一些插图不知是何原因,使用的仍是从word转换过来的不清晰的图片(主要集中在第11、12章里)。 页码 插图编号(点击查看清晰插图) 在上海书城看到我的书了今天休假,又没什么事情,于是跑到上海书城去看书。书城把LabVIEW和其它编程语言归在一个区内,LabVIEW在编程区最后面一个柜台跟程序设计理论相关的书挤在一起。 书城里有关LabVIEW的书还挺多的,不下十几种。《我和LabVIEW》摆在一堆LabVIEW书籍当中。数量不是很多,我去看的时候只有7本,没有旁边几种LabVIEW教程的数量多。 我正好也想看看别的书,在旁边柜台站了好一阵。期间恰好看到一位读者路过这里,拿起我的书翻了几页,然后夹在胳肢窝里走了。我在旁边偷摸得意了一下 《我和LabVIEW》书评及反馈意见如果大家对本书有任何意见和建议可以直接在这里或下列链接中的任意一个回帖,我会一一解答。由于不是每天都有时间更新博客,所以提出的问题可能会延迟一两天才回答,希望大家谅解。下面的列表是我收集的其它网站上有关本书的评论: 专栏 讨论贴《我和LabVIEW》勘误这里列出的是在本书出版之后,又发现的一些错漏。对于不清晰的插图,可以点击这里查看清晰版插图。
原稿中的前言交稿之后,出版社的编辑又帮我检查修改了数遍,改正了不少原稿中的错误,语言风格也比原来严谨些。比如前言部分,原稿中我是使用第一人称来记录自己的一些经历和感想的,在正式出版的书中则改为了第三人称。我觉得这也不是很重要的部分,不过前几天有人问起,所以我就把我的原稿也贴上来吧: 返回《我和LabVIEW》文章摘录 想的越多越痛苦最近这两天都有点失眠。昨晚我以为已经很累了,应当可以睡的比较长,结果今天早上3点钟的时候还是突然醒过来。天气变化的时候比较容易失眠而且这两天乱七八糟的事情想太多了。 说道思考,我始终相信是想的越少的人越有幸福感;而想得越多的人就越痛苦。我能想到有两点原因吧: 首先,被欺骗是幸福的;而发现被欺骗是痛苦的。有人跟你说:你现在生活进步很快,越来越富裕了。如果你就这样轻信了,可以会觉得很幸福。反之,你偏偏不信,还要自己思考:我的生活真的改善很快吗,为啥邻居小日本60年前比我还破烂,而现在收入已经是我十几倍了?那就只有越想越痛苦了。 其次,我们很容易给自己的行为或想法找出一个短期的意义的,但很难找出一个长期意义。 哲学家大多极度悲观,有的还疯了。恐怕就是因为想的太长远,非要寻求什么人生的终极意义。所以,我平时总还是刻意不去考虑太遥远的事情,也不去寻求过多的意义。无论做什么事,如果能对我有近期的帮助也就可以了,免得越想越没劲。 示例VI与文章图片和章节对照(第10~13章)第十章
第十一章
第十二章
第十三章
示例VI与文章图片和章节对照(第6~9章)查看示例下载地址:http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!4558.entry 第六章
第七章
第八章
第九章
示例VI与文章图片和章节对照(第4~5章)第四章
第五章
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|