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

网友问答之深理入解albview.docx

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

网友问答之深入理解WHILE循环 2011-01-15 09:57一些初学LV的网友们近期发给我的邮件中多次谈到WHILE循环的一些问题,这些问题虽然很常见,但是是根本性的问题,原因在于这些问题之所以不容易理解,是因为刚刚接触LV,很难理解或者经常忽视了“数据流”的问题。首先简要回顾一下WHILE循环的基本概念和特点,然后重点回复网友们有关WHILE循环的问题。几乎所有有关LV的书籍中都把WHILE结构与C语言的DO WHILE循环相提并论,其实二者之间是存在很大差别的,其根本区别在于LV是基于数据流驱动的,而C语言则不是。DO WHILE循环可以保证循环至少运行一次,LV中的WHILE结构也是如此,这是二者之间的共同点。C语言中的WHILE结构如下所示:do{// do sth}while(condition)我们需要特别注意的是,C语言中DO WHILE循环判断循环条件是在循环中所有语句执行之后,简单地说就是“先运行,后判断”,LABVIEW中的循环结构则不然,这导致了很多LV初学者很难理解LV中WHILE循环的一些特殊现象。1、可以同时运行多个WHILE循环结构。同时运行多个WHILE循环结构在C语言中是比较麻烦的,必须开辟多个线程,而LABVIEW是自动多线程的。LABVIEW不仅可以同时并行运行多个WHILE结构,甚至在每个while循环中可以同时运行多个数据流程。多了同时运行的WHILE循环可以分成两类:一类是一个VI中多个同时运行的WHILE循环。多个WHILE循环在同一程序框图中。另一类是每个子VI拥有各自的WHILE循环,此时多个WHILE循环同时工作相当于WINDOWS的多窗口运行。2、每个循环中必须增加延时函数,释放系统控制权。如果在循环中没有延时类函数,将导致WHILE循环独占CPU,CPU占用率很快达到100%。3、仅运行一次的WHILE循环+未初始化的移位寄存器。这就是著名的LV2(功能)全局变量。--------------------------------------------------------------------------------------------------------------------------------下面解释一下网友的问题:问题一、WHIEL循环中,假如等待函数设置为10秒(10000),在2秒时按下停止按钮,过了8秒循环仍然不能停止,这是为什么。我们先看看C语言中,DO WHILE循环+延时函数的情形。do{//do sthSleep(10000);//有些编译器使用Delay()函数,效果相同,目的延时while(!Stop)上面的程序中,程序必须保证从开始延时至结束延时为10秒中,其中任意时刻停止为TRUE,WHILE循环实际工作时间为10秒。LV中类似的程序框图如下图所示:?无论我们在循环启动10秒内任意时刻按下STOP按钮,WHILE循环经历的时间都是20秒。很显然这不是一个简单的DO WHILE循环,C语言中,同样的情况WHILE循环仅执行了一次,而LV中的WHILE循环却执行了2次,导致两次调用WAIT函数,延时20秒。二者之间的区别在于检查循环条件的时刻。C语言中的DO WHILE循环之在循环结束时检查循环条件的,LV中的WHILE循环则不然。在循环开始时,等待函数与检查STOP按钮的值是同时发生的。LV是数据流驱动的,一段框图的运行与否在于它的输入端子是有数据流动进来。循环开始时,由于WHILE循环条件端子上,STOP按钮的值直接流入,所以开始时就判断结束条件。由于开始时STOP为FALSE,此时决定了本次循环结束后,还要进行下一次循环。在读取结束条件的同时,WAIT函数开始延时10秒。在延时10秒过程中,我们按下了停止按钮。STOP按钮需要LV回读时,才会自动恢复,我们可以看到,在10秒结束前,STOP一直处于按下状态。WAIT函数等待10秒完成后,此时进入第二个循环,同样检查结束条件,此时停止按钮按下,下一个循环不再执行,但是此时等待函数第二次运行,等待10秒。两次运行等待函数,导致最后延时20秒钟。回过头来,我们能否使LV中的WHILE循环真正像C语言中的DO WHILE一样运行那,我们只要改变LV中WHILE循环读取结束条件的时刻就可以实现了,如下图所示。我们只要在10秒内按下停止按钮,则循环经历的时间为10秒,同上面C语言的DO WHILE循环功能完全相同了。原因在于我通过顺序结构,强行改变了读取STOP的时刻,即等待结束后读取结束条件。由于此时STOP为TRUE,所以下一次循环不再执行,退出。上面我解释了延时为什么执行了两次的问题,实际上我们根本就不需要一个长时间延时的WHILE循环。对于一个几秒、几分钟、甚至几个小时才

文档评论(0)

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

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

1亿VIP精品文档

相关文档