More servicesWindows Live
HomeHotmailSpacesOneCare
 
MSN
Sign in
 
 
Spaces home  LabVIEWPhotosProfileFriendsMore Tools Explore the Spaces community

LabVIEW

Q^Q 是我的眼镜
文章安内容分类
O Troupe of little vagrants of the world, leave your footprints in my words.
  • 7/13/2008 9:21:20 PM
    太谢谢软大侠了,你说的那个对信号分段调用好像有点可行,万分感谢!
  • 7/13/2008 3:44:09 PM
    分析超声信号那个问题,不是很理解,但是你把每段信号都调用一下这个函数不就行了吗。
    我也不是所有LabVIEW的问题都能解决,所有如果有问题的话还是在论坛上讨论比较好。
    我推荐几个,
    NI的官方论坛:NI:LabVIEW等产品讨论区
    官方之外最大的LabVIEW社区:LAVA Forums
    msn讨论LabVIEW 的群:msngroup7773@hotmail.com
  • 7/12/2008 5:30:01 PM
    有关于labview的问题,我们一个项目需要这个做人机界面,我是个新手,希望能得到你的指点。还有其他联系方式吗?例如QQ?谢谢 我的QQ是342852861
  • 7/12/2008 4:27:31 PM
    阮大侠,你好!小女子今天看了你关于labview的一些文章,对我很有启发。我是一个labview初学者,最近需要做一个处理波形数据的软件,内容涉及到数据采集,数据显示,及对各个通道的波形进行分析,采集的信号是超声信号,因此我需要分析波形的峰值,峰值对应的时间,假设设置了一定的阈值,要分析这段波持续的时间,每个通道采集到的信号会有一连串的超声信号 ,我看到函数选板里有计算波形峰值和其实时间的,这个只能计算一段超声信号的峰值吧,我要怎样才能把每一段超声信号对应的阈值时间,峰值和持续时间都算出来呢 ?是不是需要用到数组呢 ? 请软大侠指点一下,谢谢!
  • 7/12/2008 9:17:42 AM
    Map 这个容器现在还没正式加到LabVIEW中去,现在网上发布的版本基于LV8.5,没办法在LV8.2中使用的。
    所以你恐怕不能在项目中使用这个Map了。只能使用数组将就一下。

    Internet Toolkit 里包含几个部分:XML解析,FTP工具,web服务端等。不过在LabVIEW 8.6中,XML解析这一部分已经被移到LabVIEW中去了。就是说LabVIEW8.6之后不再需要其他工具,LabVIEW直接提供XML解析功能。
    至于你的项目,需要一个免费XML解析器,我建议使用微软的 MSXML Parser,它提供COM接口,可以直接在LabVIEW中调用。这是我尝试过的最简便的LabVIEW中解析XML的方法(除了LabVIEW自带的)。现在还多了一个选则,就是.NET带的XML解析库,也可在LabVIEW中直接使用。但是微软的东西只能在Windows上用。
  • GaoJie
    7/11/2008 9:57:55 PM
    还有一个问题,呵呵。MAP用来做数据容器,数据源是我的测试数据,然后我准备使用XML文件保存一些查询和分析结果,作跨平台的应用。NI的Internet工具包里面的相关VI使用能否简要介绍下,在NI Developer Zone里面只能找到很有限的资源。主要因为接受数据的那边不用LV编程的,所以担心沟通上会有问题。JKI有一个EasyXML工具,不知道你是否有了解,有没有购买的必要,想听听你的建议。呵呵。
    感谢感谢!
  • 高杰
    7/11/2008 8:26:17 PM
    做个项目,需要用MAP,但我只买了8.2的LV,咋办?呵呵。已经在NI Lab链接的Discussion forum里面留言。盼回复。谢。
  • 7/11/2008 6:03:21 PM
    你说的数据队列具体是什么东西,是queue吗?
    如果是的,queue是有名字的,不需要传来传去。想用的时候按名字打开就可以了。
  • 7/11/2008 5:16:04 PM
    长铗,谢谢!学习了你刚发的这篇感觉受益很多,呵呵!要不界面变化或功能变化时改变这些子vi中的引用就要很长时间且繁琐,很是不爽!那初始化时创建需要传递的数据队列的引用有什么好的办法没?否则在子vi中只要增或减其中一个队列引用也要改动很多
  • 7/11/2008 11:16:53 AM
    xieli, 我刚写的篇文章就讲了这个问题,你可以看一下它的最后几段:http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!3315.entry
  • 7/10/2008 10:29:15 PM
    阮大侠您好:平时会经常踩你的blog:),感觉学到挺多labview知识的,我现在做一个测量项目,要在子vi改变主程序某些控件的显示或属性,这样就要在程序开始时将这些主程序的控件以及菜单建立引用,同时为了传数据方便也要建立一些数据的队列引用,这些引用再bundle一个簇在程序的各个vi间传递,这样会带来一个问题就是这些引用组成的簇包含很多的元素,在程序初始的时候需要bundle很多引用,同时在初始化的时候要建立好几个数据对列的引用,较麻烦呵呵,编程过程中只要是修改其中一个就要修改程序中所有子vi的这些引用簇,过程很麻烦!有没有什么较好的办法解决这个问题啊?
  • 青蛙
    6/4/2008 11:31:03 PM
    看来好多人是GOOGLE到这里的.
    我也是找一本书找到这里,很巧的是,我也是一个软件工作者,同样,我也在上海.
    可以的话交个朋友,呵呵.
     
     
  • 5/23/2008 10:00:27 AM
    还有非常喜欢你说的:得人工荨麻疹的都是帅哥美女,哈哈,有道理
  • 5/23/2008 9:58:17 AM
    刚刚google到这里是因为人工荨麻疹,前几个月被医生诊断为人工荨麻疹之后,我一直试图在网上寻找些资料,现在吃药只能控制住痒,但是身上稍微一碰就红的一块块或者一条条,烦死了……不过在你空间上发现内容真丰富,(*^__^*) 嘻嘻……,打理的真不错
  • ian.f
    5/21/2008 2:18:17 PM
    Nice weblog! Cheers!
  • 4/24/2008 4:58:01 PM
    想请教一个问题:
    我用LabVIEW(system exce.vi)去调用一个VB应用程序,当在我的子界面打开这个程序后我的子界面会死机(控件失效了事件还在执行),主界面没有问题。我是个新手,这个问题我想了好久也不知道为什么?希望大侠能帮我解决!!!
     
     
  • 4/7/2008 11:24:46 PM
    居然在考察怎么从张江高科去NI时,拐弯抹角一不小心闯到贵宝地~看到留言板上泰翁的诗句,忍不住要留一个脚印。
    长铗......条件反射地想到弹铗而歌的冯驩,hoho~
    希望有可能与大侠共事=)
  • 3/20/2008 9:23:10 AM
    LabVIEW 中有个 VI 是 Set Cursor.vi。它可以改变光标形状。你可以查看一下和它相关的VI的用法,用它们解决你的问题。
  • chen
    3/20/2008 1:52:52 AM
    板大你好!
    我想LV跟電子繪畫版結合,在LV中模擬畫板的大小,滑鼠左鍵按下寫字或做圖,可以及時在LV模擬畫板中顯示!! 問題點:.要如何當左鍵按下時,模擬畫板可顯示像寫字的黑點呢?? 請不吝指教!感謝
  • 3/6/2008 9:16:17 AM
    我在这里介绍了一些Register Event Callback和event node的用法:http://ruanqizhen.spaces.live.com/blog/cns!5852D4F797C53FB6!2004.entry

    可能不是很详细。
    你有没有什么具体方面的问题,我可以针对这些问题补充一下。
  • 3/2/2008 6:05:07 PM
    大哥,能否讲解一下Register Event Callback和event node的用法
  • 2/29/2008 10:26:16 PM
    你好!想加你为好友,请接受邀请。本人自02年患上人工荨麻疹,一直未能治愈,因为次数太多,一度放弃治疗,对治愈绝望。能看了你的空间获益非浅,希望能成为好友,交流治疗心得。谢谢!
  • 2/22/2008 10:49:21 PM
    无恶意.来看看.
  • 2/22/2008 9:13:38 PM
    先谢谢F117现在我知道了History Property Node。其实开始我不知道这个端子在那个地方能找到,现在知道了。
    还有问题请教:
    1.像这种Property Node有没有书介绍的?
    2.现在我想解决的问题:已经编好了一些vi,现在想做成类似windows窗口的界面,点击哪个测试选项就可以运行那个vi.有这方面的参考书吗?
    现在没一点感觉。
    谢谢大家帮忙!困惑
     
     
  • 2/2/2008 11:41:54 AM
    对于"没有名字"同学的问题,我有些看法, 数组接History Property Node在于清除绘图显示的历史数据吧, 采样后的X Scale可以设置成Auto,或通过Property Node设定一个范围,呵呵
