文/宋炳雨 陳娜娜 何曉明 李峰
MBD,全稱為Model Based Design,即基于模型的設計。在汽車電子所屬的嵌入式軟件開發領域,MBD技術通常指采用圖形化建模并仿真,進而將模型自動生成代碼的技術。相比傳統嵌入式軟件開發方法,由于MBD技術具有需求可追溯、建模圖形化、自動生成代碼、快開發周期、方便并行開發等諸多特點,其近年來受到了越來多越多的重視。特別是基于Matlab/Simulink平臺的MBD嵌入式軟件開發方法,由于其應用廣泛,逐漸成為一種趨勢。
本文基于MBD開發方法與傳統開發方法對比,分析和研究MBD技術在汽車嵌入式軟件開發領域中的導入方法,以及要解決的一些關鍵問題。
如圖1所示,傳統嵌入式軟件開采用自上而下的瀑布式流程,即下階段工作開展依賴于上階段工作的完成情況,上階段工作為下階段工作提供基礎。這種開發流程一個顯而易見的問題,就是不允許并行開發,并且如果在某階段發現錯誤或需求變更,極有可能引起耗時較長的大規模軟件更新甚至整個軟件重寫,從而拉長項目周期,并為項目本身帶來諸多的不確定性。
其次,在傳統的開發手段中,在不同階段彼此之間傳遞的信息需要依賴文檔,例如需求分析報告、系統詳細設計規范、設計任務書、設計報告等。由于工程人員總會存在針對文字理解的二義性問題,因此即便是文檔本身沒有錯誤,可能也會由于理解上的誤差而引起系統設計、實現的錯誤。
基于MBD技術的嵌入式軟件開發采用V形開發流程。其中,V代表“Verification”和“Validation”,作為一套嚴謹完整的系統開發方法,其一般包含圖2所示幾個階段:
可以看出,V開發流程將軟件實現和軟件驗證進行了有效結合,軟件實現的各階段,均對應有相應的驗證環節。
V開發流程中,為避免文字說明的模糊性及理解性錯誤,詳細說明將采用模型方式,如用信號流圖的方式(Simulink模型)進行定義。 控制方案的設計也不再采用過去的那種先將對象模型簡化成手工可以處理的形式,再根據經驗進行手工設計的方式,而是用諸如MATLAB/SIMULINK等計算機輔助建模及分析軟件建立對象盡可能準確的模型,并進行離線仿真,從而避免了傳統設計過程中,對象過于簡化帶來的設計方案無法滿足實際對象要求的尷尬局面。
如圖3所示,基于MBD技術的嵌入式軟件開發方法(本文特指基于Matlab/Simulink,借助快速原型控制器進行MBD技術應用的開發方法),控制系統軟件開發過程大概分為以下幾個階段。
(1)需求分析;
(2)控制系統方案設計;
(3)快速原型開發;
(4)單元測試與驗證;
(5)系統集成測試與驗證;
(6)自動代碼生成;
(7)硬件在環仿真;
(8)臺架及實車測試。
基于MBD的嵌入式軟件開發在很多方面存在優勢,但目前對于絕大多數有應用需求的汽車電子企業或科研院所而言,卻是一種新的方法。而作為一種對新方法的嘗試,就必然會面臨如何融合和導入新方法的問題。

圖1:嵌入式系統傳統設計方法

圖2:V開發流程

