孫濤宋安王輝
(1.中汽研汽車(chē)工業(yè)工程(天津)有限公司;2.李斯特技術(shù)中心(天津)有限公司)

隨著新能源汽車(chē)的快速發(fā)展和新能源汽車(chē)應(yīng)用要求的不斷提高,整車(chē)電控系統(tǒng)軟件開(kāi)發(fā)的要求也越來(lái)越高。基礎(chǔ)軟件的重復(fù)性開(kāi)發(fā)勢(shì)必會(huì)造成整車(chē)成本提高,不利于車(chē)企的長(zhǎng)足發(fā)展。因此現(xiàn)代車(chē)企越來(lái)越多地要求將產(chǎn)品進(jìn)行平臺(tái)化,以便于不同產(chǎn)品之間可以沿用。基于以上問(wèn)題,文章主要參照國(guó)際Autosar軟件標(biāo)準(zhǔn),結(jié)合項(xiàng)目實(shí)際要求,提出了新基礎(chǔ)軟件架構(gòu),并通過(guò)MATLAB的命令行工具LegacyCode Tool及S-function等功能,將底層驅(qū)動(dòng)源代碼封裝成Simulink模塊庫(kù),形成平臺(tái)化產(chǎn)品。采用一鍵式集成的方式對(duì)其進(jìn)行編譯,生成可執(zhí)行文件。經(jīng)過(guò)開(kāi)發(fā)測(cè)試驗(yàn)證,平臺(tái)化開(kāi)發(fā)的基礎(chǔ)軟件安全可靠。
Autosar是面向汽車(chē)領(lǐng)域的嵌入式軟件體系結(jié)構(gòu)標(biāo)準(zhǔn)[1]。該體系結(jié)構(gòu)采用了分層模型,每一層只能使用下一層的接口,并向上一層提供服務(wù)接口。這樣對(duì)于不同的硬件平臺(tái)具有更大的靈活性,使得硬件和軟件更大程度地彼此獨(dú)立,同時(shí)分層獨(dú)立開(kāi)發(fā)可以縮短開(kāi)發(fā)周期和減少開(kāi)發(fā)成本。
按照Atuosar標(biāo)準(zhǔn)分層的架構(gòu)體系[1],自上而下分別是應(yīng)用層(Application Layer)、運(yùn)行時(shí)環(huán)境(Runtime Environment)、基礎(chǔ)軟件層(Basic Software Layer)及微控制器層,即硬件。
而基礎(chǔ)軟件分為3個(gè)層次,分別為:微控制器抽象層(Microcontroller Abstraction Layer)、ECU抽象層(ECU Abstraction Layer)、服務(wù)層(Services Layer)。另外,在Autosar軟件架構(gòu)中將復(fù)雜驅(qū)動(dòng)(Complex Drivers)獨(dú)立出來(lái),這部分并沒(méi)有標(biāo)準(zhǔn)化,主要用于對(duì)復(fù)雜的傳感器執(zhí)行器進(jìn)行操作。Autosar標(biāo)準(zhǔn)軟件架構(gòu)具體分層結(jié)構(gòu),如圖1所示。

圖1 Autosar標(biāo)準(zhǔn)軟件架構(gòu)顯示界面
整車(chē)控制器(VCU)是純電動(dòng)汽車(chē)的核心控制部件之一,主要功能是解析駕駛員需求,監(jiān)視汽車(chē)行駛狀態(tài),協(xié)調(diào)控制單元(如 BMS,MCU,EMS,TCU等)工作,實(shí)現(xiàn)整車(chē)的上下電、驅(qū)動(dòng)控制、能量回收、附件控制和故障診斷功能。
整車(chē)控制器基礎(chǔ)軟件需要實(shí)現(xiàn)開(kāi)關(guān)量輸入/輸出模塊(DI/DO)、模擬量輸入模塊(ADC)及通信模塊(包括SPI通信及CAN通信)的功能,負(fù)責(zé)整車(chē)控制器信號(hào)的采集和傳遞,并通過(guò)CAN總線傳遞到其他控制單元或驅(qū)動(dòng)繼電器來(lái)使執(zhí)行器工作[2]。整車(chē)控制器的系統(tǒng)功能結(jié)構(gòu),如圖2所示。