More...
View space
-YoYo-
View space
熾天使
View space
Yigang Fang
View space
浴火凤凰
View space
霜冷长河
View space
淡淡
View space
๑۩۞۩万年小妖๑۩۞۩
View space
 ̄濏縮·角落

Updated 7/20/2008
Updated 3/28/2008
Updated 2/28/2008
Updated 12/4/2006
Updated 12/27/2007

如何学习 LabVIEW

    根据我自己的观察,学习LabVIEW一般有以下三种方式:系统型学习方法、探索型学习方法和目标驱动型学习方法。这三种方法之间并不矛盾,可以在不同的时段使用不同的方法。每个人可以根据自己的个性特点和所处环境选择一个适合自己的学习方案。

    系统型学习方案是传统的学习方法,学生学习多是按此方法。它是指按照别人制定好的学习方案一步一步学习掌握一门知识。学习效果如何,主要取决于教师和教材的水平。若选此方案学习LabVIEW,最高效的方法莫过于参加NI公司的LabVIEW培训课程。基本上,完全没接触过LabVIEW的学员可以在一星期的时间内达到编写简单程序的程度。此外,现在很多大学都开有LabVIEW课程,方便了在校生学习。
    自学也可以采用此方案。找一本教程类的书籍,按照书中指导一步一步学习。教程类的书籍应当侧重于解释LabVIEW的编程思想以及原理;有些书仅偏重于罗列LabVIEW中每个函数或VI的功能,则不适合用于此种学习方案。

    探索型学习方法适合喜好自己钻研的人。同样一个技巧,如果是自己发现的,比从他人那里的来会更有成就感。任何一个教程都不可能覆盖到LabVIEW的全部功能,有心得学员不妨自己打开书中未曾介绍到的那些菜单或者函数选板,尝试一下它们都是做什么用的。在真正动手摆弄每个新东西之前,打开LabVIEW的即时帮助窗口,阅读一下相关说明可以大大加快学习过程。
    比如,打开“应用程序控制”函数选板,发现这里有一项“选板编辑”。好像没有任何一本书里介绍过这个功能嘛,这是干啥用的呢?如果没任何提示,也是无从下手去尝试的。打开LabVIEW的及时帮助,可以看到它对这个功能的简单介绍。进入“详细帮助信息”,会得到更全面的说明。再自己动手实践一下,就基本可以掌握此功能了。

