博客版《我和LabVIEW》目录

发行版的《我和LabVIEW》现在开源共享了,地址: https://lv.qizhen.xyz/

以下是在《我和LabVIEW》一书出版前发布的LabVIEW博客文章。该书出版后的博客文章没有包含在这个列表中,点击这里可以查看新的文章:《我和LabVIEW》补充内容和注释

第〇章:序

第一章: LabVIEW 的编程环境

第二章:简单程序结构

第三章:控件、常量和运算

第四章:常用的程序结构

第五章:调试

第六章:深入理解 LabVIEW

第七章:编写优美的代码

第八章:编写高效率的代码

第九章:VI 服务

第十章:调用动态链接库

第十一章:面向对象编程(LVOOP)

第十二章:XControl

第十三章:项目管理


其它

返回《我和LabVIEW》主页

博客版《我和LabVIEW》目录”的一个响应

  1. 您好阮工,刚看您的《我和labvi第二版》,到了72页,有这么一句话:但是在程序运行时,属性节点的效率要大大低于局部变量?是低于还是高于?

  2. Hi,我想问个问题,一般控件在右击时都有一个设为默认值的操作,但是我在控件相应的调用节点中看到只有“重新初始化为默认值”,有没有什么方法在我执行程序的时候修改控件的默认值
    这样我在关闭程序在打开后,能够记录我上次执行的值。之前用的就是写文件读文件的方法,但是我觉得既然控件有“设为默认值”的操作,那么这个默认值肯定也是存在了某处,NI为什么
    不提供一个在程序执行的时候设控件默认值的调用节点呐,或者你能告诉我控件的默认值一般写在哪里,我们直接去修改这个文件是否可行呐,谢谢~

    1. 控件的默认值只能在VI处于编辑状态下的时候进行修改。因为程序运行起来以后,就不需要修改控件默认值了:这时候,你用一个变量保存默认值就可以了,程序每次启动时,把这个值赋给控件。

      不过,LabVIEW提供了一个属性节点,可以修改控件的默认值。

      1. 对于你所说的用变量保存,那么我完全退出LabVIEW以后,再打开,那个变量不是也变成了自己的默认值了么,而不是上次保存的值
        我要的就是你所说的属性节点里面的那个修改控件默认值,这个是我一直想找的,我刚刚又找了一下,没有呀,你能告诉我具体在哪里么?

        1. 任意一个控件,它的属性节点里都有“Default Value”这一属性。但是这个默认值属性是不能在VI运行时被修改的,所以我估计这个属性节点也不会满足你的要求。
          你可以自己编程序,把你的默认值保存在文件中,每次运行程序时从文件里读取默认值。

  3. 阮先生你好,请问如何做这样的程序界面:
    程序运行时,最小化不是隐藏在任务栏里,而是以图标的形式隐藏在活动栏里,点击图标时弹出程序界;就如同QQ的界面
    能不能发个例程给我看一下

    1. 我没有这样的例子。但是LabVIEW不能直编写这样的程序。把程序显示在Task Bar需要调用Windows API或第三方ActiveX控件,Google一下,应该可以找到相关例子。

  4. 阮老师,你好!!!我最近编辑了一个数据采集系统,用的是生产者–消费者循环。 “获取队列状态”函数节点在运行时提示“输入参数无效。例如,输入路径可能包含操作系统不允许用于路径的字符(例如,!或@)”。这是怎么回事啊???
    函数节点“DAQmx Write” 也提示错误,提示“无法在设备中找到用于路由的源接线端,请确保用于指定设备的接线端名称有效”。改了好几个地方了,还是同样的问题。。。请教阮老师下。。

    1. 最有可能你的队列是无效的,用”Obtain Queue”创建出来的队列才可以正确使用。DAQmx也是同样的问题。你可以先打开LabVIE自带的例子学习一下。

    2. 谨慎怀疑你的程序里,出case结构的时候队列跟仪器的引用使用了“默认值”,不妨截图上来看看。

  5. 影儿 小,这个函数就是把数组的元素重新排列一下。比如原来两维数组编程一维的:原来元素排成一个方阵,现在排成一条线。自己造一个数组,实验一下就明白了。

  6. 阮老师,你能否给我解释下“重排数组维数”这函数的用法,我看了该函数的帮助文档,可还是没真正弄明白其的用法。

  7. 阮老师,您好,请教一下,用labview控制usb摄像头是不是不能实时调节摄像头参数?

  8. 还有一点需要注意的是,文件中数据是big-ending还是little-ending的,LabVIEW读文件默认的byte order可能和你那个文件采用的不同。如果需要给我看一下图片,你可以把图片贴到这个论坛上:http://bbs.gsdzone.net/showforum-2.aspx。

  9. 只要你知道文件的具体格式就可以。把二进制文件一个字节一个字节的读入,或者当作字节的数组读入,再把每一字节还原为对应的数据就可以了。

  10. 我没有听说过LabVIEW的STIM driver模块,但也不敢说它就是没有。所以把你的我问题转到论坛上去了,也许别人知道:http://bbs.gsdzone.net/showtopic-1873.aspx

  11. 阮老师,您好!我在一些文献上有看到LabVIEW有一个STIM driver模块,但是我在NI网页和其他网页上都找不到,我想请问一下LabVIEW是不是真的有STIM driver模块,有的话在哪里可以找到?谢谢

  12. wxx116zh w, 我头一次听说RAW设备这个概念,所以帮不了你了:) 你可以到相关的论坛上发帖看看。

  13. 阮老师,你好,我用USB配置成RAW设备时,什么都没配置,通信每隔一定的时间就超时,我想问一下,RAW设备需要怎样配置,用的是labview自带的例子,就是visa打开,visa写,visa读,visa关闭。

  14. feng sun,有没有参考一下书中自带的例子啊?还有就是你的具体错误是什么?在这里,我能想到的需要解释的地方并不多,因为传值给全局变量,只要连一下线就可以了。

  15. 阮大侠,在《我和labVIEW》一书中132页,图4.36中所描述的把用户自定义的事件付给全局变量。能不能详细描述一下付给全局变量的步骤?我尝试过多次,都以失败而告终。请不吝赐教,多谢。

  16. wxx116zh w,你的问题非常具体,需要描述的再详细一些,我建议你把问题发到这个论坛:http://bbs.gsdzone.net/showforum-2.aspx。我和其他人会帮你解答的。

  17. 阮老师你好:有几个问题我想问一下,1.在读写EXCEL文件时,那个操作函数没有错误输出,当直接按下cancel键时,出现的43号错误怎么处理不让它出现。2.在一个VI中有两个并行的while循环,用什么办法可以再一个循环中控制另一个循环的执行与否,我试过了局部变量,通知技术,没有成功。3.在主VI和子VI都需要和底层硬件通信的时候,把通信用的函数做成一个子VI放在主VI中调用,使用队列的话,在子VI中怎样才能正确的操作队列。谢谢阮老师。

  18. IVI是编写仪器驱动的软件标准。关于这个标准其实没什么好解释的,都是定死,按照规范实现就是了。你可以到NI网站上下载一些相关的驱动程序,看一下源代码,也许可以帮你熟悉一下。

  19. 您好,通过测量与测试论坛,链接到了您的博客。您应该对IVI仪器驱动标准熟悉吧。我一名研究生,研究信号发生器,现在准备学习IVI标准,使我们的仪器也标准化。但是因为刚刚接触,对这些很陌生。不知道您能不能稍微讲解下,或者介绍什么书之类引导下。谢谢!

  20. 这样好像就有点多此一举了,我和老板商量下,能不能用word作为模版。使用HTML格式是考虑到要作为网页发布,不知道我的想法对不对。现在先用word代替HTML我在你即将要出版的那本书里并没有看到专门介绍报表生成的张目,是否会在Blog里补充?现在我很需要这方面的知识,特别是用模版生成报表的方法。和感谢你抽空解答我的问题,很期待你书出版的那天,我一定会在第一时间去拜读的,真想让你在给我追加个签名的。呵呵,奢望下。

  21. 模板是HTML的比较麻烦,LabVIEW也许没有这个功能。不过Report Generation Toolkit可以使用word的模板。有一个解决方案是把你的模板存成word格式,使用Report Generation Toolkit生成word报表,再把它存为html格式。

  22. Report Generation Toolkit中那个组件是用来连接报表模版和将要输出的报表,我想实现按模版形式输出报表的功能。我使用的模版是HTML格式的。

  23. 谢谢songstone的解答,看来我对labview还是不熟悉。组件实在太多了,要是能把常用工具放在一起就好了。

  24. 呵呵,顺便帮qizhen回答一下,Report Generation Toolkit工具包是自带在LabVIEW里面的,Office那个才是要另外装的。

  25. 我在网上只找到Report.Generation.Toolkit.for.Microsoft.Office.v1.1.3,你有Report Generation Toolkit这个工具包和它的帮助文件吗?还有我使用的版本是8.6,而公司里的是8.5,这种应用于8.6版本的组件能否同样应用于8.5?

  26. 我想问下怎么用labview将存储在SQL数据库的数据按html文件输出,并且这个输出的文件必须和我预先存放的html文件模版的形式相同。

  27. matlab 和 simulink 我都没用过。 LabVIEW 中有 3D picture control 控件可以用于三维建模。

  28. 阮老师,又来麻烦你了、、、请问labview里面可以做虚拟现实嘛?类似maitlab中的simulink的virtual reality toolbox。。。我找到labview里有simulation interface toolbox可以连接matlab的simulink,是不是就是说labview可以直接调用用virtual reality toolbox编写的程序的dll,然后在labview里显示?labview里有可以显示他的3d viewer嘛?

  29. 如果想提高效率,使用面板的 Controls 属性。得到前面板所有控件,然后一一检查,如果是需要改变它的属性,就改一下。

  30. 我现在想根据控件label动态控制面板上的控件,请问有什么办法?我现在用[LabVIEW]\\resource\\importtools\\Common\\VI Scripting\\VI\\Front Panel\\Method\\Get Control.vi获取控件引用的方法,请问还有其他方法吗?我用这个方法感觉效率比较慢,我循环调用这个子vi来改变66个string控件的值和位置(分别为channel 1、2、3、…66)时,明显有个刷新的过程

  31. 次增量就是浅颜色的,次一级的标尺的增量。你试着改变一下它,然后观察结果,就明白了。

  32. 属性节点xscale.range里的次增量是怎么用的呢?因为在设定时基调节时我用的是将最大最小值,起始值,增量,次增量通过捆绑簇输出到xscale.range。这个方法来自NI的一个自带例子。可是不太明白次增量怎么用。可能表达不太好….

  33. 波形图的数据是一个一维数组,X是索引,Y是索引元素的值。已知Y,在数组中搜索就可以得到X。

  34. 你好,我也是个初学者.我想知道针对一个波形图,我知道它的Y值,怎么能求它的X值呢?有没有这样的一个功能.或者在一个表格里,知道它的位置,可不可以直接读取数值 ?谢谢

  35. 请问,labview里面可以居中输入嘛?就拿一个numeric control 来说,如果他的输入框很长,我只输入一个数字,那么这个数字会顶着左边输入,这样比较难看,我想数字输入时自动在中间显示,那样明显好看点,请问有什么属性可以直接修改吗?

  36. 兴华,如果只是类中普通的函数没有问题。但无法调用构造函数的,所有应用程序需要生成类的实例,就不能这样做了。

  37. 一直想请教您一个问题,就是LabVIEW能调用把函数封装在类中的dll文件吗?

  38. 我明白你的意思了。stack plots中间的横杠是可以调整的啊。调整每个plot的大小,可以使得每个图片紧挨在一起。

  39. stack plots就是分格显示吧?我试了,可是中间有个横杠,很是难看,因为我要显示66个通道,现在正在自己写XControl,大哥如果有好的方法,可否贴个例子上来?对了,我在“传引用”那节问了您问题,麻烦解答下:)

  40. 你的意思是说每个曲线实际上显示在一个独立的图形上吗?那实际上就是把多个波形图控件摆放在一起。另外“Mixed Signal Graph”控件也可以达到这个效果,我的8.6上有这个控件,不确定以前的LabVIEW版本是否有这个控件。书的出版还需要几个月,具体时间现在还不确定。

  41. 阮兄是说duplicate吗?这样添加的y刻度是左右排列的,不是上下排列的、、、我想要的是类似stack plots的那个效果:)谢谢回我:)书现在有个准确的出生日期了不?很期待啊

  42. 我最近在忙着写书,所以少网比较少。你的问题很好解决,在Y轴坐标上点击鼠标右键,选择复制标尺,就可以多创建出一个标尺。使用该方法,可以创建多个标尺。然后再波形图的属性对话框中为每个曲线指定所使用的标尺即可。

  43. 阮大哥这两天没看博客吗?麻烦解答下我的问题,十分感谢、、、就是要满足我的要求,是否有必要单独用Xcontrol做个自己的chart,如果要,麻烦提点下用什么做(picture control??),再次感谢

  44. 请教高手一个问题,我现在做脑电信号可视化的项目,现在想离线显示数据,它是一个66*2000000数组(66个电极同时采集来的脑电数据),请问如何才能实现让这66个曲线数据共用一个X轴,而分别有自己的Y轴(自上向下排列),我用Waveform Chart的stack plots大致能实现那个功能,但是那样每个曲线分别用一个绘图区,中间会有一个分隔,显得很难看,请问有什么好方法?需要做个Xcontrol嘛?对这么大的数组数据处理有什么好的处理显示建议?急需,谢谢

  45. VISA函数使用非常简单,而且你的例子基本上只需要使用读和写两个函数就够了。LabVIEW的帮助中有对这两个函数的详细说明。

  46. 对于VISA函数,我只懂些皮毛,毕竟我还是初学者,这是我第一个工程。针对USB端口,要怎么利用VISA函数去发送命令与接收数据,阮大哥可否详细的解说一下呢?小弟在此谢过。

  47. 首先应该找找看你们这台设备有没有现成的驱动程序。如果有,就方便了。否则可以通过VISA函数,向USB端口发送命令和接收数据。

  48. 嗨!阮大哥好。有一些LabVIEW的问题想要向你请教。我们最近有一台Digital Mixer要测试。它是通过USB输入与输出讯息的。我们要测试的是它的按钮功能,也就是要确定每一粒按钮是否可以正常操作。首先,我最大的问题是,要怎么用LabVIEW通过USB来和我的Digital Mixer“沟通”?我用的电脑是Window XP,以及LabVIEW 8.2。当我插入USB时,电脑自动安装其驱动程式。其驱动程式是否可以和LabVIEW连接起来再加以操控?目前,我们正在使用的测试程式是Midi OX,可是Midi OX的用户界面并不是很好。测试一台就没关系,可是要测试很多台就会很费时了。所以,我想利用LabVIEW来取代Midi OX。

  49. 嗯,过两天写一个使用ActiveX的例子。其实这是非常简单的。或者你也可以直接在LabVIEW中找到相关的例子

  50. 你好,
    你的文章使我受益匪浅,谢谢了。
    有个问题是关于在LabVIEW中使用ActiveX,能不能稍微介绍一下,最好有个小例子的。NI的资料太简单了,而且我还是ActiveX的初学者。

  51. 对DAQ仿真我也不了解。如果DAQ的驱动程序提供的仿真功能,那么直接用就可以了。否则大概不那么容易仿真的。

  52. 请问:
     
    Labview 中怎么仿真DAQ硬件?
     
    因为我的机器上没有安装DAQ硬件,但是我想模拟仿真一个硬件,可以用来检测Labview 程序。请问怎样才能实现? 谢谢。我刚开始用LABVIEW, 一头雾水———

  53. 麻烦,我问一下,有人使用LabVIEW制作过这种软件:填单式的,有些类似与组态软件。可以先填单,然后安装所选择的内容,由LabVIEW自动生成(不是事先编写好在调用也不少先方一下仪表盘之和隐藏,用几个开几个)测控仪表界面。仪表的样子,测量范围,个数可以选择,之后在接下来的界面中就会排布好。
    如果有人有这方面的labview编程经验可以和我联系。我现在做课题,老师提出这样的要求。我实在不知道该如何使用labview如何编写出这样的程序,邮箱:liqing0308@yahoo.com.cn多谢各位大侠了

  54. 高手啊
    有空来QQ群: 13267790指点指点
    –¤╭⌒╮ ╭⌒⌒╮  ╱-◥██◣ ╭ ╭  ︱田︱田田|  Boone Mail:boone301@126.com   QQ:24732458  QQ Group(LabVIEW_Home):13267790  QQ Corporation:17756234  ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
     

  55. 阮大侠
    崇拜你很久了
    我用了1年多了LABVIEW了,自以为知已
    看了你的文章才知我是如此肤浅。 

  56. 我对 C# 不熟,只知道C是如何调用 DLL 的。如果你也会用 C 语言,可以现在 C 下面试一下,看看是不是有问题。如果也有问题,那是升成的DLL不对,否则就是C#用法的问题了。

  57. 请教一下,你是否使用过C#调用Labview编译的动态链接库呢?我在调用的过程中遇到了一些问题。 

  58. 最近在做LABVIEW,所以看见觉得格外亲近,过来说句话
    页面做的也很好呢
    很不错呢

  59. 你好,看了你的帖子和一些文章,觉得你解决一点我遇到的这个问题肯定没有问题。所以,麻烦你帮帮我。
    关于一个布尔量为真的持续时间问题
    有一个布尔量,我想知道它保持“真”的时间是不是大于一个给定值,该线程又不能影响其他的线程,请教这样的功能应该怎样实现?能给我程序框图吗? 谢谢了

  60. 你好,看了你的帖子和一些文章,觉得你解决一点我遇到的这个问题肯定没有问题。所以,麻烦你帮帮我。
    关于一个布尔量为真的持续时间问题
    有一个布尔量,我想知道它保持“真”的时间是不是大于一个给定值,该线程又不能影响其他的线程,请教这样的功能应该怎样实现?能给我程序框图吗? 谢谢了

  61. 阮先生你好,我读你的很多文章,受益不浅.
    现在想请教有关IVI的一个问题: 我在一个系统中要用到AC SOURCE并且需要使用IVI的可互换性,但是IVI并没有发布AC power 的class driver,这可能需要自己开发AC power class driver. 但我却看到NI或其他仪器公司的网站上提供基于IVI的specific driver(当然是AC source的),那labview在调用这些ac power的 specific driver时是否是通过class driver呢? 我认为不是的,那这样也应该不具有IVI的可互换性,请问是这样吗?

  62. 阮先生,你好!
    我想请教你一个问题。我在labview里用CLN调用VC DLL里的函数时,其中有一输出和输入参数是PULONG型指针,均指向PC内存空间的一段地址空间,我弄了很久都没有办法解决这个参数匹配问题,请问这个矛盾可以解决吗?
    非常感谢!

  63. 阮先生你好,我是问你IVI问题的那个人,我想到一个方法不知道能不能行得通,如果说我只是使用IVI驱动里某一类驱动程序(比如信号源)很简单的通用属性(比如只是使用到信号源的二个通用属性:频率和功率,全部信号源都支持这二个属性的设置),那我可不可以在NI的网站上下载某一型号信号源的IVI驱动(我手上有另外一种不同型号的信号源,但没有发现我手头上这个信号源的IVI驱动程序),然后安装这个IVI驱动,把其他特有的属性去掉,只留下共用的属性,然后用这个下载的IVI驱动来驱动我手头上这个信号源(假设二种信号源在设置频率和功率时所使用到的命令都是完全相同的,尽管它们的型号是不一样的)?不知道有没有把问题说清楚,还请多多指教.另外,不知道在这里问问题合不合适.谢谢

  64. 阮先生你好,我是问你IVI问题的那个人,我想到一个方法不知道能不能行得通,如果说我只是使用IVI驱动里某一类驱动程序(比如信号源)很简单的通用属性(比如只是使用到信号源的二个通用属性:频率和功率,全部信号源都支持这二个属性的设置),那我可不可以在NI的网站上下载某一型号信号源的IVI驱动(我手上有另外一种不同型号的信号源,但没有发现我手头上这个信号源的IVI驱动程序),然后安装这个IVI驱动,把其他特有的属性去掉,只留下共用的属性,然后用这个下载的IVI驱动来驱动我手头上这个信号源(假设二种信号源在设置频率和功率时所使用到的命令都是完全相同的,尽管它们的型号是不一样的)?不知道有没有把问题说清楚,还请多多指教.另外,不知道在这里问问题合不合适.谢谢

  65. 我研究生专业选了是生物医学工程,但是工作是在计算机测试测量领域。

Qizhen 发表评论 取消回复