LabVIEW的高级编程技巧

上传人:人*** 文档编号:486302102 上传时间:2023-05-15 格式:DOC 页数:11 大小:636.50KB
返回 下载 相关 举报
LabVIEW的高级编程技巧_第1页
第1页 / 共11页
LabVIEW的高级编程技巧_第2页
第2页 / 共11页
LabVIEW的高级编程技巧_第3页
第3页 / 共11页
LabVIEW的高级编程技巧_第4页
第4页 / 共11页
LabVIEW的高级编程技巧_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《LabVIEW的高级编程技巧》由会员分享,可在线阅读,更多相关《LabVIEW的高级编程技巧(11页珍藏版)》请在金锄头文库上搜索。

1、LabVIEW的编程技巧本章介绍局部变量、 全局变量、属性节点和其他一些有助于提高编程技巧的问题,恰当 地运用这些技巧可以提高程序的质量。8.1 局部变量严格的语法尽管可以保证程序语言的严密性,但有时它也会带来一些使用上的不便。在LabVIEW 这样的数据流式的语言中,将变量严格地分为控制器(Control )和指示器(Indicator),前者只能向外流出数据,后者只能接受流入的数据,反过来不行。在一般的 代码式语言中,情况不是这样的。例如我们有变量a、b和c,只要需要我们可以将 a的值赋给b,将b的值赋给c等等。前面所介绍的 LabVIEW内容中,只有移位积存器即可输入 又可输出。另外,一

2、个变量在程序中可能要在多处用到,在图形语言中势必带来过多连线,这也是一件烦人的事。还有其他需要,因此LabVIEW引入了局部变量。8.1.1 局部变量的创建我们在框图上设置三个变量,两个控制器分别为Numeric和Numeric 2,现在增加局部变量。选择Function宀Structures宀Local Variable然后将其拖到框图上,就可得到一个代“?”的图标,下一步将其与框图中已有的变量建立关联,有鼠标右键单击图标,进入Select Item选择“ input1 ” ,最后框图就变成了图7 1右边的样子。pIujTier i cVisiblft Items卜FindSelect It

3、emHumeri cChange To HeadNumeric 2Deseripti on and Tip.,Set BreakpointCreate卜Replace卜Open Front FnelIfuih ericNumeri c图7 1局部变量的创建局部变量只是原变量的一个数据拷贝,但是它的属性可以修改,并且这种改变不会影响原变量。例如上图中的这个局部变量可以利用快捷菜单中的Change To Read变成一个指示器。这样的一对变量的组合,就使它既可读又可写了。局部变量有三种基本的用途:控制初 始化、协调控制功能、临时保存数据和传递数据。下面我们通过练习来说明。8.1.2 应用举例练习8

4、 1用一个开关控制两个循环13366911336T91Time-10.0-Timeo O5.m13762931376393Boolean该练习中有两个 While循环,现在我们用一个开关同时控制它们的运行。面板与框图如上所示。在左边的一个循环中设定了一个开关。右边的循环中做了这个开关的局部变量。并且在快捷菜单中选 Cha ng To Read,最后与循环的条件端子连接。这样就实现了所须的功能。练习8 1结束练习8 2创建一组互锁的开关面板及框图如上所示。这是一个精巧的程序,它非常简洁地实现了所须的功能,面板上的四个按钮开关,在任何时刻只允许有一个被按下(True状态)。当另一按钮被按下时,原先

5、在按下状态的按钮将自动弹起。下面对程序做几点说明。1 程序的基本算法:在 While循环中通过一对移位寄存器将当前数组内容(开关状态)与前一次循环时的 数组内容不断比较。如果没有变化,则通过“相等判断”将选择器上输入端的数据送到选择 器输出端,并送到移位寄存器。如果有变化,则“相等判断”的输出端将把“F”送到选择器, 选择器将选取其下输入端的数据到输出。那么下输入端的数据是什么呢?现在我们举例说明,假如4个开关原来的状态从左到右是“0100”,即开关2闭合。现在按下开关1,则当前数组内容立即变为“ 1100”与前一状态“ 0100”逐位做异或运算后,在异或门输出端得到 的结果是“ 1000”,

6、这个结果送给了选择器下输入端,在选择器输出端送到移位寄存器的同 时还通过一个 Array的局部变量,使数组内容更新为“ 1000”,即使开关2弹起。2. 局部变量的作用:循环内的局部变量使得更新后的数据可以写入数组,没有它数组Array只能读,不能写。循环外的局部变量用来将数组初始化。3. 这个程序的巧妙之处还在于直接对整个数组操作,而不是对一个个数组元素操作,如果需要增加面板上的开关个数,只需要改变数组初始化中的元素个数,并在面板上拖出需要的开关个数。练习8-2 结束练习8-3仪器面板控制按钮的完善ssmpliixg: infoFafrequencyclear generationc out

7、 i nue 呂电nar at i on|frequency|在前面的练习6-7中,我们曾给出了一个非常简洁的连续正弦波发生器的例子。框图如上所示。但从使用的角度这个程序不够完善。例如程序启动后开始发生波形,这时如果你希望调试改变波形的频率和幅值。则改完后必须再次重新启动运行。因为这些值是作为程序的初值出现的。这显然不太方便。如果我们希望能在任意时刻调整参数波形都能“立即”响 应,则可以利用局部变量来完善按钮的控制作用。一个较完善的程序如下所示。4.06.0ampli tudfr亡 yI 1 I 1 I 1 II II ! II02468 WWaveform Gr鱼phTima这是一个正弦波信

