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