紀(jì)淑玲,南濤
(上海汽車集團(tuán)股份有限公司商用車技術(shù)中心,上海 200438)
隨著電動(dòng)汽車的快速發(fā)展,企業(yè)對(duì)電子控制系統(tǒng)的開發(fā)效率以及自動(dòng)化程度提出了越來(lái)越高的要求,基于模型的開發(fā)方式是目前汽車控制系統(tǒng)普遍采用的開發(fā)方式,這種方法越來(lái)越多的取代了傳統(tǒng)手寫代碼的開發(fā)方式,尤其是應(yīng)用層的控制模型普通采用基于模型的方式,底層軟件采用目前流行的AUTOSAR架構(gòu)的代碼,而一款控制器有了應(yīng)用層模塊和底層軟件代碼還需要把兩者集成到一起才能實(shí)現(xiàn)完整的控制功能。目前主要的集成方法是將應(yīng)用層模型生成的代碼和底層軟件的代碼放到編譯器里對(duì)接口和調(diào)度功能以及 CAN矩陣的解析等信息手動(dòng)編寫代碼進(jìn)行集成,手動(dòng)集成時(shí)需要手寫代碼,對(duì)工程師編寫代碼的能力要求高,周期長(zhǎng),手寫容易出現(xiàn)問(wèn)題不便于查找問(wèn)題。自動(dòng)集成的方式是利用excel表和DBC文件以及數(shù)據(jù)類來(lái)管理接口數(shù)據(jù)和CAN矩陣的解析,生成統(tǒng)一格式的代碼,有利于代碼的平臺(tái)化,一次開發(fā)永久復(fù)用。
對(duì)于基于Simulink應(yīng)用層模型和AUTOSAR架構(gòu)的底層軟件的控制平臺(tái)來(lái)說(shuō),接口通用,任務(wù)調(diào)度周期固定,這種平臺(tái)的集成可以編寫一些固定模板的腳步實(shí)現(xiàn)自動(dòng)化集成,利用GUI界面把集成工作顯示在一個(gè)界面內(nèi),集成人員只需要通過(guò)操作控件即可實(shí)現(xiàn)應(yīng)用層和底層軟件的集成,可操作性高,復(fù)用性高,開發(fā)人員可以把更多精力放到應(yīng)用層策略開發(fā)中。
因此,本論文基于Matlab/Simulink軟件平臺(tái),利用一些腳本實(shí)現(xiàn)了軟件集成中需要集成的接口對(duì)應(yīng)、數(shù)據(jù)存儲(chǔ)、任務(wù)調(diào)度以及自動(dòng)生成代碼,并自動(dòng)對(duì)生成的代碼編譯,生成可執(zhí)行文件和可供標(biāo)定的文件A2L。
圖1 軟件自動(dòng)集成
圖1是軟件自動(dòng)化集成的GUI界面,主要包含以下功能:
1)數(shù)據(jù)管理模塊
2)任務(wù)調(diào)度
3)CAN解析
4)接口層
5)A2L合并
6)自動(dòng)代碼生成
7)一鍵集成
功能1~6可分步執(zhí)行的目的是在集成軟件需要修改部分內(nèi)容時(shí)可只運(yùn)行部分腳步,如果是想一鍵生成點(diǎn)擊7即可實(shí)現(xiàn)軟件集成功能。使用說(shuō)明里介紹了這個(gè)集成界面的用法以及各個(gè)模塊功能的簡(jiǎn)單介紹。
圖2 自定義數(shù)據(jù)類
數(shù)據(jù)管理模塊主要采用 MATLAB的自定義數(shù)據(jù)類的方式Custom Storage Class Designer。模型的數(shù)據(jù)主要是一些標(biāo)定量和測(cè)量量,自定義一個(gè)數(shù)據(jù)類 MYCSC,這個(gè)數(shù)據(jù)類是在simulink自帶的數(shù)據(jù)類mpt基礎(chǔ)上定義的,MYCSC數(shù)據(jù)類里主要定義了標(biāo)定量和測(cè)量量的數(shù)據(jù)類型和存儲(chǔ)類型。自定義數(shù)據(jù)類的界面如圖2所示。
1.1.1 數(shù)據(jù)類定義
MYCSC數(shù)據(jù)類借用simulink自帶的mpt數(shù)據(jù),又自定義了兩種數(shù)據(jù)類型CAN_IO和CAL,其中CAN_IO數(shù)據(jù)類型是定義的CAN矩陣的信號(hào),CAN信號(hào)的信息主要在文件my_canTskCode.h定義,所以需要此文件作為輸入,此文件是CAN解析時(shí)得到的,請(qǐng)參見CAN解析部分。
圖3 自定義數(shù)據(jù)類a
數(shù)據(jù)類型 CAL是與標(biāo)定量相關(guān)的數(shù)據(jù),屬于要輸出到A2L文件中的數(shù)據(jù),所以Data scope項(xiàng)需要選擇為export,memory section需要選擇一個(gè)memory section定義的文件,memory section中會(huì)定義數(shù)據(jù)存儲(chǔ)的方式。
圖4 自定義數(shù)據(jù)類b
1.1.2 內(nèi)存分區(qū)
內(nèi)存分區(qū)的部分主要把需要存儲(chǔ)的數(shù)據(jù)放到內(nèi)存指定的位置,在代碼中會(huì)有具體位置的體現(xiàn),本文主要用下列方式劃分代碼區(qū)域:
圖5 內(nèi)存分區(qū)
#define SECTION_SEL MEM_CALDAT
#include "memsect.h"
XXX
XXX需要存儲(chǔ)的數(shù)據(jù)
#define SECTION_SEL MEM_DEFAULT
#include "memsect.h"
在自定義類中實(shí)現(xiàn)如圖5所示。
1.1.3 數(shù)據(jù)管理的實(shí)現(xiàn)
在上文對(duì)數(shù)據(jù)類定義之后,數(shù)據(jù)管理時(shí)即可使用自定義的數(shù)據(jù)類來(lái)定義信號(hào)和變量的數(shù)據(jù)類型。數(shù)據(jù)管理采用excel表的形式,excel表中包括了數(shù)據(jù)的基本信息,再利用腳本文件DDM.m將自定義的數(shù)據(jù)類分配給excel表中不同頁(yè)的信號(hào)和變量,最后導(dǎo)入workspace中,workspace中的數(shù)據(jù)信息可供模型運(yùn)行或生成代碼時(shí)使用,以上工作實(shí)現(xiàn)了數(shù)據(jù)信息的定義,存儲(chǔ),以及導(dǎo)入到workspace空間中,如圖6所示。
圖6 數(shù)據(jù)管理
基于AUTOSAR架構(gòu)的底層軟件帶有OS功能,任務(wù)調(diào)度由OS實(shí)現(xiàn),應(yīng)用層的不同周期的任務(wù)可以在excel表里選擇周期,腳本文件會(huì)自動(dòng)識(shí)別任務(wù)的周期將應(yīng)用層的任務(wù)分配到OS的不同周期內(nèi)。
腳步語(yǔ)言主要完成以下工作:
The electric field at the gate–oxide and channel interface is assumed to be continuous in GSGCDMT-SON MOSFET, we have
分析excel表中函數(shù)的名稱及周期,并在底層軟件OS.c中搜索到對(duì)應(yīng)的調(diào)度周期,把函數(shù)放到對(duì)應(yīng)的調(diào)度周期中,并在 OS.h文件中搜索是否包含了函數(shù)所在的頭文件,如果沒(méi)包含將函數(shù)所在的頭文件包含進(jìn)OS.h文件中。
CAN解析的方法常用的有兩種:一種是用simulink自帶的pack和unpack兩個(gè)模塊由應(yīng)用層建模時(shí)實(shí)現(xiàn),一種是底層模塊實(shí)現(xiàn),本文采用的是利用腳步把 CAN矩陣直接解析成.c/.h文件供底層使用,CAN矩陣中信號(hào)的具體信息在數(shù)據(jù)管理模塊已經(jīng)導(dǎo)入到workspace中,本部分主要功能把CAN矩陣中信號(hào)的信息傳遞給底層 CAN收發(fā)模塊,要傳遞的信息底層軟件會(huì)提前給出來(lái)函數(shù)的格式及需求,不同的底層要求不同,本文利用的底層軟件要求傳的參數(shù)如CAN報(bào)文發(fā)送模塊包括CAN ID,報(bào)文 長(zhǎng)度DLC,報(bào)文的數(shù)據(jù)Data,因此腳本生成.c/.h文件需要把CAN矩陣?yán)锏腃AN信號(hào)全部打包成CAN Massage的形式以適應(yīng)底層CAN發(fā)送模塊的需要。下圖7是CAN解析用的腳本文件和生成的CAN模塊相關(guān)的.c/.h文件。
圖7 CAN解析文件
接口層主要是應(yīng)用層輸入輸出接口的信號(hào)名稱與底層軟件的參數(shù)名稱匹配,本部分功能也是采用excel表的形式管理,然后利用腳本為模型自動(dòng)生成一個(gè)外圍接口層,將應(yīng)用層信號(hào)與底層參數(shù)一一匹配起來(lái),信號(hào)和變量在excel表中定義格式如圖8所示,SW_BSWIO表中不同的頁(yè)定義了不同的數(shù)據(jù)形式,每一頁(yè)都根據(jù)信號(hào)或變量的名稱、數(shù)據(jù)類型、偏移量定義好。
圖8 接口管理表
利用腳本解析出上述 excel表中的內(nèi)容,然后為應(yīng)用層模型生成一個(gè)外圍接口層,運(yùn)行后的結(jié)果如圖9所示。
圖9 帶接口層的應(yīng)用層模型
圖10 perl腳本
Simulink模型生成的A2L文件只包含了測(cè)量量和標(biāo)定量的名稱,不包含變量的內(nèi)存地址,本部分的功能是為了生成一個(gè)帶地址的可供標(biāo)定工具使用的A2L文件,利用perl腳本文件合成 A2L文件,在自動(dòng)代碼生成的控制文件里將 perl腳本文件添加進(jìn)去,在生成代碼的過(guò)程中自動(dòng)生成可供標(biāo)定工具使用的A2L文件。
Perl腳本生成帶地址的A2L文件主要做了以下工作:
1)首先利用正則運(yùn)算查找模型生成的A2L文件中變量名與map文件中匹配的位置,抓取出map文件中變量名中的地址;
2)將抓取到的地址賦給A2L文件中的變量。
本部分主要是為了能自動(dòng)生成代碼做的一些配置文件的編寫,simulink提供了模板,可以直接在模板上修改成項(xiàng)目需要的形式,自動(dòng)代碼生成過(guò)程如圖11所示。
圖11 自動(dòng)代碼生成過(guò)程
主要包括以下幾個(gè)文件:
1)makefile:這個(gè)文件是和項(xiàng)目使用的編譯器相關(guān)的,里邊包含了對(duì)項(xiàng)目文件的編譯連接的過(guò)程的定義,是開發(fā)過(guò)程中的重要內(nèi)容。
2)系統(tǒng)TLC文件:對(duì)整個(gè)代碼生成過(guò)程的控制。
3)Hook文件:用于對(duì)代碼生成的各個(gè)階段操作處理,可以在這個(gè)文檔里自定義一些編譯鏈接相關(guān)的內(nèi)容,A2L合并的文件就是在這個(gè)文件里的“after_make”階段調(diào)用的。
4)Template makefile file:文件的作用是按照編譯器編譯鏈接的格式生成一個(gè)和代碼編譯鏈接相關(guān)的 makefile文件,對(duì)模型生成的代碼與底層代碼庫(kù)一起編譯鏈接生成一個(gè)可執(zhí)行文件和一個(gè)A2L文件。
圖12 自動(dòng)代碼生成
測(cè)試的例子中生成了可執(zhí)行文件elf和A2L,把兩個(gè)文件加載到標(biāo)定工具 INCA中可以看到測(cè)量量 BS_BrakePedal SwitchSts_BCAN_01的值。
一鍵生成代碼其實(shí)包含了以上的6個(gè)部分內(nèi)容,把上述6部分內(nèi)容的腳步文件全部鏈接到一鍵生成代碼按鈕下邊,按執(zhí)行順序調(diào)度,最后的效果也和分步執(zhí)行相同。
利用上述的自動(dòng)集成方法:從統(tǒng)計(jì)變量信息制作 excel表,利用現(xiàn)有DBC,設(shè)計(jì)集成文件的格式,寫腳本到一鍵生成代碼,應(yīng)用在一款純電動(dòng)車整車控制器軟件集成上,可快速對(duì)生成的代碼做測(cè)試,并搭建了測(cè)試環(huán)境對(duì)生成的可執(zhí)行文件和A2L文件做了功能測(cè)試,圖13是把可執(zhí)行文件和A2L文件加載到INCA工具中,通過(guò)刷寫可執(zhí)行文件到控制器中,以及監(jiān)控 CAN通訊報(bào)文的操作,對(duì)可執(zhí)行文件的功能做了測(cè)試,測(cè)試結(jié)果證明了此種軟件集成方式的可靠性和準(zhǔn)確性。
圖13 控制器通訊報(bào)文
本文實(shí)現(xiàn)了對(duì)基于simulink應(yīng)用層模型生成的代碼與基于AUTOSAR底層軟件代碼的自動(dòng)化集成,減少了手寫代碼量,縮短了軟件集成的時(shí)間,有利于軟件開發(fā)的平臺(tái)化發(fā)展,應(yīng)用到實(shí)際項(xiàng)目中驗(yàn)證了可行性,大大降低了集成工程師的工作量。
a)首次自動(dòng)集成應(yīng)用,由于搭建流程及腳本文件,開發(fā)時(shí)間可能比手動(dòng)集成時(shí)間稍長(zhǎng)三四天,后續(xù)開發(fā)好的流程及腳本文件可直接擴(kuò)展到其他整車控制器開發(fā)項(xiàng)目,復(fù)用性高。
b)這種方法不僅適用于整車控制器的軟件集成,同樣適用于新能源其他電控系統(tǒng)軟件的集成,可以加快新能源控制軟件的開發(fā)進(jìn)度。
c)目前,對(duì)于不基于 AUTOSAR架構(gòu)的底層軟件來(lái)說(shuō)不適用,需繼續(xù)研究開發(fā)一套可以把底層接口函數(shù)封裝成統(tǒng)一的接口形式,完善通用性,使自動(dòng)集成的過(guò)程對(duì)底層限制減少。