一關於狀態機器的認識
最近我正在重新認識狀態機器的一些內容,這個東西很重要至少目前我知道無論是在硬體和軟體上面都有狀態機器這個東西,而在控制上現代控制理論裡也有狀態方程的概念,並且幾乎是現代控制理論的基石,另外運動控制理論裡運動群的概念其本質上也是狀態機器。
對於軟體還有控制方面我多多少少都知道一些,可是非常可惜的是到底什麼是狀態機器,硬體,軟體及控制上側重點都不一樣,做運動控制軟體理解狀態機器甚至比理解物件導向還要重要,為什麼要這樣說,做過運動控制的估計都見過PLC的梯形圖程式,有多少人意識到這個橫行運動控制領域幾十年的東西是個狀態機器,呵呵又多少人能意識到,狀態機器曾被很多軟體人員看成比較玄奧的東西,中國竟然有那麼多人在天天從事著基於狀態機器的開發工作,呵呵又有多少人曾經想過,很多人都認為比較簡單的PLC梯形圖程式,為什麼能完成運動控制裡大部分的應用(認為梯形圖程式簡單的不包括我),估計意識到那是基於狀態機器編程的人不多。
很多人都認為狀態機器是理論上的東西,離我們比較遠,其實我想說的是,不是那樣的。我們幾乎每個人天天都在用狀態機器,生活當中你有取捨嘛!呵呵如果你有的話,有可能你就通過狀態機器進行選擇呢。或許我認為這句話並不過分,這個世界有可能是基於對象的,但是這個世界的運動絕對是基於狀態的,我們做了這麼多年的程式。世界是由模組構成的,而描述模組的變化應當是狀態。狀態機器不但能做演算法,還能做架構。我最近正在看LUA的源碼,可惜我幾乎就LUA一提出狀態機器,大家就認為和詞法分析有關。其實不是這樣的。
我所找到的狀態機器的定義是下面這個(有限狀態機器):
我的第一個問題:什麼是狀態機器?
FSM 定義:總的來說,有限狀態機器系統,是指在不同階段會呈現出不同的運行狀態的系統,這些狀態是有限的、不重疊的。這樣的系統在某一時刻一定會處於其所有狀態中的一個狀態,此時它接收一部分允許的輸入,產生一部分可能的響應,並且遷移到一部分可能的狀態。
五個要素:狀態,事件,條件,動作,遷移
這個是純軟體的定義,或者我認為這個概念太籠統,控制上狀態並不是離散的,所以有限狀態機器並不能和控制上的狀態機器進行統一,至於無限狀態機器,我還沒有清楚的弄懂它的概念。
我的第二個問題:什麼是狀態?
上面的概念其實太籠統。
二怎麼基於狀態機器去做程式架構
我總結了一下過去我所見過的一些程式架構,其中LUA和OPENGL的程式架構,我確信他們是基於狀態機器的程式架構,PLC的後台肯定也是,還有就是我所見過的我所在行業內的一些軟體也是基於狀態機器的程式架構,另外很多協議的解析及產生原理,包括其設計也都是基於狀態機器的,不單單只有TCP/IP。誠然國內和國外在就狀態機器的認識上,國外比我們深刻的多。
有興趣的希望大家能一起學,多多交流,目前我主要是在看LUA的源碼,希望能通過它的源碼獲得一些啟示。至於運動控制上的狀態機器,是我必須要搞明白的,希望感興趣的大家能多多交流。目前就運動控制方面的狀態機器設計,倒是總結了一些東西但是很不成熟。