8、号发生器,它允许在运行中随时调整参数而不必重新启动。这个程序 增加了内外两层循环,并且对幅值、频率设置了两套局部变量,利用内层循环监视当前时刻和前一时刻的值。如果没有变化,信号源持续工作,内循环一直执行下去。如果发现当前时刻和前一时刻的参数发生了变化,则结束内层循环,并使外循环前进一步(执行第二次外循环),相当于程序重新启动,则信号源按新的设置参数运行。另外注意开关的作用,当开关 按下时,先终止内层循环,然后终止内层循环,同时Clear gen eration。练习8-3 结束8.2 全局变量全局变量是LabVIEW中一个与VI地位等同的模块,它以独立文件的形式保存在磁盘 中,文件后缀为.gb

9、l。通过全局变量不同 VI之间可以交换数据。8.2.1 全局变量的创建和调用创建步骤如下:1.在Function宀Structures下选择 Global Variable,将其图标拖至U框图中,得至U2 .双击Global Variable图标,得到其前面板3.在其前面板上放上所需要的变量,例如一个数组、一个布尔量、一个字符串变量如下图所示。3.保存这个变量,例如文件名称为a.gbl。至此,全局变量创建完备,下面我们通过例子来说明它的调用。练习8-4全局变量的调用该例中我们首先在一个VI中产生十个随机数,然后将它传给全局变量a.gbl,然后再创建第二个 VI,让它由全局变量a.gbl中读取数

10、据,并用 Graph显示出来。下图分别 是VI1的框图和VI 2的面板及框图。GraphTlot DTimeGraphI del在做调用全局变量的 VI中有三个问题要注意:在一个VI中调用全局变量的方法同调用子VI的方法,即在Function下选择Select a VI,然后打开所需的全局变量文件。全局变量中所需变量的选定。本例中a.gbl中含3个变量,如果需要的是字符串变量,可用鼠标指向全局变量图标,然后点右键,在出现的快捷菜单中选择 Select Item,即可出现该全局变量中包含的变量列表,选择其中的String。如下图所示。练习8-4Waveform Graph3:DBl 1Selec

11、t ItemVisible ItemE FindChmge To Wr l tHelpDescription 如込 Tip .Set Brakpcintx/ ArrayBooleanString有时需要从全局变量中读数,有时需要向全局变量写数。这时可利用快捷菜单 改变其属性,以上图为例,选择Change To Write就可以向全局变量写数。结束练习8 5 这是-用全局变量控制程序流程个使用全局变量控制程序流程的例子。下图的左上边是主程序的前面板,有三个按钮,分别控制调用子程序1和子程序2和终止程序运行。右边是对应的框图, 下方是两个子程序的框图。 所期望的功能是在打开子程序1的同时还在主面板

12、上打开子程 序2,同时也可在主面板上直接关闭程序,不管子程序是否在运行。为了在主程序上关闭子程序的运行,设置了全局变量quit,当按下EXIT按钮时,其值(TURE )同时传给全局变量 quit,如果有子程序在运行, 则按照设定的逻辑(STOP 按钮为T OR Quit为T停止运行)子程序退出运行,同时主程序也退出运行。如果没有 这个全局变量,则在主程序上无法控制子程序的退出。Truevjui t口 口口口口口口 口口 口口口口 M L 民.14口 口口口CJirgErWI TruenilL1rm|rrri|-J r5v-:为了保证程序中开关初态的正确,需要在程序开始运行前置初态,为此主程序增

13、加了分为两步的顺序结构。程序开始运行时,首先置全局变量为 F.在顺序结构的第二步中,外循环中的三个循环是并行的,程序运行中将巡回执行这三个循环,这样保证 Exit按钮能起作用。练习8-5 结束8.2.2 使用全局变量和局部变量的注意事项全局变量不仅可以在不同VI间传递数据,而且可以通过它传递消息,控制各VI的协调执行。它在程序设计中很有用.但无论是全局变量,还是局部变量使用过多也会带来一些 其它问题,必须引起注意。首先,从程序的静态结构上看,会使程序结构不直观,造成混乱。其次在程序运行过程 中可能带来数据状态的竞态现象,这主要指因为全局变量作为一种可读可写的中间变量,应当严格控制读写的操作,最

14、好是使它们处于“一写多读”的状态。否则可能带来问题。8.3 属性节点(Property Node)作为面向对象的软件, 其前面板对象自然应当有其属性,不同类型的对象可能的属性种类和个数也不同。通过属性的控制,可以使程序界面更加丰富多彩,实现更好的人机交互功能。Labview引入属性节点(Property Node)的概念来设置前面板对象的属性,并且允许在 程序运行中动态地改变属性。8.3.1 属性节点的创建我们举例来说明属性节点的创建。1.在前面板上创建一个对象,例如Tank如下图左。Tank2 .在Tank图标上点右键,在出现的快捷菜单上选Create宀Property Node,则在框图上出现属性节点如上图右,注意这是显示了一个属性Visible。3.用鼠标右键点击 Tank的属性节点,在出现的快捷菜单上选Properties项,可以看到大量的属性供选择。如果需要从中提出3种属性使用,可以先用鼠标在属性节点 的右下角向下拖拉,直到出现3个默认的属性描述拦。然后在快捷菜单下逐个选 择所需的属性修改其内容。这样就完成了一个属性节点的创建一个面板对象所具有的属性可能有数十个,不同面板对象所具有的属性也有差别。例如对于一个数字控制量对象,它的属性有Visible 数据类型为布尔型。当Vi

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号