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