文/宋炳雨 陳娜娜 何曉明 李峰
MBD,全稱為Model Based Design,即基于模型的設(shè)計。在汽車電子所屬的嵌入式軟件開發(fā)領(lǐng)域,MBD技術(shù)通常指采用圖形化建模并仿真,進而將模型自動生成代碼的技術(shù)。相比傳統(tǒng)嵌入式軟件開發(fā)方法,由于MBD技術(shù)具有需求可追溯、建模圖形化、自動生成代碼、快開發(fā)周期、方便并行開發(fā)等諸多特點,其近年來受到了越來多越多的重視。特別是基于Matlab/Simulink平臺的MBD嵌入式軟件開發(fā)方法,由于其應(yīng)用廣泛,逐漸成為一種趨勢。
本文基于MBD開發(fā)方法與傳統(tǒng)開發(fā)方法對比,分析和研究MBD技術(shù)在汽車嵌入式軟件開發(fā)領(lǐng)域中的導入方法,以及要解決的一些關(guān)鍵問題。
如圖1所示,傳統(tǒng)嵌入式軟件開采用自上而下的瀑布式流程,即下階段工作開展依賴于上階段工作的完成情況,上階段工作為下階段工作提供基礎(chǔ)。這種開發(fā)流程一個顯而易見的問題,就是不允許并行開發(fā),并且如果在某階段發(fā)現(xiàn)錯誤或需求變更,極有可能引起耗時較長的大規(guī)模軟件更新甚至整個軟件重寫,從而拉長項目周期,并為項目本身帶來諸多的不確定性。
其次,在傳統(tǒng)的開發(fā)手段中,在不同階段彼此之間傳遞的信息需要依賴文檔,例如需求分析報告、系統(tǒng)詳細設(shè)計規(guī)范、設(shè)計任務(wù)書、設(shè)計報告等。由于工程人員總會存在針對文字理解的二義性問題,因此即便是文檔本身沒有錯誤,可能也會由于理解上的誤差而引起系統(tǒng)設(shè)計、實現(xiàn)的錯誤。
基于MBD技術(shù)的嵌入式軟件開發(fā)采用V形開發(fā)流程。其中,V代表“Verification”和“Validation”,作為一套嚴謹完整的系統(tǒng)開發(fā)方法,其一般包含圖2所示幾個階段:
可以看出,V開發(fā)流程將軟件實現(xiàn)和軟件驗證進行了有效結(jié)合,軟件實現(xiàn)的各階段,均對應(yīng)有相應(yīng)的驗證環(huán)節(jié)。
V開發(fā)流程中,為避免文字說明的模糊性及理解性錯誤,詳細說明將采用模型方式,如用信號流圖的方式(Simulink模型)進行定義。 控制方案的設(shè)計也不再采用過去的那種先將對象模型簡化成手工可以處理的形式,再根據(jù)經(jīng)驗進行手工設(shè)計的方式,而是用諸如MATLAB/SIMULINK等計算機輔助建模及分析軟件建立對象盡可能準確的模型,并進行離線仿真,從而避免了傳統(tǒng)設(shè)計過程中,對象過于簡化帶來的設(shè)計方案無法滿足實際對象要求的尷尬局面。
如圖3所示,基于MBD技術(shù)的嵌入式軟件開發(fā)方法(本文特指基于Matlab/Simulink,借助快速原型控制器進行MBD技術(shù)應(yīng)用的開發(fā)方法),控制系統(tǒng)軟件開發(fā)過程大概分為以下幾個階段。
(1)需求分析;
(2)控制系統(tǒng)方案設(shè)計;
(3)快速原型開發(fā);
(4)單元測試與驗證;
(5)系統(tǒng)集成測試與驗證;
(6)自動代碼生成;
(7)硬件在環(huán)仿真;
(8)臺架及實車測試。
基于MBD的嵌入式軟件開發(fā)在很多方面存在優(yōu)勢,但目前對于絕大多數(shù)有應(yīng)用需求的汽車電子企業(yè)或科研院所而言,卻是一種新的方法。而作為一種對新方法的嘗試,就必然會面臨如何融合和導入新方法的問題。
圖1:嵌入式系統(tǒng)傳統(tǒng)設(shè)計方法
圖2:V開發(fā)流程
圖3:基于MBD的嵌入式軟件開發(fā)過程
對于無傳統(tǒng)嵌入式軟件開發(fā)經(jīng)驗,而僅希望定位于控制策略開發(fā),且不希望關(guān)心控制器底層的使用者而言,選擇一款市場上成熟、功能完善的快速原型控制器進行項目開發(fā),是一種較為普遍的做法。由于快速原型控制器本身即為基于Matlab/Simulink的快速原型開發(fā)提供了解決方案,因此使用者在使用時,不必關(guān)心控制器底層、手寫代碼及程序刷寫標定等問題。借助這種方式,使用者可以不再受傳統(tǒng)嵌入式軟件開發(fā)模式和方法的束縛,進而將精力完全放到應(yīng)用軟件開發(fā)層面。該種開發(fā)方式,實現(xiàn)對控制策略的快速驗證的同時,也可以在很大程度上提高新產(chǎn)品的推出速度。
借助市場上現(xiàn)成的快速原型控制器進行產(chǎn)品開發(fā),相比傳統(tǒng)的嵌入式軟件開發(fā)方式,優(yōu)勢體現(xiàn)在諸多方面,但其局限性也顯而易見:由于快速原型控制器廠商在提供該類控制器產(chǎn)品時,會固化底層軟件和控制器功能,因此對于使用者而言,一定程度上會影響使用者在使用該產(chǎn)品時的靈活性。
對于有傳統(tǒng)嵌入式軟件開發(fā)經(jīng)驗的使用者而言,引入MBD技術(shù)進行嵌入式軟件開發(fā),優(yōu)勢則顯得更為明顯。一方面,使用者可以靈活配置及定制底層代碼及功能,另一方面,借助MBD開發(fā)方法,將極大的提高產(chǎn)品開發(fā)效率,提升嵌入式軟件開發(fā)質(zhì)量。這種開發(fā)方式,為ECU開發(fā)等復雜嵌入式軟件開發(fā)項目的高效、有序進行,提供了可能。
基于MBD技術(shù)進行嵌入式軟件開發(fā),表面上看,僅需解決需求分析、快速原型開發(fā),自動代碼生成、硬件在環(huán)仿真以及系統(tǒng)測試等有限幾個方面的問題。但實際要打通整個流程,并最終實現(xiàn)嵌入式軟件產(chǎn)品化,卻有很長的路需要走,很多問題需要解決。
需求管理包括需求分析、需求變更管理以及需求跟蹤幾個方面。雖然基于MBD的嵌入式軟件開發(fā)可以使用模型或信號流圖的形式進行系統(tǒng)輔助說明,在很大程度上避免傳統(tǒng)開發(fā)模式下單純文字描述(多為自然語言描述)的模糊性及二義性問題。但其和傳統(tǒng)開發(fā)模式一樣,在控制系統(tǒng)功能較為復雜的情況下,隨著項目工作的逐步推進,很容易出現(xiàn)需求管理混亂,以及需求和模型不匹配的問題,這時通常需要結(jié)合MBD的實際應(yīng)用情況,考慮使用第三方工具(如doors)輔助進行需求管理。需求管理是一件非常重要但卻非常不容易做好的工作,在任何時候都應(yīng)該引起足夠的重視。
出于并行開發(fā)和保證控制系統(tǒng)模型可讀性及可維護性的需要,在控制系統(tǒng)模型模型搭建過程中,我們通常會按功能將其劃分為若干不同的功能模塊(Unit level model),而不同模塊之間存在信號交互關(guān)系,因此就涉及到控制系統(tǒng)各單元模型輸入輸出信號管理問題。
理想情況下,下游模塊的輸入應(yīng)該和上游模塊的輸出應(yīng)該保持完全一致,否則,將為后期的基于快速原型控制器的模型集成等工作帶來很大的麻煩。但在項目開發(fā)過程中,由于需求變更而導致某些功能模塊輸入輸出發(fā)生變動的情況時有發(fā)生,在模塊眾多及負責人各不相同的情況下,如果缺乏一套完善的輸入輸出信號管理辦法,極易出現(xiàn)上下游信號名稱、數(shù)據(jù)類型等不匹配的現(xiàn)象,從而引起控制系統(tǒng)模型集成時的各種問題。
將控制策略用Simulink或Stateflow以建模的方式準確表達出來,這就是控制系統(tǒng)軟件建模。作為一種在業(yè)內(nèi)使用最為廣泛且功能完善的建模、仿真工具,Matlab/Simulink為用戶提供了非常靈活的建模方式。因此,使用MATLAB/Simulink及Stateflow控制算法建模規(guī)范的重要性不言而喻,其是項目成功及團隊合作(既包括內(nèi)部成員合作,也包括與其他外部成員及分包商之間的合作)的基礎(chǔ)。規(guī)范化模型是確??刂葡到y(tǒng)模型品質(zhì)及一致性,以及使其具有良好可讀性及可維護性的前提條件。在控制系統(tǒng)研發(fā)過程具有多人分工的情況下,如何形成并貫徹執(zhí)行好一套適宜的建模規(guī)范,成為一個必然要考慮的問題。
模型集成是指將各功能模塊按照既定的輸入輸出關(guān)系、任務(wù)優(yōu)先級等進行集成,并使其實現(xiàn)既定功能的過程。由于當前市場上幾乎所有快速原型控制器都只支持單模型代碼生成,不支持多模型應(yīng)用,因此模型集成是在項目后期必須要做的一項工作。
集成過程需要考慮模型接口、功能、任務(wù)優(yōu)先級、以及集成模型穩(wěn)定性等多個方面。準確完成接口集成是集成工作的基本要求以及接下來實現(xiàn)集成模型功能的前提條件,因此在集成過程中,要對各模塊間的輸入輸出關(guān)系以及輸入輸出信號屬性等引起足夠的重視。
另外,軟件版本管理是模型集成時必需考慮的另外一個問題,若沒有一套統(tǒng)一的軟件管理辦法,或在軟件集成中過程中未將軟件版本管理工作做好,則極易引起集成模型的混亂。
模型測試是檢驗模型是否滿足需求的手段,其和需求分析一樣,在V開發(fā)流程中起著非常重要的作用。通過基于需求的測試,最終可以達到驗證系統(tǒng)和確認產(chǎn)品的目的。
從測試方法角度,模型測試包括MIL(單元MIL測試及集成MIL測試)、HIL,PIL等多種測試手段,雖然幾種方法的測試重點各有不同,但卻是相互配合,層層遞進。通過這幾個階段模型測試,可查找出控制算法中可能存在的絕大多數(shù)問題。而之后的臺架測試,實車測試等,將進一步對控制系統(tǒng)模型驗證,最終使得控制算法最優(yōu)并達到功能匹配需求的目的。
模型測試過程中,測試用例生成及其管理工作對于模型測試工作效率有著重要影響。理想情況下,研發(fā)團隊要針對當前控制系統(tǒng)軟件設(shè)計和不斷充實測試用例庫,并保證測試用例在不同測試階段具有可重用性,以最大程度的減少重復勞動,并為結(jié)果比對提供同一基礎(chǔ)。
另外,Simulink針對模型測試,設(shè)計有專門的V&V(Validation and Verification)工具箱,該工具箱可實現(xiàn)的主要功能包括建模標準檢查、覆蓋度測試、自動生成測試報告等,正確使用將為模型測試工作帶來極大方便。但要想使得這些工具真正發(fā)揮作用,研發(fā)人員還必須首先對這些工具箱獲取足夠了解,并針對研發(fā)團隊的實際情況完成工具定制。
作為嵌入式軟件開發(fā)的一種趨勢,基于模型的嵌入式軟件開發(fā)有著傳統(tǒng)開發(fā)方法諸多不可比擬的優(yōu)勢,該方法不僅可以在很大程度上提高嵌入式軟件的開發(fā)速度,輔助其他方法及工具,還能大大提升控制系統(tǒng)嵌入式軟件的產(chǎn)品質(zhì)量。掌握這種方法,將為提高企業(yè)研發(fā)實力及產(chǎn)品競爭力,提供巨大幫助。