康瑞航,王 毅,郝 飛,嚴(yán) 宇,劉 奇,張 旭
(陜西萬方汽車零部件有限公司,陜西 西安 710200)
車身控制器是重型汽車的重要零部件,直接影響到重型汽車燈具、油量檢測和燃油防盜邏輯、機(jī)油壓力和品質(zhì)判定檢測、差速鎖控制、雨刮控制、電源管理、信號轉(zhuǎn)發(fā)、掛車檢測以及參數(shù)標(biāo)定等功能要求。
以轉(zhuǎn)向燈程序為例:日間行車燈作為重型汽車上使用最頻繁使用的燈具。
在技術(shù)要求都明確后,進(jìn)行程序設(shè)計:設(shè)計程序時執(zhí)行不同功能需要設(shè)計不同的優(yōu)先級、使用比較頻繁就需要有即時和穩(wěn)定考慮故障檢測以及故障報警程序設(shè)計。為保證這些需求常規(guī)手寫代碼,分層程序設(shè)計需要至少三層的程序設(shè)計:底層用于驅(qū)動程序設(shè)計、中間層用于不同的功能邏輯程序設(shè)計和負(fù)載開段路診斷程序設(shè)計、頂層用作不同優(yōu)先級調(diào)用程序的設(shè)計。
如圖1 所示轉(zhuǎn)向燈程序列表,為左右兩側(cè)日間行車燈燈的控制程序。
圖1 某重型汽車的日間行車燈函數(shù)列表
如圖2 某重型汽車的部分轉(zhuǎn)向燈驅(qū)動原理圖通過控制VND5T035AKTR-E 芯片的INPUT(1/2)進(jìn)而控制OUT(1_x/2_x)輸出電平的高低來控制負(fù)載燈具的亮滅:
圖2 某重型汽車的部分日間行車驅(qū)動原理圖
底層驅(qū)動程序階段,根據(jù)功能的不同,以驅(qū)動芯片的輸入端為參數(shù),編寫底層驅(qū)動程序,當(dāng)打左轉(zhuǎn)型燈時,調(diào)用相應(yīng)端口為參數(shù)的底層驅(qū)動程序,完成底層程序的編寫和驗證后,需要完成底層程序的說明性文檔,以供應(yīng)用層調(diào)用時理解和以后測試的依據(jù)性文檔。
中間層程序階段,分兩部分功能邏輯程序,邏輯:點(diǎn)亮或關(guān)閉日間行車燈;診斷:通過周期性檢測工作時各個輸出端口的分壓電阻上的電壓值判斷負(fù)載狀態(tài),并將相應(yīng)標(biāo)志位置位。完成中間層程序的編寫和驗證后,需要完成中間層程序的說明性文檔,以及其他工程師調(diào)用時理解和以后測試的依據(jù)性文檔。
頂層間層程序階段,編寫調(diào)用程序,通過檢測各個開關(guān)狀態(tài)確定轉(zhuǎn)型燈的工作狀態(tài)。根據(jù)優(yōu)先級關(guān)系調(diào)用相應(yīng)功能程序完成相應(yīng)功能。完成頂層程序的編寫和驗證后,需要完成頂層程序的說明性文檔,以及其他工程師調(diào)用時理解和以后測試的依據(jù)性文檔。
最后,將各個層次程序統(tǒng)一放置在只含轉(zhuǎn)向燈程序的C文件中,通過main 函數(shù)中相應(yīng)周期時間執(zhí)行函數(shù)中調(diào)用頂層程序?qū)崿F(xiàn)相應(yīng)功能,并完成整個功能模塊程序的技術(shù)文檔。
基于Stateflow 模型代碼主要分為以下步驟,(1)需求分析;(2)系統(tǒng)規(guī)范;(3)子系統(tǒng)設(shè)計;(4)子系統(tǒng)實現(xiàn);(5)子系統(tǒng)集成和測試;(6)分系統(tǒng)集成和測試;(7)全系統(tǒng)集成和測試[1]。本例以日間行車燈模塊為例,在清楚需求后以Stateflow 狀態(tài)轉(zhuǎn)移為核心搭建相應(yīng)功能的邏輯模型。
如圖3 所示日間行車燈模型總體包含電源狀態(tài)、燈光開關(guān)狀態(tài)、點(diǎn)火開關(guān)狀態(tài)、日間行車燈負(fù)載診斷標(biāo)志位狀態(tài)作為輸入條件,日間行車燈命令為輸出動作。
圖3 日間行車燈模型總體
如圖4 所示日間行車燈模型內(nèi)部第一層狀態(tài)轉(zhuǎn)移圖展示了將燈光開關(guān)和鑰匙這兩個同一級輸入通過圖5 所示真值表為邏輯條件放在上框圖合二為一,和電源狀態(tài)以及診斷標(biāo)志狀態(tài)作為邏輯模塊的輸入條件[2]。
圖4 日間行車燈模型內(nèi)部第一層狀態(tài)轉(zhuǎn)移圖
圖5 上框圖內(nèi)部真值表
如圖6 所示為日間行車燈模型最內(nèi)層邏輯狀態(tài)圖,以輸入條件為狀態(tài)轉(zhuǎn)移條件,實現(xiàn)日間行車診斷和亮滅控制。
圖6 圖4下框圖內(nèi)部狀態(tài)轉(zhuǎn)移圖
完成模型搭建和模擬驗證,就可以進(jìn)行Stateflow Coder目標(biāo)編譯生成嵌入式C 代碼。
如圖7 所示在求解器(Solver)中設(shè)置步長為固定步長(Fixed-step)。
圖7 在參數(shù)設(shè)置框設(shè)置步長
如圖8 所示在參數(shù)設(shè)置框配置模型,設(shè)置目標(biāo)編譯器為ert.tlc->Embedded Codery 語言選擇為C,應(yīng)用并保存設(shè)置[3]。
圖8 在參數(shù)設(shè)置框配置模型
圖9 代碼生成報告框
在設(shè)置完所有參數(shù)、數(shù)據(jù)類型以及接口后,點(diǎn)擊代碼生成按鈕Build Model,生成需要的C 代碼,將生成的C 文件加載到嵌入式工程中,在功能函數(shù)調(diào)用部分調(diào)用相關(guān)調(diào)用自動生成的代碼即可完成相關(guān)邏輯。
對于代碼生成還可以通過設(shè)置Code Styleg 改變生成的代碼的風(fēng)格以及減少占用更少RAM。
(1)經(jīng)實驗驗證兩種方式的代碼都可以完美實現(xiàn)功能需求。
(2)Stateflow 自動生成代碼不需要再根據(jù)編寫每個環(huán)節(jié)的說明性文檔和測試文檔。
(3)Stateflow 自動生成的代碼可以在代碼生成報告中追溯每一段代碼對應(yīng)的模型。
(3)Stateflow 自動生成的代碼可以通過設(shè)置取消或者增加代碼的標(biāo)注,方便快捷。
(4)Stateflow 模型的每個階段都可以進(jìn)行仿真和驗證。
通過Stateflow 自動生成代碼技術(shù)和傳統(tǒng)手寫代碼對比,Stateflow 自動生成代碼技術(shù)具有以下優(yōu)勢:
(1)Stateflow 模型就是可執(zhí)行規(guī)范。在基于模型的系統(tǒng)設(shè)計過程中,所有過程遵循統(tǒng)一環(huán)境下的統(tǒng)一模型。由于模型能夠進(jìn)行仿真計算,因而在設(shè)計初期就可以針對設(shè)計思想進(jìn)行仿真驗證,這相當(dāng)于把測試手段從系統(tǒng)設(shè)計的初期就引入到整個設(shè)計流程中。作為規(guī)范的模型能夠通過執(zhí)行仿真來驗證自己的正確性,從而保證規(guī)范的正確性。
(2)連續(xù)不斷的測試和驗證。在整個基于模型的系統(tǒng)設(shè)計過程中,從設(shè)計初期就進(jìn)行離線的算法仿真測試,在產(chǎn)品實現(xiàn)之前通常還有完成快速原型仿真,軟件再回路仿真處理器再回路仿真燈步驟,從產(chǎn)品實現(xiàn)之后需要完成硬件再回路仿真,人在回路仿真等集成測試手段。這些測試都是基于前面開發(fā)的模型,即每個環(huán)節(jié)都引入了測試仿真手段。利用充分的仿真,可以考察系統(tǒng)不同組件對整個系統(tǒng)的影響。
(3)自動代碼生成。利用自動代碼生成技術(shù),工程師擺脫了繁瑣的代碼編寫和調(diào)試工作。自動生成代碼源頭為一步步測試驗證過的模型,只要模型正確,則生成的代碼也正確。自動代碼生成技術(shù)使快速原型仿真和硬件在回路仿真成為簡單易行的測試手段。而且嵌入式產(chǎn)品代碼生成技術(shù)則能夠幫助工程師節(jié)約70%以上的工作時間,極大提高工作效率。一旦測試發(fā)現(xiàn)問題,只需要直接追溯模型,修改仿真即可,對于控制器程序升級和后期維護(hù)提供便捷渠道。