新聞中心

EEPW首頁 > 牛人業話 > 瑞彩祥云

瑞彩祥云

作者:驢三時間:2019-08-12來源:電子産品世界收藏

《請回答1988》第一集就讓我這個三十多歲的肥膩中年男哭了個稀裏嘩啦,在普通而瑣碎的日常生活裏,母子之間、父女之間那種似淡卻濃、連綿不絕的親情總會在不經意間戳中爲人父母/爲人子女的淚點。這種感情的質地亘千年而不變,表達的形式則曆萬古而常新。古有孟母三遷的美談,現有幼兒園門口的親子大戰。

本文引用地址:/article/201908/403636.htm

上班路過幼兒園門口,經常看到娃娃和媽媽們相愛相殺的一幕。有的抱著媽媽的大腿,攤在地上撕心裂肺地哭喊,有的拽著媽媽的胳膊,上氣不接下氣地邊哭邊講條件。媽媽們的表現倒出奇的一致,一副雖九死而尤未悔的慨然,怒目相向,橫眉冷對。

大多數孩子體力不濟,打不了持久戰,于是乖乖就範,耷拉著小腦袋一步三回頭,在媽媽們志得意滿的目光中走向幼兒園。但是,在這種敵我雙方力量懸殊的戰局中,偶有那種意志堅定的小戰士,始終滿懷著敢叫日月換新天的豪情,雖千萬人吾往矣地宣告著自己的價值主張-玩、在家玩。

這種戰略相持的場面並不多見,每每目睹,不以爲怪。直到有一次,我突然對堅持抵抗的小戰士充滿了深深的景仰之情:意志這麽堅定,肯定是個幹工程師的好苗子。

1

老衲之所以感慨萬端,自然是因爲工作上遇到了難以克服的挑戰。在解決的過程中,屢屢感到自己意志不堅,想當逃兵離開這迷離的火線。

老衲開發的一款工控産品中有一個異常電壓保護功能,當外部供電電壓異常時需要關斷所有輸出,當供電電壓回到正常範圍時恢複所有輸出。

這個功能乍看起來有些簡單,有經驗的工程師肯定已經在腦海裏想好了解決方案:

設定供電電壓的正常範圍上下限,用ADC周期性地檢測外部供電電壓並周期性地判斷。設置判斷電壓異常的周期計時次數N,當供電電壓持續低于下限或者持續高于上限一定次數(N)的周期時,關斷當前正在導通狀態下的所有輸出。當供電電壓持續處于正常區間(N個ADC檢測周期)時,根據産品的功能,控制輸出的開通和關斷。

悲催的老衲最初就是這麽幹的,但是很快,老衲就意識到這種方法蠢笨至極,根本實現不了異常電壓保護。

原因無他,輸出太多爾,控制太複雜爾!

1565586635995992.jpg

這款工控産品的輸出通道高達30多路,每路輸出都需要單獨控制,而且有的通道互有關聯。輸入信號則來自多路傳感器、RS485總線、zigbee。控制輸出時,主要是根據輸入信號、産品內部狀態,按照一定的開通或關斷。

输入输出信號繁多,控制邏輯错综复杂,以至于那个“想当然”的解决方案根本实现不了。

拍一拍腦袋想想吧。假設供電電壓異常時,有15路輸出處于開通狀態。經過N個檢測周期發現電壓始終異常,于是乎把這15路通通關斷。

咔咔咔,猶如抽刀砍西瓜,一刀剖去,紅瓤黑子分明俨然,那真叫一個不亦快哉!

可是且慢,“快哉”了之後呢?現在供電電壓恢複正常了,您這15路通道怎麽恢複之前的開通狀態?

2

傻眼了吧?不管你們傻不傻,反正我當時就傻眼了!

1565586651355442.jpg

關斷總是容易,但是恢複太難。就好像把房子推倒容易,再建起來很難一樣。

老衲得承認,剛開始盡管傻了眼,但是我並沒有開竅。我傻傻地爲這30多路輸出定義了30多個狀態變量,“不亦快哉”之前先統計處于導通狀態的通道,“快哉”之後需要恢複時,再把處于導通狀態的一一恢複。

可是,在导通状态的恢复程序中,仍然需要面对30多路输出。每一路输出都有自己的控制邏輯,在控制邏輯里既要看输入信號,还要看内部状态。而且有的输出还比较膈应人,它可以被好几个输入信號同时控制,最终处于什么状态要看这些输入信號之间的。就是說,不僅要看信號的當前狀態,還要看它的曆史狀態!

