我算是一個比較喜歡多樣化生活的人吧,有寫六層電梯程序這個想法的時候是在去年的暑假,那個時候,剛剛用PLC做了四層電梯,感覺很HIGH,手一癢癢就想試著寫六層電梯試試看,但是六層電梯終歸比四層電梯復雜,之前做個一個計算,貌似五層及其以上的電梯程序就會跟四層及其以下的電梯程序區分開來。因為到了五層的時候就會有優先級判斷,電梯運行過程中還需要自鎖和互鎖。那個時候用PLC,但是終歸因為自己想象力不夠奇葩而慘敗。后又想,如果用C寫的話肯定會比PLC容易好多了。結果就沒再怎么想,一頭扎進了單片機創作中。
自從用單片機寫六層電梯,也是寫了好多遍了。我剛開始的想法是用數組存儲數據,附加判斷,然后對數組內數據做處理,后來仔細想了一下,覺得這樣做對于單片機來說工作量好大,仔細算下來,單片機的大部分時間都是在處理數組內的數據,而且這樣也比較麻煩。后來就這事兒在吃飯的時候問了毛毛,想讓他給提點兒什么比較好的建議。誰知道那丫比我還奇葩,給我想出了一個循環優先級的方法。這個方法在當時看來確實是無可挑剔,剩下的時間我就開始做。剛開始在開發板上實驗,但是開發板上的固件都是死的,用著很不方便,不過還好,勉強把程序寫出來了。后來又做了個protues仿真,發現顯示竟然有問題。這個讓我很糾結。人家都說軟件仿真有誤差,不管你們信不信,我是信了。
前段時間有了時間和心情,自己做了個電路板,可恨的是買了個ISP下載線竟然死活下不進程序,白白花了20大洋么?我覺得不至于吧,應該還是硬件有點兒問題的。這樣沒辦法就只能用開發板上的單片機咯,每次調試的時候都要來來回回的拔下、插上、拔下、插上······其實我倒是不怕麻煩,關鍵是單片機引腳來來回回折騰這么幾次,差不多都廢了············
調試好了程序在電路板上實驗,這個時候才發現當初毛毛給我說的循環優先級的方法有多大的問題了,按照他的想法,順時針循環,電梯在運行的時候,總是會先執行高樓層數據,低樓層數據在高樓層數據沒有處理完的時候是不會執行。這樣來說問題就很大了呀。更郁悶的是有的時候電梯竟然會卡死不動?戳死习胩斐绦,也懶得找這方面原因了。
然后,我就想在這個程序基礎上做一些改變,試試看能不能行的通。也就是在今天,也就是在一個小時以前,測試結果讓我狂喜之后淋了一盆狗血。 程序中我加了互鎖,這樣避免了之前的卡死。但是因為還是只是用了簡單的優先級判斷(我用這個方法就是想試試這個方法到底行不行得通),程序在執行過程中因為程序的前后位置有差異,會導致電梯在運行過程中有一個優先級,這個是沒辦法避免的。記得之前用PLC做四層電梯和自動洗衣機的時候也遇到過這種問題。如果不牽涉數據重組,這個還是很容易處理。但是六層電梯數據繁多,靠條換程序的位置是沒辦法來解決這個問題的。這個時候我的心情呢???唉~不知該怎么形容了。說不高心,但是總算用親身經歷證明了五層及其一以上的電梯都需要用數組的方法來做了,簡單的與或非判斷行不通。但是你要說我高興???我心里還真的猶如打碎了五味瓶。
我總是用失敗來詮釋真理,我覺得這樣會讓我受益終生吧。不過任何事物都是有代價,還好這個代價不大。
同時呢,為了那些個看官們的方便,也為了讓你們看到我真正的親身的教訓,經過前思后想,覺得還是把源程序附上得好。再次警告那些個孩紙們:老夫我用m+n次的失敗告訴了你們,簡單的與或非優先級判斷在六層電梯(抑或是五層及其以上電梯吧)上是行不通的。六層電梯還是需要數組存儲數據+判斷處理。如果孩紙你不信,那你也可以花上幾個小時或幾天或幾個月 來自己親身證實一下吧!
唉~撤了!! [upload=c,1-1.c]viewFile.asp?ID=1487[/upload]
|