圖2 整車(chē)控制器的系統(tǒng)功能結(jié)構(gòu)圖
開(kāi)關(guān)量輸入模塊接收的信號(hào)主要有鑰匙信號(hào)、擋位信號(hào)及制動(dòng)開(kāi)關(guān)信號(hào)等;輸出信號(hào)主要是控制繼電器信號(hào),如水泵繼電器控制信號(hào)等。
模擬量輸入模塊采集加速踏板和制動(dòng)踏板開(kāi)度信號(hào)及小蓄電池電壓信號(hào)。
SPI通信模塊主要負(fù)責(zé)電路板上不同芯片之間數(shù)據(jù)的交互,包括功能安全的問(wèn)答機(jī)制;CAN通信模塊負(fù)責(zé)整車(chē)控制器內(nèi)部通信及與整車(chē)其他設(shè)備(主要有車(chē)載充電機(jī)(OBC)、電機(jī)控制器(MCU)、電池管理系統(tǒng)(BMS)及網(wǎng)關(guān)(GW)等)的通信。
根據(jù)整車(chē)控制器對(duì)底層的要求,劃分基礎(chǔ)軟件的結(jié)構(gòu)形式及各個(gè)功能模塊,對(duì)芯片的RAM及Flash存儲(chǔ)器等進(jìn)行內(nèi)存分配,定義各模塊的功能要求并規(guī)定各模塊之間的接口,最終形成基礎(chǔ)軟件架構(gòu),如圖3所示。

