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