Menu:

第5章  控制程序流(6)


While循环


      相对于For循环而言While循环的使用率可是太高了,几乎在绝大部分程序中都可以发现它的存在。如:事件结构、状态机、连续数据采集等等。可以说它是LabVIEW结构中最常用的结构。
      它的基本概念很简单就是重复执行一段不确定重复次数的程序代码,它的停止是靠用户(程序)使能“条件终端”来控制结束。
      下面看几个小例子:


     与For循环不同的是While循环是程序执行后在检查条件端子,所以它最少要执行一次。
     这个例图给出了至少执行一次的程序框图。
     在大师的书中常常看到这样的使用方法。
     如果把布尔常量换成一个布尔开关,就可以控制While的停止(退出循环)。 


这个定时器还是必要的我们多次强调使用系统的任务管理器就是查看CPU的使用率,没有它CPU使用率达50%,使用它后,CPU的使用率是1%以内,实际显示是0%。

    如果我们将停止控制开关放在While循环的外部会发生什么现象呢?
     我们会看到While循环要么执行一次(T),要么就无限期执行下去(F)。
     这里再次展现了数据流的概念,因为依据数据流的工作原理,所有输入到While循环的数据必须在执行循环前传输,而循环的输出数据只有循环结束后才输出。
     所以当开关为T时运行程序,While循环只执行一次,当开关为F时运行程序,While将不会停止会无限期的运行下去。

     为了降低CPU的使用率,也可以使用带有定时功能的While循环来代替那个小定时器。用鼠标右键单击While循环的边框弹出一个快捷菜单,就可以选择替换为定时的While循环。

     我查看了一下,这样程序结构的节点多了一些,图形显得臃肿了,但是使用起来感觉还是很方便的。我甚至在数据采集时也使用这样的结构。


      下面看看大师在书中所列举的一个有趣,但很说明问题的一个例子。

     在这个例子中,使用了一个1分钟的定时器做定时的While循环。
     运行后你会发现,当程序运行了30秒后,我们按下Stop开关,再过1分30秒后,程序才会停下来。为什么呢?

     说明内部定时程序运行完一次之后,While循环在下个循环开始前检查条件端,即便检测到条件端变化为F,也要等到这个新的循环结束才能够停下来。
这是While循环的最少运行一次的特点所决定的。
    

    这个例图给出了此问题的解决办法。通过人工数据相关(数据从属)的方法,把Stop开关包括在运行程序中。
     实验证明这个方法很有效。当程序开始运行30秒后,
我们按下Stop开关,再过30秒后,程序就停了下来。与我们所期待的一样。
    
     在长时间定时循环中,这是很好的方法。
     从道理上讲,数据流编程很简单,实际上要想做得完美合理还是要下番工夫的。


      欣赏完大师的例子,现在回过头来看看同样的情况,在定时的While循环会是什么结果。

      上面的例图给出了定时While循环的程序框图,修改了定时时间间隔后,运行程序其结构与大师提供的解决方法一样也解决了这个问题。

     
当程序开始运行30秒后,我们按下Stop开关,再过30秒后,程序就自动停了下来。与我们所期待的一样。

      这是LabVIEW的内部运行机制,我们无法得知。但可以肯定的是它的运行机制与While循环的运行机制是不一样的。


关于定时While循环和普通While循环在数据采集中的不同之处

      请看本站“一切随缘”Blog——LabVIEW中,一篇博文——”数据采集时CPU工作在100%的状态“中的内容。