image

    阅读他人代码也是一个很好的学习方法。自己的探索总是有思维局限性的,他人解决问题的方法可以大大拓宽自己思路。我介绍过的编程经验中,很大一部分都不是我自己凭空想出来的,而是借鉴与别人的LabVIEW代码。

    目标驱动型学习方法是公司员工中最常见的学习方式了。工作后,如果不是个人有兴趣,多数人不会浪费时间去学习工作中用不到的知识。等老板布置了具体项目或者工作任务后再学习相关知识,效率更高。学也只要够解决眼前问题就行了。针对这种情况,请教身边牛人或者公司前辈是最好的学习方法。如果周围的人不能解决问题,到论坛上发贴,寻求更广泛的帮助。
    推荐一个论坛。首先是NI的官方论坛,这里会有NI的技术支持和研发工程师来回答问题。如果英文够好,最好是到它的英文版面去提问,英文讨论区人气更旺,容易找到答案。LAVA 是官方之外最大的LabVIEW社区,也是寻求帮助的好地方。如果平时用Windows Live Messenger,可以加入 msngroup7773@hotmail.com,这是个msn讨论LabVIEW 的群。在它上面讨论问题最大的好处是可以及时得到回应。
    我见过几个工程师在项目中遇到了难题,于是来报名参加LabVIEW的培训课程,以为上完课可以解决自己的问题。但实际上完全误解了培训课程的意义,培训课程是为了帮助那些想要系统学习LabVIEW知识的人,而不专注于任何一个具体问题。

