LabVIEW程序执行架构While循环
假设现在想要写个程序来量测烤箱的温度,当高于或是低于我所设定的温度时,警示灯就会亮起。所以这个程序写起来就会像下面的样子:
这样的程序看起来已经可以用来判断所量测到的温度了,但是当你将这个程序交给烤箱操作的人员时,过不久他一定会跟你抱怨,因为通常要烤的食物至少都要一个小时,可是你的程序每次要量测温度时都需要重新启动一次,操作上真的很不方便,如果能够有种方法帮忙我们的程序,能够自动地不断重覆的话,就可更加满足操作上的需求了。
在程序设计时,为了使程序能够不断地重覆执行某些动作,通常是使用 Loop (循环)。循环是一种程序结构,可以帮助你控制程序。在本小节中,我们先来了解如何使用 While Loop。
因为Loop是一种程序的结构,所以记得是要在 Block Diagram 中建立。While Loop 的位置是在 Function Palette >> Programming >> Structures 内,使用鼠标点选 While Loop 元件后,再到 Block Diagram 拖曳画出一个循环:
接着你就会看到像下图一样的物件,请注意 Condition Node 是用来控制循环是否执行的脚位,当你输入 False 时,循环就会执行,直到输入为 True 的时候,循环才会停止;而 Iteration Node 是一个 Numeric 的输出型态,该数值会随着循环执行的次数而累加,所以可以由 Iteration Node 来得知目前循环已执行的次数,但要记得计数是由 0 开始算的喔!也就是循环第一次跑的时候,Iteration Node 的输出值是 0。
现在你已经学会了如何建立 While Loop,接着我们只要将刚刚的温度量测程序放在循环当中,就可以让程序自动重覆地进行温度量测囉。
While Loop 预设是使用 True 来让循环停止,但也可以设成输入 False 让循环停止,改变的方式就是在 Condition Node 上按右键选择 Continue if True,接着 Condition Node 就会变成循环箭头的符号。所以当你输入 True 时,循环才会继续执行,刚好跟预设的方式 (Stop if True) 相反。
现在你已经知道如何使用循环结构来帮助你的程序重覆执行,但是循环在使用上还是有很多容易犯的小错误,象是资料流入、出循环时的特性等。现在先将刚刚的程序稍微修改一下,然后我们再来分析修改后的程序。
请先看到下面修改后的程序。我把烤箱温度和警示灯都放在循环外面了,执行起来会有什么差别吗?
上图的程序在执行时,循环中并无法得知烤箱 "实时" 的温度,亦无法立即显示警示灯,这是一个设计错误的程序!
这是一个刚使用循环时很容易发生的错误观念,就是未分清物件放在循环里面和外面的差别;所以这边跟大家分享一个口诀以帮助厘清如何使用循环,就是「Input 未到齐前,循环不会执行;循环未停止前,Output 不会输出」。我们再回到刚刚修改后的程序,你有没有发现,左边橘色的端点对于循环是输入点,而右边绿色的端点则是循环的输出。由上段说明文字可得知,当循环在执行时,代表着烤箱温度已经输入到循环中,而循环执行的过程中,并不会再去读 Input 端点的资料;另外,因为警示灯放置于循环外,也就是一个 Output 端点,所以循环内的程序并无法将实时的警示灯号送到循环外头,除非循环执行完毕而送出最后的资料出循环。如果看到这里还不是很清楚,建议可以开启执行状态显示钮 (Highlight Execution) 同步看程序的执行顺序,并比较这两个情况,就可以更清楚物件放在循环内与循环外的差别囉!
学习学习,谢谢小编!