从理论上来讲,硬扛不是不可以。一共30多路,余生还长,鼓起勇气一路一路来呗。程序上电运行后,将各个输入信號的历史状态、先后次序都存储下来,并实时更新。在异常电压关断保护之后的恢复程序子分支中,再把每一路的控制邏輯都重写一遍。

從實踐上來看,這種方案簡直笨的離譜。老衲花了半天功夫,弄了一路輸出之後,測試了一番,發現這一路也沒有恢複對。

这路输出有四种控制邏輯,可以通过zigbee信號控制,输出形式是常开,通过RS485控制,则应该是闪烁,通过一个傳感器控制,则应该是频率更低的闪烁,也可以通过一个本地开罐直接开通或者关断。这四种信號的是最簡單的那種:最後出現的信號說了算。這裏沒有恢複對,顯然是因爲我先前存儲曆史狀態時,把這些信號的先後次序搞亂了,但是信號這麽多,程序搞得這麽亂,出錯也是理所當然。

剛弄了一路還沒弄對,關鍵是還有那麽多路,我滴個乖乖,這豈止一個麻煩了得!

想通了這一點之後,老衲的意志在一刹那間崩潰了。

崩地那麽猝不及防,以至于很長一段時間,我都深陷在椅子上,“關斷”了自己的大腦輸出,再也不想恢複。

3

魯迅先生說,這世上本沒有路,走的人多了,自然就有了路。

在被幼兒園的小戰士重新鼓舞了鬥志之後,老衲的“小我”在腦海裏左沖右突,尋找晦暗的出路。

显然,必须让输出通道的恢复邏輯和平时的控制邏輯有所区隔,才能从那么繁复的控制网络中解放出来。

古龍說過:最高明的招數就是沒有招數,以無招勝有招。金剛經曰:菩薩無我相,無人相,無衆生相,無壽者相,方能成道。

那么,最高明的恢复邏輯就是没有任何邏輯,让这三十多路输出通道恢复时不遵从任何邏輯,不就是最为高妙的“邏輯”吗?

很快,我就順著佛陀的開示思路開展了下去。

大路千萬條,最妙的是老衲這一條。我只需要在MCU的輸出控制端口上做文章,當電壓異常時禁能MCU端口的輸出功能,電壓恢複正常時恢複MCU端口的輸出功能,就整齊劃一、簡明有力地實現了異常電壓下的輸出保護、正常電壓下的輸出恢複。

管它電壓異常時處于導通狀態還是關斷狀態,管它的控制信號狀態如何,諸信號間的如何,通通不重要。關斷保護前是導通狀態,禁能了MCU的輸出就自動起到了輸出保護作用,恢複時也能自動恢複導通狀態。關斷保護前是關斷狀態,禁能MCU的輸出後還是處于關斷狀態,相當于做了個“雙保險”,恢複時還是自動恢複關斷狀態!

老衲再一次被自己的佛学素养惊呆了。只有不遵从任何产品功能上的邏輯,才是最为简洁的邏輯,更为关键的一点是,这种实现方案还能被应用在其它任何产品的异常电压保护上。

誰說工程師學佛沒用來著?

1565586670807786.jpg

4

以這種近乎離奇的方式實現了異常電壓保護功能之後,一直善于內省的老衲又開始“向內尋求”,總結經驗教訓了。

在技術問題上,首先還是要克服畏難心理,把畏戰怯戰情緒盡量壓制住。靠動腦袋解決的事兒,必須先鼓足了心勁,堅定意志,好好地把腦袋磨尖,才能在技術上深入地向下鑽。

其次,人的思路总是有自己的局限性。就像老衲在这里把思路局限在产品的功能邏輯上一样,像是蒙了眼的驴一样,来回地兜圈子。殊不知,跳出这局限,还广有一番洞天。

說到底,還是破除“執著”。真正的高手,解決問題時從來不局限在兵器上,刀槍劍戟斧钺鈎叉,哪個趁手用哪個。也不局限在一招一式上,縱橫捭阖如行雲流水。只靠三板斧的笨功夫,在工程師這條道路上只會越走越窄。

思路上盡量開闊,不要粘滯在一隅。在這上面,我們還是要取法自然,多看看荷塘裏盛開的荷花和蓮葉,多看看挂在天邊的月亮。仔細體會體會這兩句明言:猶如蓮花不著水,亦如日月不住空!

水珠在蓮葉上滾來滾去,絲毫也不粘滯。彎彎的月亮挂在天邊,但是我們能明顯地體會到它並沒有“住”在虛空裏。

這對我們工程師,不正是很好的啓發嗎?多說無益,望諸君善思之!



關鍵詞: 優先級 邏輯

評論


相關推薦

技術專區

關閉