开发 XControl 2 - 创建

    在项目浏览器上,点击鼠标右键,选择“新建->XControl”,就可以创建一个新的XControl。

image

    XControl 在结构上是一种特殊的库,他包含一些特定的更能VI,和一些可选的属性、方法VI及其它相关文件。在新建的 XControl 上已经包含了4个必须的功能VI(控件):数据、状态、外观、初始化。XControl 还有两个可选的功能VI:反初始化和转换状态以保存。
    简要介绍这几个功能VI的功能是:
    数据:用来定义XControl的数据类型。
    状态:定义所有XControl内部使用到的数据。
    外观:这是XControl中最主要的功能VI,用以实现XControl的界面和界面上的行为。
    初始化:设置XControl的初始状态。
    反初始化:负责清理工作。
    转换状态以保存:用于把XControl内部的某些数据保存在使用它的VI中。

    下面对XControl做一些基础的设置,比如修改它的图标、版本号等,然后保存。
    XControl功能VI的文件名并不一定与其功能名相同。比如,为了方便更多人使用,我使用了英文名称来保存我的XControl:

image

开发 XControl 1 - 设计

    XControl 是 LabVIEW 8 开始出现的一个制作 LabVIEW 控件的工具。与之前的用户自定义控件相比,用户自定义控件只能定义控件的界面,而 XControl 还允许通过编写代码来定义控件的行为。因此 XControl 功能更加强大。
    XControl 的主要优点是可以把界面元素与相关的代码封装在一起,从而方便发布和重用这些界面组件。
    XControl 也有比用户自定义控件不足的地方,它开发起来更加困难;设计不合理的XControl会导致程序更加严重的问题。

    需要开发一个新的控件之前,首先要考虑一下以何种方式实现这个控件。
    如果这个控件极为特殊,只会用在某个特定的程序中,那么也许没有必要将其作为单独的控件;
    如果这个控件需要被多次使用,那么就应该考虑把它做成可重用的独立控件。这个控件也许不包含任何特殊行为,比如一个用于表示坐标位置的控件由两个数值控件组成,程序只是使用它的值就可以了;或者一个新型按钮,进外观与旧按钮不同,其它行为都与传统的按钮一模一样。这样的控件适合使用用户自定义控件来制作。
    如果新的控件需要重用,行为与已有其它控件又有较大差别,那么就要考虑XControl了。比如:制作一个新按钮,但它比传统按钮多一个状态;或者它的界面带有动画效果;制作数值类控件但是用中国本土度量单位;基于图片控件,专用于绘制某种特殊曲线等。

    我们前面提到的黑白棋的控件,既有特殊界面,又有特殊行为,又可以应用于不同软件中,非常适合做成XControl。我们先来具体设计一下这个XControl所需的界面和行为。
    它的界面部分前面已经设计好了,直接拿来用就可以了。不过在前文提到的几个设计方案中,我个人觉得 Pict Ring 数组控件的那个解决方案,最能简化编程代码,所以我们采用这个界面方案。
    XControl 在应在程序框图上的端点的输入输出数据应该是应用程序最经常需要与XControl交互的数据。本例中,应用程序最常使用的数据就是棋盘的布局信息。因此,这个XControl的数据应当是一个8×8的整型数组,表示棋盘上棋子的布局。
    黑白棋控件的属性应当包括:当前该下什么颜色的子、可落子的位置、盘面上每种颜色的子数、上次落子的位置。
    它的方法有:落下一子(这个方法需要包含以下具体的操作:在新位置放置一个棋子;翻转被吃掉的棋子;更新数据和所有属性的值)。
    它还要在当用户在交互界面上摆下一子之后,发个事件通知应用程序。

