原创
LabVIEW中的死循环问题小结
2008-5-20 23:17
11983
11
11
分类:
测试测量
作为一名labview的初学者,在自己动手编写程序时,通常会遇到许多意想不到的情况,死循环便是其中之一.我刚学labview时,就经常出现这种情况,下面就我学labview中所遇到的这种情况作下小结.
Labview中的循环结构有for和while两种,其中for结构的循环次数是预先给定或者是可以确定的,而while循环则需要通过判断内部的条件节点来决定是否终止vi的运行. 出现死循环的情况一般都与使用这两种结构有关.这可以分为两种情况:一种是vi停在某一次循环上无限等待,导致了死循环的出现;另一种是vi循环无限进行下去,而不能控制其停止下来,这主要在while结构中出现,因为程序的设计问题使控制while停止的按钮失效. 先来说说后一种情况(如上图).由于循环结构在进入循环后将不再理会循环框外数据的变化,因此如果 停止 按钮第一次不能使循环停止的话,就会导致循环无限运行下去,形成死循环.故产生循环终止条件的数据源一定要放在循环框内. 再看下面的例子,它说明了当对话框与while循环一起使用时应注意的问题.如右所示的vi运行后将处于不断地询问状态, 停止 按钮在这里失去作用(此时只能通过任务管理器强行退出labview).造成这种死循环的原因就在于程序没有对 询问 函数的值作出处理.要使vi处于受控状态,就必须把询问函数的值与循环的条件端子联系起来. 下图便是解决办法之一,因此 对话框 与while循环一起使用时应该谨慎。 . 现在讲讲前一种出现死循环的例子. 上面 VI事件节点默认为无限等待状态,VI运行后,若不按下' 确定按钮 '触发事件,则第一次循环将运行在事件节点的无限等待之中,即本次循环永不会结束,前面板循环次数显示0,而且 停止 按钮无法使循环停止.这是因为按照 labview 数据流的思想 ,while 循环在每次循环过程中 , 只有当循环结构内的所有节点代码运行完毕 ( 即数据都到达有效 ) 后 , 才对本次循环是否停止做出判断 , 如果不停止 , 则执行下一次循环 ; 若停止 , 则结束整个循环退出 (for 循环类似 ). 上面VI的 停止 按钮之所以失效就是由于事件节点处于无限等待状态,相当于它的数据迟迟不能到达致使循环无法进入判断的缘故.而 下面 的VI事件节点设置为有限等待,并对超时作了处理,因而避免了上述问题.
文章评论(0条评论)
登录后参与讨论