labview的深入探索-----狀態(tài)機的基本概念
狀態(tài)機不是LABVIEW獨有的概念,早在LABVIEW誕生之前,就有了狀態(tài)機(STATE MACHINE)的概念,只所以在LABVIEW編程中經(jīng)常強調(diào)狀態(tài)機是因為LABVIEW特有的圖形編程方式特別適合于采用狀態(tài)機模式編程,在PLC中有流程圖的編程方式,從本質(zhì)上說,那是一種特殊的狀態(tài)機。
STATE MACHINE包括三個基本要件,STATE、EVENT 、ACTION,狀態(tài)、事件和動作
狀態(tài):是一個抽象的概念在一定條件下或者一定時間內(nèi)保持不變,等待一個或幾個事件的發(fā)生,命名狀態(tài)時,往往可以用等待--來定義。
事件:是一個瞬時的概念,表示某件事情發(fā)生了,一旦有關(guān)的事件發(fā)生了,勢必要采取某種動作。
動作:表示一旦事件發(fā)生,采取何種處理方式,處理的結(jié)果就是另一個穩(wěn)定的狀態(tài)。
狀態(tài)(等待事件)---》事件發(fā)生----》采取動作----》另一個狀態(tài)。
狀態(tài)機的概念是非常簡單的,越是簡單的東西越不容易處理,原因是簡單則限制少,則靈活,狀態(tài)機設(shè)計的好壞完全取決于編程者的水平,這不僅僅指LABVIEW編程的水平,更重要的是編程者的邏輯思維,一個好的狀態(tài)機的設(shè)計,關(guān)鍵是如何定義狀態(tài),狀態(tài)少了,則意味著每一個狀態(tài)中要處理的事務(wù)多了,狀態(tài)多了,則整個狀態(tài)機就變的復(fù)雜了。
以一個簡單的紅綠燈控制來說,簡單地說有兩個狀態(tài),紅色狀態(tài)和綠色狀態(tài),事件是綠燈時間到和紅燈時間到,綠色時間到觸發(fā)的動作是,綠色燈滅,紅色燈量,紅色時間到觸發(fā)的動作是紅色滅,綠燈量。
我過去的文章中多次提到ACTION ENGINE的概念,它與狀態(tài)機的區(qū)別是,它僅僅定義了ACTION,而沒有定義STATE和EVENT,因此,它的ACTION完全取決于編程者,而狀態(tài)機自己本身就可以根據(jù)內(nèi)部或者外部條件的變化,自動采取相應(yīng)的動作,轉(zhuǎn)入其它的狀態(tài),實現(xiàn)控制自動化。
有多種形式的STATE MACHINE,我將在后續(xù)的文章中陸續(xù)介紹,先看一下紅綠燈的實現(xiàn)過程,假如綠燈亮20秒,紅燈亮10秒。
先定義三個基本狀態(tài):初始化(僅在第一次調(diào)用時發(fā)生),等待綠燈結(jié)束和等待紅燈結(jié)束。
LABVIEW的嚴格枚舉數(shù)據(jù)類型是LABVIEW狀態(tài)機定義狀態(tài)的最好工具,使用狀態(tài)機時,必須要使用這種數(shù)據(jù)類型,好處是增加或者減少狀態(tài),程序可以自動更新。