圖3 整車(chē)控制器基礎(chǔ)軟件架構(gòu)顯示界面
為了便于理解,將基礎(chǔ)軟件分層內(nèi)容進(jìn)行了重新定義,分為驅(qū)動(dòng)層、ECU抽象層及服務(wù)層。
1)驅(qū)動(dòng)層是基礎(chǔ)軟件的最底層,它主要對(duì)硬件提供驅(qū)動(dòng)和診斷,并對(duì)接口層提供硬件資源調(diào)用服務(wù)的支持。該層主要由I/O驅(qū)動(dòng)模塊、存儲(chǔ)驅(qū)動(dòng)模塊、通信驅(qū)動(dòng)模塊及MCU驅(qū)動(dòng)模塊組成。
2)ECU抽象層封裝了驅(qū)動(dòng)層以及外圍設(shè)備的驅(qū)動(dòng),主要包括IO硬件抽象單元及CAN接口單元等。
3)服務(wù)層包含了操作系統(tǒng)、系統(tǒng)服務(wù)(模式管理)、存儲(chǔ)器服務(wù)、通訊服務(wù)及診斷通訊等。它為應(yīng)用軟件和基礎(chǔ)軟件模塊提供基礎(chǔ)服務(wù)。服務(wù)層的實(shí)現(xiàn)和運(yùn)行與驅(qū)動(dòng)層、ECU抽象層及應(yīng)用軟件息息相關(guān)。對(duì)各個(gè)功能模塊的描述,如表1所示。
在軟件架構(gòu)定義完成之后,根據(jù)Autosar軟件模塊的功能規(guī)范,軟件需要編寫(xiě)各模塊的設(shè)計(jì)文檔,設(shè)計(jì)文檔需要明確該模塊的編碼手段(C/C++匯編語(yǔ)言),并定義函數(shù)功能接口包括的類(lèi)型參數(shù)、原型聲明、外部聲明及函數(shù)返回值等內(nèi)容。
根據(jù)完成的設(shè)計(jì)文檔及編程規(guī)范來(lái)編寫(xiě)各功能模塊的源代碼,并進(jìn)行動(dòng)靜態(tài)測(cè)試及功能測(cè)試。
由于應(yīng)用軟件是基于MATLAB中的Simulink來(lái)搭建完成的,要想使應(yīng)用層軟件與基礎(chǔ)軟件相集成,首先需要將應(yīng)用層模型生成C代碼,然后編寫(xiě)中間層代碼,使得應(yīng)用層的接口與底層接口進(jìn)行匹配交互。這樣在軟件開(kāi)發(fā)過(guò)程中每一版軟件都需要不斷維護(hù)中間層代碼,勢(shì)必造成很大的工作量,并增加了開(kāi)發(fā)周期,耗費(fèi)了人力資源。
為了更快更方便地將基礎(chǔ)軟件與應(yīng)用層軟件相集成,通過(guò)使用MATLAB中的LegacyCode Tool命令行工具、S-function函數(shù)及m文件工具,將基礎(chǔ)軟件各個(gè)功能模塊的源代碼封裝成Simulink模塊,并將封裝完成的各個(gè)子功能模塊集成到模型中,稱其為BSW Library,形成平臺(tái)化產(chǎn)品[3]。
Legacy Code Tool可以很方便地將已有的源代碼(C/C++代碼)與模型結(jié)合起來(lái)[4]。通過(guò)將源代碼編譯生成用于仿真的S-Funciton,也可以生成一個(gè)封裝了外部C代碼參數(shù)化的S-function模塊。
通過(guò)S-function可以定義每個(gè)功能模塊與應(yīng)用層的接口。具體封裝流程,如圖4所示。
1)首先將要封裝的源代碼(包括頭文件等)放到指定目錄下;
2)生成一個(gè)特定的Legacy Code Tool參數(shù)集,參數(shù)集制定了要包含的C代碼、頭文件,以及生成S-func-tion的名稱等諸多信息;
3)通過(guò)Legacy Code Tool的命令行語(yǔ)句,調(diào)用第1步配置好的參數(shù)集變量,生成相應(yīng)的S-function源文件;
4)將生成的S-function源文件變?yōu)榭蓜?dòng)態(tài)加載的執(zhí)行文件,即mexw32文件;
5)通過(guò)Legacy Code Tool的命令行語(yǔ)句將上面生成的S-function執(zhí)行文件封裝成Simulink模塊。
封裝完成后的I/O模塊程序界面,如圖5所示。

圖5 封裝完成后的I/O模塊程序界面
對(duì)源代碼封裝完成后,在開(kāi)發(fā)應(yīng)用層模型時(shí),可以在Simulink BSW Library庫(kù)中直接調(diào)用基礎(chǔ)軟件的模型,將其與應(yīng)用層模塊進(jìn)行集成,這樣將大大提升集成的效率,并且能夠保證集成的質(zhì)量[4]。
將集成好的模型通過(guò)運(yùn)行編寫(xiě)好的m文件并使用MATLAB的Embedder Coder功能來(lái)生成源代碼(*.c及*.h)。最后在編譯器中運(yùn)行makefile文件,將所有的源代碼及芯片中固化的lib文件進(jìn)行編譯連接,生成可執(zhí)行文件及A2L文件。
對(duì)集成后的可執(zhí)行文件按照定義的測(cè)試項(xiàng)進(jìn)行測(cè)試驗(yàn)證后,測(cè)試全部通過(guò)。從而得出:基于Autosar架構(gòu)定義的基礎(chǔ)軟件架構(gòu)使得當(dāng)?shù)讓佑布?jí)時(shí)不需要更改整個(gè)系統(tǒng),只需要將部分內(nèi)容做一定程度的修改,即可重復(fù)利用,有利于未來(lái)整車(chē)系統(tǒng)的更新。通過(guò)對(duì)開(kāi)發(fā)的基礎(chǔ)軟件源代碼進(jìn)行封裝,變成平臺(tái)化的產(chǎn)品,可以提高軟件集成的可靠度并降低維護(hù)成本,進(jìn)而降低開(kāi)發(fā)費(fèi)用。