












[摘要]針對傳統手寫編程進行軟件開發周期長、調試難度大的問題,本文采用Simulink模型搭建并自動生成代碼的方式生成應用層軟件,為了更好地驗證和測試所開發的應用層軟件,本文基于合理設計的測試用例通過多次仿真測試后,使應用層與底層代碼進行集成,最后通過硬件實測,驗證所開發的車身控制系統軟件的可靠性。Simulink模型的軟件開發方式與傳統的開發形式相比,開發時間大大縮短,代碼可讀性提高,同時還增強了車身控制系統軟件的穩定性和可靠性。
[關鍵詞] Simulink模型;車身控制系統;應用層軟件
中圖分類號:U463.6 " 文獻標志碼:A " " "文章編號:1003-8639(2023)07
Design Method of Body Control System Based on Simulink Model
WANG Xin,LI Hui-yu,WANG Ru,YUE Zhi-shuai,AN Wang
(Zhizi Automobile Technology Co.,Ltd)
Abstract:Aiming at the problems of long software development life cycle and difficult debugging in traditional handwritten code,the paper uses Simulink model to build and automatically generate code to generate application layer software. In order to better verify and test the developed application layer software,the paper integrates the application layer with the underlying code after several simulation tests based on the rationally designed test cases. Finally,the reliability of the developed body control system software is verified by the hardware testing. Compared with the traditional development mode,the software development method based on Simulink model greatly shortens the development time,improves the readability of the code,and enhances the stability and reliability of the body control system software.
Keywords: Simulink model; Body control system; Application layer software;
收稿日期:2022-11-03
作者簡介:王鑫(1995—),女,助理工程師,碩士,主要從事汽車車身電器系統的設計工作。
隨著重卡行業的快速發展,企業對車身電子控制系統的性能與開發效率提出了越來越高的要求。車身控制器(Body Control Module)作為控制車身電器系統的車身電腦(Body computer),是汽車的重要組成部分之一[1]。當前車身控制系統軟件的開發采用傳統手寫代碼的開發方式,面臨開發周期長、調試難度大的問題。隨著Simulink工具的廣泛應用,基于模型的開發流程越來越多地應用在電子控制系統開發過程中,且可以很好地解決這些問題[2]。利用Simulink工具搭建控制模型進行系統設計、仿真、生成代碼,最終完成軟硬件的集成,極大提高了開發效率,且測試更為快捷,修改更為及時。
本文根據目標車輛的電器需求,設計一種集成整車配電功能的車身控制系統,基于Simulink平臺建立車身控制模型,然后生成應用層代碼,并將此代碼與底層驅動集成后下載到硬件平臺進行硬件實測,最后驗證所設計軟件的可靠性。
1 "車身控制系統控制策略開發
1.1 "整車研究對象和需求分析
本文以某換電牽引車作為研究對象,開發了適用其身的集成整車配電功能的車身控制系統,其車身控制系統結構如圖1所示。
圖1 "車身控制系統結構
車身控制系統的控制單元由駕駛室智能配電盒以及底盤智能配電盒組成,替換了現有車型的“BCM+駕駛室配電盒+底盤配電盒+電源總開關”結構。
底盤智能配電盒作為整車一級配電單元,承擔底盤電器負載配電并且為駕駛室智能配電盒配電;駕駛室智能配電盒作為整車二級配電單元,承擔駕駛室相關電器負載配電及邏輯控制。駕駛室智能配電盒需要接收來自點火鎖開關、燈具開關、負載開關等硬線信號和LIN開關信號,并接收CAN總線傳輸的整車控制器(VCU)、門窗控制器(DCM)、電子控制制動系統(EBS)、底盤智能配電盒(CPDU)、儀表(IC)等節點的CAN報文,然后根據相應的控制策略輸出對燈具、雨刮、喇叭、電磁閥及各個控制器負載供電的控制信號。這些控制信號將傳給底層接口用來驅動芯片的GPIO口,進而控制MOS管的導通,從而實現負載的輸出與斷開。在本設計中,根據電器需求表所涉及的車身控制模塊功能說明見表1。
表 1 "車身控制模塊功能說明
配電盒的處理芯片來自恩智浦公司的S32K146單片機,底層軟件已經開發完成,采用OSEK操作系統,具備可靠的實時運行環境。本文將利用Simulink對上述提及的各個模塊建立模型,生成代碼,通過底層預留的接口函數,實現與底層集成,從而實現整個系統的功能邏輯控制。
1.2 "車身控制策略開發
本文從車輛實際的運行工況出發,設計了適用于某換電牽引車的車身控制策略,其中整車配電功能控制策略如下。
1)B+電源控制:當控制器喚醒后,維持常電引腳輸出;在控制器正常工作過程中始終保持輸出,進入休眠進程后延遲一段時間后停止輸出;當控制器進入休眠后還保持繼續輸出。
2)30電源控制:當30使能信號無效后,直接停止輸出;當30使能信號無效后計時1min,超時后停止輸出。
3)ACC電源控制:鑰匙開關在ACC擋時,整車啟動的電源,當鑰匙擋位信號不處于ACC擋位時引腳停止輸出。
4)ON擋電源控制:鑰匙擋位處于ON擋時,控制ON擋電源引腳輸出,當鑰匙擋位不處于ON擋時,引腳停止輸出。
車身模塊控制策略需遵循各個節點自身的功能規范執行,本文以轉向燈為例,對其進行分析。轉向燈是在機動車輛轉向時開啟以提示前后左右車輛及行人注意的重要指示燈,其控制策略為:整車上ON擋,當左或右轉向開關信號有效時,相應側轉向(變道)燈輸出;危險報警燈開關有效時,整車所有轉向燈輸出;轉向燈與危險報警燈遵循“后到優先”原則;當任一燈具發生故障時,相應側轉向燈閃爍頻率也要相應發生改變。
2 "控制模型搭建與自動代碼生成
2.1 "模型搭建
控制策略的實現需要模型自動生成的代碼來完成,而模型的搭建需要考慮各個功能模塊的關聯程度,進而模塊化建模。本文將控制模型分為硬線輸入模塊、CAN通信模塊、LIN通信模塊、功能邏輯模塊和UDS診斷模塊。其中功能邏輯模塊為整個控制模型的核心,包含外部燈光控制模塊、內部燈光控制模塊、雨刮控制模塊、喇叭控制模塊、電磁閥控制模塊和配電控制模塊。功能單一的模塊通常用Simulink庫中的邏輯(Logic)模塊完成,而對于較為復雜的功能,譬如轉向燈(危險報警燈)、雨刮模塊的搭建則需要使用Stateflow模塊創建狀態機模型完成。
本文以轉向燈為例,詳細介紹其模型搭建的過程。首先根據前文所述的轉向燈控制策略對其進行功能分析:當操作左、右轉向燈開關按鍵時,左、右轉向燈開啟。當轉向燈開關信號有效時間<1s,即為變道燈操作,變道燈閃爍激活,如果沒有反向轉向燈操作,則轉向燈閃爍3次;而當轉向燈開關信號有效時間≥1s,即為轉向燈操作,轉向燈閃爍激活,轉向燈開關無效,轉向燈停止閃爍;轉向燈閃爍激活時,如果操作另外一側的轉向燈時,則立即切換至對應側轉向燈閃爍。當任一時刻危險報警燈開關有效時,危險報警燈閃爍激活。變道燈、轉向燈與危險報警燈之間的狀態轉換關系如圖2所示。
轉向燈功能需在電源模式處于ON擋時有效,圖2中的狀態轉換條件如下。
1)C1滿足任意一個條件:①危險報警燈開關硬線信號有效;②遙控閉鎖成功;③遙控解鎖成功;④遙控解鎖失?。虎葸b控閉鎖失敗。
執行動作:與觸發條件①對應,駕駛室智能配電盒發出危險報警開關信號為有效,同時驅動危險報警燈;與觸發條件②對應,驅動危險報警燈,報警1次;與觸發條件③對應,驅動危險報警燈,報警2次;與觸發條件④、⑤對應,駕駛室智能配電盒驅動危險報警燈,閃爍3次。
2)C2滿足任意一個條件:①危險報警燈開關硬線信號無效;②左/右轉向開關信號有效;③遙控解閉鎖的設定報警次數完成。
執行動作:與觸發條件①對應,駕駛室智能配電盒發送危險報警開關狀態CAN信號為斷開,在完成至少3次閃爍后,熄滅危險報警燈,向總線發送危險報警燈狀態CAN信號為斷開;與觸發條件②對應,駕駛室智能配電盒發送轉向燈開關CAN信號為有效,發送危險報警開關CAN信號為有效,立即熄滅危險報警燈,同時驅動相應側轉向燈,并發送對應側轉向燈狀態CAN信號為開啟;與觸發條件③對應,熄滅危險報警燈,并向總線發送危險報警燈狀態CAN信號為斷開。
3)C3、C6、C9:左轉向開關信號再次有效時長<1s。
執行動作:驅動左轉向燈閃爍3次。
4)C4、C7、C8:右轉向開關信號再次有效時長<1s。
執行動作:驅動右轉向燈閃爍3次。
5)C5:危險報警燈開關硬線信號再次有效。
執行動作:驅動危險報警燈閃爍。
6)C10:左轉向開關信號有效時長≥1s。
執行動作:驅動左轉向燈閃爍。
7)C11:右轉向開關信號有效時長≥1s。
執行動作:驅動右轉向燈閃爍。
8)C12、C13:左轉向開關信號無效。
執行動作:驅動左轉向燈停止閃爍。
9)C14、C15:右轉向開關信號無效。
執行動作:驅動右轉向燈停止閃爍。
注:轉向燈閃爍頻率為75次/min(1.25Hz),脈沖占空比50%,當任一轉向燈發生故障時,其同側轉向燈閃爍頻率是通常的2倍(2.5Hz)。
在進行Stateflow狀態機設計時,首先需要在Model Explorer窗口中進行變量定義,其中包括變量名稱、變量類型、輸入輸出變量的端口號等,必要時還需要添加局部變量。Model Explorer 參數定義如圖3所示,只有正確定義了相關變量參數后,才能進行后期的模型仿真和代碼生成。
圖3 "Model Explorer參數定義
在設置完模型的各個數據參數之后,就需要通過Stateflow繪制狀態流程圖建立起輸入與輸出變量間的邏輯關系。在本設計中,轉向燈模型被劃分為如圖4所示的2個設計模塊:正常模式模塊、故障模式模塊。本設計將著重闡述正常模式模塊的搭建過程。
圖4 "模型設計模塊
正常模式模塊中的轉向燈邏輯實現過程如圖5所示,當左轉開關信號(Lin_L_TurnLgtSt)有效后,狀態圖由初始狀態轉移到左變道狀態同時廣播左變道(e_LeftLine)事件,而當事件(e_LeftLine)發生時,內部變量leftline=1、leftturn=0、rightline=0,當其中leftline=1,即滿足了轉向燈工作過程中的轉移條件,狀態圖就從初始狀態(init)轉移到了左變道狀態(leftline),此時輸出變量outleft在0至1中切換,驅動左轉向燈在亮滅之間進行切換,至此左變道燈閃爍實現。其他狀態轉換過程同理。
將圖5所示的狀態圖模型搭建完成后,需要添加Chart的輸入輸出,模型輸入條件的工作邏輯如圖6所示,左、右轉向信號有效同時需要ON擋有效,解閉鎖的輸入邏輯則需要遙控鑰匙命令和門鎖、門碰信號配合完成。至此,整個轉向燈控制模塊搭建完成。
2.2 "功能時序仿真
運用Simulink中的Stateflow模塊繪制完狀態圖后,可以對模型直接進行時序仿真,在仿真過程中,如果模型的輸出不是預期輸出,還可以用Simulink的調試器對模型進行動態調試,通過對模型設置斷點及步長觀察模型每一步的執行情況,從而發現模型問題所在。
我們將轉向燈模塊構建成如圖7所示的系統模型測試框圖。使用圖中Signal Builder組件繪制系統模型的所有輸入時序,并使用Simulation Data Inspector描繪系統模型的輸出曲線,通過觀察其輸入輸出時序來驗證模型的邏輯關系方便、快捷。只要在Signal Builder組件中繪制輸入變量的測試時序,設置仿真時間并運行模型后,就可以在Simulation Data Inspector中得到輸出變量的時序圖,用于檢驗是否滿足模型搭建的目標功能需求,這樣的驗證方式比實際硬件臺架測試更為快捷,也會更安全。
仿真測試需要測試車輛各種運行工況,故需設計不同的測試用例,根據不同的測試用例在Signal Builder組件中繪制不同的輸入時序作為模型的輸入條件,通過Simulink運行仿真后的輸出結果,就可以驗證設計的系統模型是否與功能需求相符。
在轉向燈模型中,我們按照車輛實際使用情況,設計了如下測試用例。
1)整車上ON擋后,接通左轉向開關,此時左轉向燈閃爍。
2)5s后接通危險報警燈開關,此時危險報警燈閃爍。
3)5s后接通右轉向開關,此時右轉向燈閃爍。
4)5s后依次斷開右轉向開關,斷開危險報警燈開關,此時右轉向燈閃爍轉為危險報警燈閃爍。
5)遙控閉鎖指令置1,左門碰信號置0(門關),且左門鎖狀態為1,此時閉鎖成功,危險報警燈閃爍1次。
6)5s后遙控解鎖指令置2,左門鎖狀態為0,此時遙控解鎖成功,危險報警燈閃爍2次。
7)5s后遙控解鎖指令置2,左門鎖狀態仍為1(閉鎖),此時遙控解鎖失敗,危險報警燈閃爍3次。
8)5s后遙控閉鎖指令置1,左門鎖狀態仍為0(解鎖),此時遙控閉鎖失敗,危險報警燈閃爍3次。
依據上述過程,我們在Signal Builder中繪制模型輸入時序圖,如圖8所示。仿真運行之后,就可以在Simulation Data Inspector組件中觀察輸出變量的時序圖,用于檢驗建立的模型是否滿足功能需求。運行上述測試用例后仿真結果曲線如圖9所示,圖9中為系統輸出變量左轉向燈、右轉向燈的變化曲線,分別與測試用例每一步驟相對應,曲線結果與預期結果相一致,這樣就完成了該用例對轉向燈模型功能的驗證。
2.3 "代碼生成
基于模型的軟件開發可以實現代碼自動生成,且生成的代碼品質和執行效率較高,省去了代碼編寫和調試的相關工作,大大提高了產品的開發效率。針對在快速原型構建板、嵌入式處理器或微處理器上部署而優化的C或C++代碼,可以用MATLAB自帶的Embedded Coder產品生成,它將Simulink模型轉化成代碼的過程中,會調用一系列的目標語言編譯器(TLC)文件,最終生成滿足嵌入式系統需求的C語言代碼。生成嵌入式代碼首先要進行模型參數的配置。圖10所示為參數配置對話框中的標簽頁。
圖10 "參數配置對話框中的標簽頁
1)設置求解器:步長的大小反映了模型的計算精度和速度,步長越小,精度越高。本文中設置求解器類型為離散(discrete)、固定步長(Fixed-step),步長設置為0.001s。
2)硬件配置:這里選用恩智浦(NXP)的Cortex-M4的芯片處理器。
3)設置目標語言:在這個標簽頁中選擇系統的目標類型,即調用合適的TLC文件來生成代碼,點擊Browse按鍵后在彈出的對話框中選擇底層配置好的文件,本文選擇了“spdc.tlc”文件,且選擇目標語言為C語言。
設置完成后,點擊Build Model或使用Ctrl+B快捷鍵生成代碼,若出現如下代碼生成報告即代表代碼成功生成,如果生成失敗,則會自動跳轉診斷查看器(Diagnostics Viewer)標簽頁(圖11),查看失敗原因并依次解決出現的問題。
3 "軟件測試
為了驗證自動生成的代碼在硬件平臺運行的可靠性,本文將生成的S19文件與底層生成的Flash driver文件通過上位機刷寫進控制器,利用總線分析儀[3]發送轉向LIN信號,解閉鎖CAN信號,來模擬實車的不同運行工況,仿真結果如圖12所示。
4 "結語
本文采用Matlab中模型自動生成代碼的方式設計并實現了集成整車配電功能的車身控制系統。充分利用Simulink工具.對模型進行了仿真并最終生成代碼,與底層代碼集成后通過硬件實測驗證了代碼的有效性。基于Simulink模型進行應用層軟件開發車身控制器系統,提高了軟件的模塊化程度,提高了代碼的可讀性,并且減少了開發人員手寫編程和代碼調試的時間,大大提高了開發效率,縮短了產品的開發周期。
參考文獻:
[1]李越,孟胥里. 汽車車身控制器輸出電路的設計與分析[J]. 汽車實用技術,2021,46(18):92-94.
[2]黎新,陳暉,董慶大,等. 模塊化車身控制器的開發[J]. 北京汽車,2014(5):22-27.
[3]路平,孫燦,張進明. 基于CAN/LIN總線技術的車身控制器設計與應用[J]. 汽車電器,2016(2):14-15,19.
[4]張輝,蘇朋軍,孫連明,等. 基于模型的商用車車身控制器開發方法研究[J]. 汽車電器,2018(5):28-31,36.
(編輯 "凌 "波)