圖3:基于MBD的嵌入式軟件開發過程
對于無傳統嵌入式軟件開發經驗,而僅希望定位于控制策略開發,且不希望關心控制器底層的使用者而言,選擇一款市場上成熟、功能完善的快速原型控制器進行項目開發,是一種較為普遍的做法。由于快速原型控制器本身即為基于Matlab/Simulink的快速原型開發提供了解決方案,因此使用者在使用時,不必關心控制器底層、手寫代碼及程序刷寫標定等問題。借助這種方式,使用者可以不再受傳統嵌入式軟件開發模式和方法的束縛,進而將精力完全放到應用軟件開發層面。該種開發方式,實現對控制策略的快速驗證的同時,也可以在很大程度上提高新產品的推出速度。
借助市場上現成的快速原型控制器進行產品開發,相比傳統的嵌入式軟件開發方式,優勢體現在諸多方面,但其局限性也顯而易見:由于快速原型控制器廠商在提供該類控制器產品時,會固化底層軟件和控制器功能,因此對于使用者而言,一定程度上會影響使用者在使用該產品時的靈活性。
對于有傳統嵌入式軟件開發經驗的使用者而言,引入MBD技術進行嵌入式軟件開發,優勢則顯得更為明顯。一方面,使用者可以靈活配置及定制底層代碼及功能,另一方面,借助MBD開發方法,將極大的提高產品開發效率,提升嵌入式軟件開發質量。這種開發方式,為ECU開發等復雜嵌入式軟件開發項目的高效、有序進行,提供了可能。
基于MBD技術進行嵌入式軟件開發,表面上看,僅需解決需求分析、快速原型開發,自動代碼生成、硬件在環仿真以及系統測試等有限幾個方面的問題。但實際要打通整個流程,并最終實現嵌入式軟件產品化,卻有很長的路需要走,很多問題需要解決。
需求管理包括需求分析、需求變更管理以及需求跟蹤幾個方面。雖然基于MBD的嵌入式軟件開發可以使用模型或信號流圖的形式進行系統輔助說明,在很大程度上避免傳統開發模式下單純文字描述(多為自然語言描述)的模糊性及二義性問題。但其和傳統開發模式一樣,在控制系統功能較為復雜的情況下,隨著項目工作的逐步推進,很容易出現需求管理混亂,以及需求和模型不匹配的問題,這時通常需要結合MBD的實際應用情況,考慮使用第三方工具(如doors)輔助進行需求管理。需求管理是一件非常重要但卻非常不容易做好的工作,在任何時候都應該引起足夠的重視。
出于并行開發和保證控制系統模型可讀性及可維護性的需要,在控制系統模型模型搭建過程中,我們通常會按功能將其劃分為若干不同的功能模塊(Unit level model),而不同模塊之間存在信號交互關系,因此就涉及到控制系統各單元模型輸入輸出信號管理問題。
理想情況下,下游模塊的輸入應該和上游模塊的輸出應該保持完全一致,否則,將為后期的基于快速原型控制器的模型集成等工作帶來很大的麻煩。但在項目開發過程中,由于需求變更而導致某些功能模塊輸入輸出發生變動的情況時有發生,在模塊眾多及負責人各不相同的情況下,如果缺乏一套完善的輸入輸出信號管理辦法,極易出現上下游信號名稱、數據類型等不匹配的現象,從而引起控制系統模型集成時的各種問題。
將控制策略用Simulink或Stateflow以建模的方式準確表達出來,這就是控制系統軟件建模。作為一種在業內使用最為廣泛且功能完善的建模、仿真工具,Matlab/Simulink為用戶提供了非常靈活的建模方式。因此,使用MATLAB/Simulink及Stateflow控制算法建模規范的重要性不言而喻,其是項目成功及團隊合作(既包括內部成員合作,也包括與其他外部成員及分包商之間的合作)的基礎。規范化模型是確保控制系統模型品質及一致性,以及使其具有良好可讀性及可維護性的前提條件。在控制系統研發過程具有多人分工的情況下,如何形成并貫徹執行好一套適宜的建模規范,成為一個必然要考慮的問題。
模型集成是指將各功能模塊按照既定的輸入輸出關系、任務優先級等進行集成,并使其實現既定功能的過程。由于當前市場上幾乎所有快速原型控制器都只支持單模型代碼生成,不支持多模型應用,因此模型集成是在項目后期必須要做的一項工作。
集成過程需要考慮模型接口、功能、任務優先級、以及集成模型穩定性等多個方面。準確完成接口集成是集成工作的基本要求以及接下來實現集成模型功能的前提條件,因此在集成過程中,要對各模塊間的輸入輸出關系以及輸入輸出信號屬性等引起足夠的重視。
另外,軟件版本管理是模型集成時必需考慮的另外一個問題,若沒有一套統一的軟件管理辦法,或在軟件集成中過程中未將軟件版本管理工作做好,則極易引起集成模型的混亂。
模型測試是檢驗模型是否滿足需求的手段,其和需求分析一樣,在V開發流程中起著非常重要的作用。通過基于需求的測試,最終可以達到驗證系統和確認產品的目的。
從測試方法角度,模型測試包括MIL(單元MIL測試及集成MIL測試)、HIL,PIL等多種測試手段,雖然幾種方法的測試重點各有不同,但卻是相互配合,層層遞進。通過這幾個階段模型測試,可查找出控制算法中可能存在的絕大多數問題。而之后的臺架測試,實車測試等,將進一步對控制系統模型驗證,最終使得控制算法最優并達到功能匹配需求的目的。
模型測試過程中,測試用例生成及其管理工作對于模型測試工作效率有著重要影響。理想情況下,研發團隊要針對當前控制系統軟件設計和不斷充實測試用例庫,并保證測試用例在不同測試階段具有可重用性,以最大程度的減少重復勞動,并為結果比對提供同一基礎。
另外,Simulink針對模型測試,設計有專門的V&V(Validation and Verification)工具箱,該工具箱可實現的主要功能包括建模標準檢查、覆蓋度測試、自動生成測試報告等,正確使用將為模型測試工作帶來極大方便。但要想使得這些工具真正發揮作用,研發人員還必須首先對這些工具箱獲取足夠了解,并針對研發團隊的實際情況完成工具定制。
作為嵌入式軟件開發的一種趨勢,基于模型的嵌入式軟件開發有著傳統開發方法諸多不可比擬的優勢,該方法不僅可以在很大程度上提高嵌入式軟件的開發速度,輔助其他方法及工具,還能大大提升控制系統嵌入式軟件的產品質量。掌握這種方法,將為提高企業研發實力及產品競爭力,提供巨大幫助。