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