我算是一个比较喜欢多样化生活的人吧,有写六层电梯程序这个想法的时候是在去年的暑假,那个时候,刚刚用PLC做了四层电梯,感觉很HIGH,手一痒痒就想试着写六层电梯试试看,但是六层电梯终归比四层电梯复杂,之前做个一个计算,貌似五层及其以上的电梯程序就会跟四层及其以下的电梯程序区分开来。因为到了五层的时候就会有优先级判断,电梯运行过程中还需要自锁和互锁。那个时候用PLC,但是终归因为自己想象力不够奇葩而惨败。后又想,如果用C写的话肯定会比PLC容易好多了。结果就没再怎么想,一头扎进了单片机创作中。
自从用单片机写六层电梯,也是写了好多遍了。我刚开始的想法是用数组存储数据,附加判断,然后对数组内数据做处理,后来仔细想了一下,觉得这样做对于单片机来说工作量好大,仔细算下来,单片机的大部分时间都是在处理数组内的数据,而且这样也比较麻烦。后来就这事儿在吃饭的时候问了毛毛,想让他给提点儿什么比较好的建议。谁知道那丫比我还奇葩,给我想出了一个循环优先级的方法。这个方法在当时看来确实是无可挑剔,剩下的时间我就开始做。刚开始在开发板上实验,但是开发板上的固件都是死的,用着很不方便,不过还好,勉强把程序写出来了。后来又做了个protues仿真,发现显示竟然有问题。这个让我很纠结。人家都说软件仿真有误差,不管你们信不信,我是信了。
前段时间有了时间和心情,自己做了个电路板,可恨的是买了个ISP下载线竟然死活下不进程序,白白花了20大洋么?我觉得不至于吧,应该还是硬件有点儿问题的。这样没办法就只能用开发板上的单片机咯,每次调试的时候都要来来回回的拔下、插上、拔下、插上······其实我倒是不怕麻烦,关键是单片机引脚来来回回折腾这么几次,差不多都废了············
调试好了程序在电路板上实验,这个时候才发现当初毛毛给我说的循环优先级的方法有多大的问题了,按照他的想法,顺时针循环,电梯在运行的时候,总是会先执行高楼层数据,低楼层数据在高楼层数据没有处理完的时候是不会执行。这样来说问题就很大了呀。更郁闷的是有的时候电梯竟然会卡死不动。看了老半天程序,也懒得找这方面原因了。
然后,我就想在这个程序基础上做一些改变,试试看能不能行的通。也就是在今天,也就是在一个小时以前,测试结果让我狂喜之后淋了一盆狗血。 程序中我加了互锁,这样避免了之前的卡死。但是因为还是只是用了简单的优先级判断(我用这个方法就是想试试这个方法到底行不行得通),程序在执行过程中因为程序的前后位置有差异,会导致电梯在运行过程中有一个优先级,这个是没办法避免的。记得之前用PLC做四层电梯和自动洗衣机的时候也遇到过这种问题。如果不牵涉数据重组,这个还是很容易处理。但是六层电梯数据繁多,靠条换程序的位置是没办法来解决这个问题的。这个时候我的心情呢???唉~不知该怎么形容了。说不高心,但是总算用亲身经历证明了五层及其一以上的电梯都需要用数组的方法来做了,简单的与或非判断行不通。但是你要说我高兴???我心里还真的犹如打碎了五味瓶。
我总是用失败来诠释真理,我觉得这样会让我受益终生吧。不过任何事物都是有代价,还好这个代价不大。
同时呢,为了那些个看官们的方便,也为了让你们看到我真正的亲身的教训,经过前思后想,觉得还是把源程序附上得好。再次警告那些个孩纸们:老夫我用m+n次的失败告诉了你们,简单的与或非优先级判断在六层电梯(抑或是五层及其以上电梯吧)上是行不通的。六层电梯还是需要数组存储数据+判断处理。如果孩纸你不信,那你也可以花上几个小时或几天或几个月 来自己亲身证实一下吧!
唉~撤了!!! [upload=c,1-1.c]viewFile.asp?ID=1487[/upload]
|