你用的mcu漲價(jià)了,這還不是最壞的結(jié)果。過去20多年里芯片漲價(jià),半年后基本上都會緩和下來。今年不一樣,接近年底了,還沒有任何跡象表明明年何時(shí)恢復(fù)供應(yīng),很多企業(yè)損失慘重。
現(xiàn)在的情況是很多型號的mcu,原廠直接告訴你一句話“斷供”,有錢都買不到。資本同樣是逐利的,僅有的產(chǎn)能肯定轉(zhuǎn)做利潤更豐厚的芯片。
某些替代的芯片能買到,雖然無法完全兼容,但功能上可以實(shí)現(xiàn)100%替代,而切換平臺基本上等于重新開發(fā)和測試。
壞消息越來越多,市場傳言莫衷一是。轉(zhuǎn)換mcu的產(chǎn)品成了企業(yè)最大的危機(jī),不僅騰不出人員開發(fā)新產(chǎn)品,而且很有可能原產(chǎn)品軟件工程師已經(jīng)離職了,那怎么迭代維護(hù)升級呢?老板想哭都沒人理,但危機(jī)卻讓人更加懂得珍惜人才,而從某種意義上來說,關(guān)鍵還是創(chuàng)始人是否能夠從危機(jī)中看到未來的機(jī)會。
這次大缺貨的教訓(xùn),讓很多創(chuàng)始人意識到供應(yīng)鏈的重要性,深刻地認(rèn)識到一個(gè)樸素的道理,如何讓代碼高度復(fù)用?這是降低開發(fā)成本,快速應(yīng)對危機(jī)最有效的軟件開發(fā)管理策略。
雖然看起來都是軟件,但開發(fā)(電子產(chǎn)品的)嵌入式軟件和計(jì)算機(jī)軟件依然差別巨大。盡管IT技術(shù)高速發(fā)展了30多年,軟件開發(fā)技術(shù)已經(jīng)有了很大的進(jìn)步,但電子領(lǐng)域的專家與計(jì)算機(jī)軟件專家還是沒有很好地跨界整合,從而導(dǎo)致企業(yè)普遍缺乏科學(xué)的軟件工程技術(shù)管理方法。不僅軟件難以重用,而且擴(kuò)展和維護(hù)難度很大,長期以來開發(fā)成本居高不下。
從軟件開發(fā)來看,軟件工程與計(jì)算機(jī)科學(xué)(站在電子技術(shù)領(lǐng)域的角度來看,可以歸類為嵌入式計(jì)算機(jī)科學(xué))是完全不同的兩個(gè)領(lǐng)域的知識。其主要區(qū)別在于人,因?yàn)檐浖_發(fā)是以人為中心的過程。如果考慮人的因素,軟件工程更接近經(jīng)濟(jì)學(xué),而非計(jì)算機(jī)科學(xué),所以如果不改變思維方式,則很難開發(fā)出既好賣成本又低的好產(chǎn)品。
那到底如何才能實(shí)現(xiàn)軟件高度復(fù)用呢?其實(shí)計(jì)算的本質(zhì)和共性就是數(shù)據(jù)流(Flow),顯然數(shù)據(jù)存儲、數(shù)據(jù)傳輸……所以可以將各種軟件按照分類抽象為節(jié)點(diǎn)(代碼塊),通過AWFlow Design設(shè)計(jì)器實(shí)現(xiàn)拖拽式編程。如下圖所示,程序塊間通信如同水流管道,每個(gè)程序塊間的關(guān)系一目了然。尤其是虛擬設(shè)備接口,已經(jīng)不是單個(gè)設(shè)備的業(yè)邏輯軟件開發(fā),而是設(shè)備與設(shè)備之間的軟件開發(fā),而是整個(gè)系統(tǒng)與網(wǎng)絡(luò)的軟件開發(fā),真正實(shí)現(xiàn)物與物之間的Flow開發(fā)。
節(jié)點(diǎn)的連接軟件,通常稱為業(yè)務(wù)邏輯軟件,既可以使用廣州致遠(yuǎn)電子定義的fscript腳本編程,更方便的使用AWBlock積木式圖形化卡盒設(shè)計(jì)器編程,如同少兒編程軟件Google的Blockly、微軟的MakeCode那樣編程,而AWBlock是廣州致遠(yuǎn)電子使用c語言設(shè)計(jì)的,可以直接運(yùn)行在各種mcu上的軟件設(shè)計(jì)器,因此AWBlock開發(fā)方式結(jié)束了多變的用戶需求問題。
說句實(shí)在話,再豐富的節(jié)點(diǎn)、組件資源,也無法滿足所有的應(yīng)用場景和用戶需求,不可避免地會出現(xiàn)用戶定制化的內(nèi)容。無休止地投入研發(fā)資源定制開發(fā)成本極高,這是不現(xiàn)實(shí)的。而由用戶自行二次開發(fā),無論是底層的C/C++開發(fā),或是Lua、JS、Python等通過腳本語言開發(fā),甚至是將業(yè)務(wù)收縮,僅保留行業(yè)相關(guān)配置,比如,AT命令、運(yùn)動控制命令等,學(xué)習(xí)這些知識始終是有門檻,需要有較強(qiáng)的專業(yè)背景。
AWBlock拼圖式軟件開發(fā),無需懂得相關(guān)的軟件知識,開發(fā)者可以將自己想要表達(dá)的內(nèi)容和想法,很自然地通過AWBlock描述出來。
當(dāng)將這些軟件都集成在一起時(shí),就是EsDA嵌入式軟件設(shè)計(jì)自動化工具,還包括AWorksLP(或Linux等操作系統(tǒng))、AWTK圖形用戶界面和ZWS PaaS IoT云服務(wù)。
EsDA可以使應(yīng)用程序框架變得非常清晰,徹底解決程序塊間通信容易混亂的現(xiàn)象,而且也能解決狀態(tài)機(jī)復(fù)雜的狀態(tài)管理和事件處理。
下面示例的流圖實(shí)現(xiàn)了一個(gè)Modbus-RTU與MQTT之間的一個(gè)協(xié)議轉(zhuǎn)換應(yīng)用,其中主要分為兩條數(shù)據(jù)流。
Modbus至MQTT
modbus_master_poll:Modbus主機(jī)輪詢節(jié)點(diǎn),該節(jié)點(diǎn)運(yùn)行Modbus主棧功能,可添加多個(gè)目標(biāo)從設(shè)備,以及每個(gè)從設(shè)備所需要輪詢讀取的寄存器。節(jié)點(diǎn)根據(jù)配置參數(shù),周期性讀取所管理的從設(shè)備寄存器值,并傳遞至fscript處理節(jié)點(diǎn)。
fscript:腳本節(jié)點(diǎn),將modbus寄存器數(shù)據(jù)轉(zhuǎn)換成MQTT數(shù)據(jù)定制化邊緣計(jì)算(對數(shù)據(jù)進(jìn)行相關(guān)計(jì)算和封裝處理)。
mqtt_out:MQTT上報(bào)節(jié)點(diǎn),將數(shù)據(jù)上傳至用戶指定的云服務(wù)器。
MQTT至Modbus
mqtt_in:MQTT下行節(jié)點(diǎn),監(jiān)聽并接收云端請求,并將請求消息傳遞至fscript處理節(jié)點(diǎn)。
fscript:腳本節(jié)點(diǎn)將MQTT命令轉(zhuǎn)換成對應(yīng)Modbus從機(jī)寄存器值定制化業(yè)務(wù)邏輯(如可組合多個(gè)命令觸發(fā)系統(tǒng)事件等)。
modbus_master_out:Modbus主棧從機(jī)寄存器修改節(jié)點(diǎn),負(fù)責(zé)上級節(jié)點(diǎn)傳遞的寄存器值寫入到對應(yīng)從機(jī)設(shè)備中。
modbus_master_out 、modbus_master_poll均為本地自定義的非云端庫的節(jié)點(diǎn),紫色代表本地加載節(jié)點(diǎn)。aw-flow節(jié)點(diǎn)庫已有可用的Modbus主棧節(jié)點(diǎn),由于已有的節(jié)點(diǎn)設(shè)計(jì)適用于從機(jī)數(shù)量和寄存器數(shù)量固定不變的情況,當(dāng)從機(jī)設(shè)備或?qū)?yīng)寄存器數(shù)量發(fā)生變化時(shí),需要重新拖拽相關(guān)節(jié)點(diǎn)才能實(shí)現(xiàn)。而在此應(yīng)用中,從機(jī)設(shè)備和每個(gè)從機(jī)寄存器的數(shù)量是可變的,所以當(dāng)前節(jié)點(diǎn)并不適用,需要一個(gè)可以支持設(shè)備和寄存器數(shù)量動態(tài)變化的節(jié)點(diǎn)。基于此,需要將這樣的Modbus應(yīng)用場景,重新抽象為一個(gè)新節(jié)點(diǎn),但該節(jié)點(diǎn)與原節(jié)點(diǎn)并不沖突,適合相應(yīng)場景的另一種形式,同樣是通用Modbus應(yīng)用節(jié)點(diǎn)。后續(xù)可以標(biāo)準(zhǔn)化,添加到節(jié)點(diǎn)庫中。
EsDA的開發(fā)始于2006年,自始至終圍繞 “幫助用戶解決非核心域的問題,讓用戶專注于自身產(chǎn)品核心域的算法、行業(yè)需求、用戶體驗(yàn)、市場營銷、工藝創(chuàng)新和生產(chǎn)制造”的思路而展開的,因?yàn)樗信c底層相關(guān)的差異化軟件,以及各種通信協(xié)議等軟件的開發(fā),則是我們的核心域。
在產(chǎn)品開發(fā)中,如果你是一個(gè)有很多好的idea,且熱衷于創(chuàng)造的人。但又由于缺乏更專業(yè)的軟件開發(fā)功能,可能一時(shí)難以編寫復(fù)雜的軟件代碼,最終無法將自己的想法轉(zhuǎn)變成現(xiàn)實(shí),那么選擇EsDA則是最佳的捷徑。
回頭再來看硬件設(shè)計(jì)存在的問題,一個(gè)簡單電路的器件,通常來源于幾個(gè)不同的廠家。焊接到pcb,不僅占用加工時(shí)間,而且多個(gè)器件組合而成的電路,其可靠性具有很大的離散性,因此使用分立器件設(shè)計(jì)電路不如使用模塊。
顯然,需求一旦確定,則很容易幾個(gè)小時(shí)之內(nèi)焊接好原型機(jī)。如果空間不受限,則立即可以批量制造。我們設(shè)計(jì)了兩種底板,分別為8/12個(gè)擴(kuò)展槽,其中一個(gè)插電源模塊,另一個(gè)插通信模塊,其它的擴(kuò)展槽可以任意插入數(shù)字輸入輸出和模擬數(shù)據(jù)采集模塊。需要編程嗎?不需要!這是一個(gè)獨(dú)立的邊緣計(jì)算控制器。
邊緣計(jì)算芯片預(yù)置了通用代碼,通過配置即可實(shí)現(xiàn)所需要的功能。方法一是燒錄功能配置文件,方法二是通過主機(jī)發(fā)送命令綁定數(shù)據(jù),就可以配置為任意功能的控制器,比如,3路輸入、5路輸出、2路熱電偶溫度采集和1路4-20mA的接口,即可實(shí)現(xiàn)柔性化硬件設(shè)計(jì)和任意電路擴(kuò)展,從而極大地降低了設(shè)計(jì)成本。
企業(yè)在發(fā)展中,競爭是十分殘酷的,總會遇到重重困難和各種各樣的競爭者。比如,公司離職的員工會拉走你的人,和你做一樣的產(chǎn)品;也有競爭者模仿生產(chǎn)和你兼容的產(chǎn)品,他們采取低價(jià)銷售的方法和你爭奪客戶,怎么辦?人都是從青澀的年紀(jì)走向成熟的,多少都會有無奈的抱怨。但隨著時(shí)間的推移,很多人卻沒有被打倒,而是愈挫愈勇越做越好,是什么原因?成功者深刻地認(rèn)識到,困難是最好的恩人,對手是最好的老師。因?yàn)榉彩露加袑α⒚?,要有反對你的人,你才能將事情做得更好。如果你做什么都很順利,就很容易失敗。有人反對你,有人和你競爭,你?yīng)該感到高興,因?yàn)榻^好的機(jī)會來了。所以一定要知道,盡管對手能夠通過模仿加入競爭,卻無法偷到你明天的創(chuàng)新。因?yàn)樽詈玫姆烙褪沁M(jìn)攻,要敢于打破自己原有的優(yōu)勢形成新的優(yōu)勢,用開闊的胸懷看待世界,那世界慢慢就是你的。