网站大量收购闲置独家精品文档,联系QQ:2885784924

LabVIEW实践之路第二章(正文17-32页).doc

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LabVIEW实践之路第二章(正文17-32页)

第二章 强筋健骨:由程序流程的控制展开 按照通常的教程,现在一般要介绍各种数据类型,例如数字、字符串、数组与簇等等。不过从程序结构入手,在掌握流程控制VI的同时认识各数据类型应该更有效,毕竟如果老是把目光集中在树木上,那很容易忘了郁郁葱葱的森林。 本章仍然通过实例来学习,依次完成For循环、While循环、条件结构、顺序结构、事件结构、公式节点等LabVIEW实例。 2.1 循环结构 循环结构是任何程序设计语言都必不可少的,尤其是For循环、While循环等。以下将通过实例学习LabVIEW的循环结构以及移位寄存器的用法。 2.1.1 For循环 看一下右图,For循环的尊容很容易记。左上角N是循环体内程序执行的循环次数,内部的i是当前循环次数(第一次从0开始计数)。LabVIEW的For循环执行过程中是无法中断跳出的,这一点必须明白。另外,虽然左上角的N用来连接总的循环次数值,但许多情况下For循环可以应用“自索引”方法,不用连接N,让循环自动进行,这种方法在数组等类型执行For循环时非常普遍。(其实说白了也很简单,诸如新的JAVA版本也支持数组等类型的迭代而不用先求出数组的length,别急,一会儿给几个例子对比一下) 好的,我们先来最简单的,同时产生1024点的随机数(0~1之间)和一个周期的正弦波,如图2.1所示。 图2.1 For循环仿真波形 上面的例子中For循环次数为1024次,循环体内上部为随机数产生器,下部是正弦函数值。每次循环各产生一个随机数和的正弦值。注意:当循环完成退出时,循环体右侧,边框上连接内外数据的小方框就起到了自动索引的作用:将你各次循环的结果按顺序排列成数组进行输出。当然,有时候我们不需要自索引输出,那可以在索引方框上点右键取消的,不过想一想,取消自索引后输出应该是什么?我问的问题太没有难度了,呵呵。 当然,自索引在输入端也是可以使用的,而且会带来意想不到的方便,尤其是同移位寄存器结合使用。闲话少说,下面我们就实现一个求一维DBL数组最大值和最小值的程序。哦,为了养成良好习惯,我们画一下算法的流程简图吧(对了,下面的流程简图说明一下问题帮助编程,相信你能做得更好)。如图2.2所示,为了便于说明问题,我们假定数组非空。 我们直接给出了实现的程序,注意,图2.3和图2.4的两个框图程序都能够得到图2.5所示的正确结果,可能其中几个vi、循环两侧的移位寄存器以及2.3中的条件结构有些陌生。除了这些,两个程序有什么不一样吗? 图2.3 求数组最大最小值框图程序1 图2.4 求数组最大最小值框图程序2 图 2.2 算法流程图 先说一下有些陌生的东西。图2.3中在循环里应用了条件结构,条件框可对真和假两种情况作出不同的处理,不过不要急,下一小节再讲它。那么数组在开始循环之前使用获得了数组长度,并赋给For循环的循环次数N,这时候在循环内部i就会从0循环递增到N-1,于是我们使用索引数组函数依次获得第i个数组元素。每次获得当前元素后,都同最大值max、最小值min进行比较,以获得整个数组的最大最小值。当然,我们用-∞初始化max和用+∞初始化min都是为了从第一个数组元素开始就能够正确的完成最大值、最小值的查找。这儿有一个关键的实现---移位寄存器,也就是循环框上的。你可以在循环框上点右键,选择“添加移位寄存器” 便会发现在循环框架的左右出现了一对。没错,移位寄存器是成对出现,它的工作原理是:第i次循环的输出(右侧)即是第i+1次循环的输入(左侧)。具体到图2.3所示的程序,进入循环体时max移位寄存器初始化为-∞,而min初始化为+∞。第一次循环时数组元素3读入,分别与max、min的值比较,结果是max、min被置为3;第二次循环时max、min的值都已经变成了3,这一次循环读入2,比较后min的结果置为了2……。以此类推,直至循环结束。 图2.4功能与图2.3完全一样,注意,为什么For 图2.5 程序前面板 循环左上角的循环次数N并没有赋值?因为数组进入循环体是使用了自索引(如果你连接数组和For循环体,默认就是自索引),For循环回自动从头到尾依次获取每一个元素的值,对我们编程节省不少力气。另外程序用选择函数代替条件结构,这个函数能够用于大多数双值选择的情况,但必须是相同类型(如从两个整型、两个字符串……中根据真假选择),上方输入提供逻辑真时的输出,下方输入则提供逻辑假时的输出,中间则是判别逻辑(真或假)。 肯定有学过LabVIEW的小盆友会说,数组最大值、最小值有专门的VI可以调用,不用这么麻烦。没错,数组函数里数组最大值与最小值函数能够直接完成此功能,并且给出最大值、最小值出现的位置。我们举例是为了学习,并且你也可以继续完善我们的例子实现更多的功能

文档评论(0)

fds373ix + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档