labview的深入探索-----狀態(tài)機的基本類型順序結(jié)構(gòu)
一、順序結(jié)構(gòu)
LV本身是有順序結(jié)構(gòu)的,而且有兩種方式,STACKED (堆疊)和FLAT FRAME(平鋪)。
順序結(jié)構(gòu)的狀態(tài)機更象是堆疊順序結(jié)構(gòu),不過二者的區(qū)別在于LV本身的順序結(jié)構(gòu)是強制的,無法中間退出的,而狀態(tài)機的順序結(jié)構(gòu)是采用的循環(huán)掃描的方式.我舉一個例子來說明一下:
一個加工零件的程序,過程如下:
等待啟動按鈕--->主軸啟動--->滑臺快進---->滑臺工作進給--->終點延時--->滑臺快速返回原位-------->等待啟動按鈕(下一次循環(huán))
這里的啟動按鈕可以是界面上的按鈕也可以是操作臺上的按鈕.用普通順序結(jié)構(gòu)應(yīng)該是(我們用平鋪更容易理解)
我們注意到,每個動作(FRAME)內(nèi)部都是一個循環(huán)結(jié)構(gòu),需要等待一定條件后,如果條件滿足,轉(zhuǎn)入下一個FRAME,我們沒有任何辦法改變它,比如我們有一個急停按鈕,則需要在每一個FRAME中檢測急停,如果急停生效,退出本FRAME,轉(zhuǎn)入下一個FRAME,依然要判斷急停,直到所有的FRAME都完成才能退出,
在這個過程中,外層循環(huán)需要所有動作完成后才執(zhí)行下一循環(huán),對它改造一下,就可以形成順序狀態(tài)機結(jié)構(gòu).
我曾經(jīng)提到過,嚴格類型的枚舉是狀態(tài)機的核心要素,我們先構(gòu)造一個嚴格類型的枚舉.枚舉變量有一個特點,當最后的元素執(zhí)行加一操作時返回第一個元素.
這個狀態(tài)機的功能和上面的順序結(jié)構(gòu)完成的功能是相同的,區(qū)別在于每個CASE不存在循環(huán)等待了,
整個循環(huán)過程都是在外層循環(huán)中實現(xiàn)的,外層循環(huán)不斷地更新,如果轉(zhuǎn)換條件(事件未發(fā)生),下一次循環(huán)仍然執(zhí)行前一個CASE(狀態(tài)不變),如果轉(zhuǎn)換條件滿足(事件發(fā)生),采取加一的動作(ACTION),轉(zhuǎn)入下一個狀態(tài).
這樣做和上面的順序結(jié)構(gòu)比較,好處是顯而易見的,整個過程只有一個循環(huán),而上面的順序結(jié)構(gòu)實際每個FRAME都是一個循環(huán),這樣,如果有急停按鈕,我們可以在CASE外面檢測急停,如果急停,可以馬上停止循環(huán),而在順序結(jié)構(gòu)中,需要在每個FRAME檢測,并逐個退出.
順序結(jié)構(gòu)的狀態(tài)機是非常簡單的,但是實際控制中又是比較常見的,后續(xù)我將介紹其他類型的狀態(tài)機
評論