界面编程技巧 5 - 使用绘图控件

    有时候需要画一个比较复杂图形或曲线,而 LabVIEW 没有提供相应的控件。可以借用 LabVIEW 已有的基本功能的控件,配上一些代码,实现一个具有特定功能的控件。
    常被用来做这种基本控件有 XY Graph、3D Picture Control、Picture 控件等。
    例如需要做一个绘制极坐标函数曲线的控件,就可以在 XY Graph 的基础上改造。一共一个转换用的VI,把点的极坐标转换成直角坐标系下的值,在 XY Graph 上绘制出来就可以了。需要某个支持某种特定三维绘图方式的控件,可以通过改造 3D Picture Control 得到。
    Picture 控件是个更为基础的控件,很多具有特殊效果的界面元素都可以利用 Picture 控件制作。比如,需要制作带图标的菜单,或类似LabVIEW函数选板的菜单等。LabVIEW没有为它们提供现成的控件,就可以在Picture控件上自己把这些效果都画出来。我们前面介绍的棋盘棋子界面也可以使用Picture控件来制作。

    下面介绍一下实现这个界面的具体过程。
    第一步,创建一个空白的Picture控件,针对Picture控件的常用操作都在Picture Functions 函数选板中。

image  image

    与前面介绍的方法不同,使用Picture控件制作棋盘棋子的过程,不是在VI编辑状态下进行的,而是需要在程序运行时绘制。所以下面的界面设计工作都要通过编程来完成了。先介绍一下Picture控件的Erase First属性,它有3个值:0表示从不擦除,也就是说每次传一个数据给这个控件,比如一个圆环图案,Picture上显示的并非只有这个圆环,而是把圆环叠加在原本的内容之上。如果我想画一个有三个矩形组成的图案,可以分三次画,每一次传递一个矩形图案给Picture控件;2表示每次都擦除,每次传递一个图案给Picture控件,它都会将原来的图案擦掉,仅保留这一次的图形。擦除图案后Picture控件会显示默认的白色。所以,使用这种方式,用户在切换图案时会看到Picture闪烁一下。若非必要,尽量不要使用这种方式;1表示程序第一次运行时把Picture上的内容清除,等于自动帮你做了初始化工作,我们这里也使用这种方式。
    就是说,棋盘布局发生变化时,进更新发生了变动的位置。不要重绘整幅图。

image

    棋盘再棋子下层,所以要先画棋盘。画棋盘可以使用LabVIEW提供的划线函数,一条线一条线画出来。因为我们之前已经制作了棋盘的图片,所以可以直接把这张图片显示出来。代码如下:

image image

    下面再画上棋盘初始时的四个棋子。画棋子的方法与棋盘相同,可以使用画圆函数,已可以使用已经制作好的图片:

image image

    到目前为止,界面设计的几种方法就已经介绍好了。如果能够把这个黑白棋的相关界面和操作(比如放置棋子,反转棋子等)提取出来,合成一个组件,公布出来,其他有类似需求的人就可以直接利用这个组件,不再需要自己重新设计了。
    然而,在 LabVIEW 8 之前是无法实现这一功能呢,因为控制棋子行为的代码分散在程序的各处,而棋盘棋子也是主VI的一部分,很难将它们提取出来组成独立模块。LabVIEW 8 中出现的 XControl 可以把控件的界面及行为封装在一起,成为一个既有界面,又有运行代码一个组件。