《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于Embedded Coder的ECU數(shù)據(jù)管理系統(tǒng)開發(fā)
基于Embedded Coder的ECU數(shù)據(jù)管理系統(tǒng)開發(fā)
2018年電子技術(shù)應(yīng)用第5期
陰晉冠1,蘇鐵熊1,馮云鵬2,劉 濤3,賈 利3,周慧芳3,張艷崗1
1.中北大學(xué) 機(jī)電工程學(xué)院,山西 太原030051; 2.北京特種車輛研究所,北京100072;3.中國北方發(fā)動機(jī)研究所,天津300400
摘要: 基于模型的開發(fā)(Model Based Development,MBD)在現(xiàn)代汽車電控領(lǐng)域有著廣泛的應(yīng)用。MATLAB/Simulink軟件作為策略開發(fā)和自動代碼生成工具也得到了廣泛的應(yīng)用。發(fā)動機(jī)電子控制單元(ECU)開發(fā)時間比較早,已經(jīng)積累了許多可靠性高的C源代碼,在轉(zhuǎn)入基于模型的開發(fā)后不可能遺棄這些資源,所以對新舊模式的整合就十分有必要。傳統(tǒng)手寫查表函數(shù)和內(nèi)存管理函數(shù)可靠性高且形成產(chǎn)品規(guī)模,所以基于Embedded Coder開發(fā)相應(yīng)的數(shù)據(jù)管理系統(tǒng)與之相匹配:將原有的數(shù)據(jù)類型定義移植到MATLAB環(huán)境下;創(chuàng)建查表模塊庫代替Simulink中的Lookup Table模塊使之生成代碼后能夠調(diào)用原有的查表函數(shù)。結(jié)果證明所開發(fā)的數(shù)據(jù)管理系統(tǒng)能夠很好地與傳統(tǒng)手寫代碼相匹配,而傳統(tǒng)的經(jīng)驗也有助于加快基于模型的開發(fā)速度。
中圖分類號: TK402;TP319
文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.174385
中文引用格式: 陰晉冠,蘇鐵熊,馮云鵬,等. 基于Embedded Coder的ECU數(shù)據(jù)管理系統(tǒng)開發(fā)[J].電子技術(shù)應(yīng)用,2018,44(5):52-55.
英文引用格式: Yin Jinguan,Su Tiexiong,F(xiàn)eng Yunpeng,et al. The development of data management system for ECU based on the Embedded Coder[J]. Application of Electronic Technique,2018,44(5):52-55.
The development of data management system for ECU based on the Embedded Coder
Yin Jinguan1,Su Tiexiong1,F(xiàn)eng Yunpeng2,Liu Tao3,Jia Li3,Zhou Huifang3,Zhang Yangang1
1.College of Mechatronic Engineering,North University of China,Taiyuan 030051,China; 2.Beijing Special Vehicle Research Institute,Beijing 100072,China;3.China North Engine Research Institute,Tianjin 300400,China
Abstract: Model based development(MBD) has been used in modern automotive electronic control field widely. As a strategy development and automatic code generation tool, MATLAB/Simulink software has also been used widely. Engine electronic control unit(ECU) development has a long history, and a lot of reliable C source code has been accumulated. We couldn′t abandon these resources while in the model-based development,so the integration of old and new mode is necessary. Since the traditional hand-written look-up table functions and memory management functions have high reliability and a product level, this article develops the corresponding data management system to match it based on the Embedded Coder. The original data type definition has been imported in to the MATLAB environment. Instead of Lookup Table module in Simulink, a new lookup module library has been created which can generate code to call the original hand-written lookup table function. The result shows that the developed data management system can match the traditional hand-written code well, and the traditional experience also helps to speed up the model based development.
Key words : data management;MBD;Lookup Table module;ECU

0 引言

    基于模型的ECU軟件開發(fā)愈加重要[1-2]。對于發(fā)動機(jī)ECU系統(tǒng)來說,查表模塊要滿足離線數(shù)據(jù)燒寫和在線標(biāo)定兩方面的需求:離線燒寫時將查表模塊數(shù)據(jù)全部定義到固定的Flash區(qū)域中,在燒寫時,燒寫工具將該Flash區(qū)域的數(shù)據(jù)全部燒寫為新的值;進(jìn)行在線標(biāo)定時,內(nèi)存管理模塊將Flash中的查表模塊數(shù)據(jù)拷貝到RAM中,標(biāo)定RAM中的查表模塊數(shù)據(jù),并且讓發(fā)動機(jī)ECU軟件讀取RAM中的查表模塊數(shù)據(jù)。因此,需要在查表插值函數(shù)中,先通過內(nèi)存管理模塊得到查表模塊的實際地址,再進(jìn)行查表插值計算,返回查表結(jié)果。而Simulink自帶的Lookup Table模塊,在生成代碼時會自動生成查表插值函數(shù),但是該函數(shù)無法調(diào)用底層的內(nèi)存管理模塊,只能使用Flash中的查表模塊數(shù)據(jù)進(jìn)行計算,無法滿足在線標(biāo)定的需求。因此針對原有的底層模塊,自定義開發(fā)與之匹配的Simulink查表模塊是十分有必要的。另外,借鑒傳統(tǒng)手寫代碼中有益的經(jīng)驗,在MATLAB/Simulink環(huán)境下開發(fā)數(shù)據(jù)字典對模型中的變量及數(shù)據(jù)類型進(jìn)行管理可以減少模型定點化工作,提升開發(fā)速度。

1 變量存儲管理

    Simulink提供了名為Simulink的包(Package),用于描述變量的名稱、維數(shù)、物理值、取值范圍、單位、描述以及數(shù)據(jù)類型的名稱[3]。Simulink包在生成代碼時不支持變量的Flash段定義,而是將模型中的變量當(dāng)做普通變量來處理。另一方面,不同類型的標(biāo)定變量的存儲結(jié)構(gòu)與查表差值函數(shù)的接口定義、數(shù)據(jù)讀取方法直接相關(guān)。尤其對于曲線和曲面變量,Simulink生成代碼時會將模型中的每個變量獨立定義,這就導(dǎo)致屬于同一CUR/MAP的軸參數(shù)等出現(xiàn)分散定義的情況,地址不一定連續(xù),順序也很可能是混亂的,這對于查表插值函數(shù)的影響相對較小,調(diào)整函數(shù)接口即可順利讀取到變量的軸數(shù)據(jù)地址,但是這將給a2l文件的生成帶來極大麻煩,因為很難通過軟件來識別分析每個軸變量分別屬于哪個CUR/MAP,也就無法生成正確的描述信息來描述標(biāo)定變量。所以要設(shè)計專門的包將標(biāo)定變量定義到指定的Flash段中,從而盡可能減小對已有查表插值函數(shù)的改動,并且便于手工修改變量,最大限度兼容已有的手寫代碼的變量結(jié)構(gòu)定義方式。

1.1 數(shù)據(jù)類型實現(xiàn)

    MATLAB中可以表示浮點數(shù)和定點數(shù)變量,浮點數(shù)變量有兩種表示方法:一種是矩陣類型的變量,使用雙精度浮點數(shù),可在m語言和Simulink中使用;另一種是Parameter數(shù)據(jù)類,可在Simulink中使用。定點數(shù)變量也有兩種表示方法:一種是Parameter數(shù)據(jù)類;另一種是fi對象,適用于m語言。所以本文使用Parameter數(shù)據(jù)類來表示數(shù)據(jù)類型[4-5]。另外,根據(jù)從前手寫代碼的經(jīng)驗和規(guī)則,使用斜率和偏移來定義定點數(shù),使用單精度浮點數(shù)來表示浮點數(shù),并將以前使用的數(shù)據(jù)類型都導(dǎo)入到MATLAB中。

1.2 變量及其存儲實現(xiàn)

    在Embedded Coder自動生成代碼時,要盡可能按照不同查表模塊結(jié)構(gòu)定義方式生成變量?;贓mbedded Coder的包自定義適合單片機(jī)的包,使得Simulink模型中的變量的各項屬性滿足在代碼生成時的各種要求。建立包的過程如圖1所示。

qrs3-t1.gif

    首先創(chuàng)建一個自定義的包,在該包上定義所需的數(shù)據(jù)類:定義Parameter數(shù)據(jù)類用于表達(dá)標(biāo)定變量,定義Signal數(shù)據(jù)類用于表達(dá)監(jiān)控變量。各數(shù)據(jù)類的屬性會默認(rèn)繼承Simulink包中相應(yīng)數(shù)據(jù)類的屬性。發(fā)動機(jī)電控系統(tǒng)的查表模塊必須定義在指定的Flash段空間內(nèi),所以需要定義數(shù)據(jù)類的自定義儲存類CSC(Custom Storage Class)來定制變量的儲存屬性,例如數(shù)據(jù)類型(結(jié)構(gòu)體或非結(jié)構(gòu)體)、內(nèi)存塊Memory Section(定義變量聲明和定義所在的儲存區(qū)域)、鏈接屬性(是否聲明為外部變量)等屬性。

2 創(chuàng)建查表模塊

    查表模塊用于在模型中使用定點或浮點數(shù)據(jù)查表進(jìn)行建模仿真,在創(chuàng)建查表模塊時可以分為兩個步驟:查表模塊的封裝和相應(yīng)的底層內(nèi)存管理模塊封裝。

2.1 查表模塊封裝

    查表模塊要在Simulink中進(jìn)行使用,在Simulink環(huán)境中可以封裝S函數(shù)來實現(xiàn)自定義功能。使用C語言編寫查表模塊的S函數(shù)。查表模塊S函數(shù)模塊的開發(fā)流程如圖2所示,主要分為編寫S函數(shù)文件和S函數(shù)模塊封裝兩部分。下面以曲線(Curve)模塊為例來詳細(xì)描述如何創(chuàng)建查表模塊。

qrs3-t2.gif

    曲線插值查表模塊含有1個輸入、1個輸出和7個參數(shù),7個參數(shù)分別為:(1)CUR的x軸變量;(2)CUR的y軸變量;(3)CUR的x軸數(shù)據(jù)類型;(4)CUR的y軸數(shù)據(jù)類型;(5)CUR的x軸數(shù)據(jù)類型編號;(6)CUR的y軸數(shù)據(jù)類型編號;(7)CUR名稱。

    首先,根據(jù)曲線插值查表模塊的特性編寫S函數(shù)的C源代碼,其中須包含Simulink規(guī)定的必須有的宏定義和頭文件,針對查表模塊還應(yīng)當(dāng)包含定點數(shù)相關(guān)的頭文件等;實現(xiàn)參數(shù)的獲取和設(shè)置的各種回調(diào)方法,具體包括:

    (1)初始化回調(diào):設(shè)置S函數(shù)的參數(shù)信息、狀態(tài)信息、輸入輸出端口信息、采樣時間信息、工作向量信息、仿真選項,具體流程如圖3所示。

qrs3-t3.gif

    (2)參數(shù)檢查回調(diào),用來檢查x軸數(shù)據(jù)類型名稱、維數(shù)、單調(diào)性是否有效,檢查y軸數(shù)據(jù)類型名稱是否有效、維數(shù)是否與x軸一致,具體流程如圖4所示。

qrs3-t4.gif

    (3)采樣時間回調(diào):設(shè)置采樣時間信息,具體流程如圖5所示。

    (4)運行時參數(shù)回調(diào):用來建立運行時參數(shù)(Run-Time Parameter),即將CUR的軸變量注冊成為運行時參數(shù)以獲取其儲存值,具體流程如圖6所示。

    (5)輸出回調(diào):用來獲取輸入、CUR數(shù)據(jù),設(shè)置輸出,流程如圖7所示。

    (6)RTW回調(diào):用戶來將參數(shù)傳遞給RTW文件,具體流程如圖8所示。

qrs3-t5+t6.gif

qrs3-t7+t8.gif

    然后,將C源代碼編譯為mex文件。在Simulink中自建模塊庫,使用S-Function模塊完成參數(shù)封裝,并與mex文件鏈接,完成查表模塊的封裝。

2.2 底層內(nèi)存管理模塊封裝

    繼續(xù)以曲線插值查表模塊為例,為使該模塊生成的代碼能夠與底層庫中的查表插值函數(shù)和內(nèi)存管理函數(shù)相結(jié)合,定義以下接口方式使得曲線插值查表模塊生成如下格式的代碼來調(diào)用查表插值函數(shù):

    輸出=曲線查表插值函數(shù)(x軸Flash地址,x軸點數(shù),x輸入)

    在底層庫的查表插值函數(shù)中,首先調(diào)用內(nèi)存管理模塊的接口函數(shù),根據(jù)CUR的Flash地址查得其RAM地址,再讀取RAM地址中的CUR,進(jìn)行查表插值。在代碼生成時,CUR模塊要生成兩部分代碼:一是要生成頭文件中的查表插值函數(shù)的聲明語句,只需生成一遍;二是對于每個CUR模塊生成一次查表插值函數(shù)調(diào)用語句。底層內(nèi)存管理模塊封裝具體流程如圖9所示。

qrs3-t9.gif

3 仿真與代碼實驗

    在發(fā)動機(jī)控制系統(tǒng)中使用的數(shù)據(jù)類型基本上是定點數(shù)數(shù)據(jù)類型。本節(jié)以無符號、16位、斜率為2-5、偏移為0的定點類型為例,研究運用定點數(shù)所建立的查表模塊在仿真和生成代碼中的表現(xiàn)。實驗通過兩個定點數(shù)進(jìn)行加法、減法、乘法、除法的不溢出和溢出計算來比較定點運算在仿真和代碼中的表現(xiàn)。仿真設(shè)計如圖10所示。

qrs3-t10.gif

    實驗中,定點數(shù)a_fixed等于1,通過Lookp_1D_CUR查表模塊得出輸出為7.11,由于該定點類型的精度為0.031 25,因此查表得出的輸出為7.125。另一個定點數(shù)b_fixed等于11.7,同樣也丟失了一些精度,但在工程應(yīng)用中還可以接受。從圖10中可以看出,對于不溢出的加法、減法、乘法、不除0除法運算,計算結(jié)果受兩個輸入的影響也損失了一定精度。除0在理論上是不存在的,仿真實驗中計算結(jié)果為2 047.968 75,即儲存值達(dá)到最大值為65 535。d_fixed+e_fixed實驗了溢出加法計算,a_fixed查表后的結(jié)果減去b_fixed實驗了溢出減法計算,d_fixed與f_fixed相乘實驗了溢出乘法計算,其結(jié)果如圖10所示,與理論計算結(jié)果一致。

    將該實驗?zāi)P蜕纱a后查看其代碼的表現(xiàn),結(jié)果顯示在進(jìn)行加法、減法、乘法計算時,單片機(jī)中的計算結(jié)果與前述仿真結(jié)果一致。在進(jìn)行除法計算時,單片機(jī)中的計算結(jié)果為:如果被除數(shù)小于除數(shù),則結(jié)果為0,否則結(jié)果為商的整數(shù)部分。這與仿真結(jié)果明顯不同。這是因為Simulink的除法模塊在進(jìn)行除法計算時,是先將除數(shù)與被除數(shù)當(dāng)做浮點數(shù)來計算浮點形式的商,然后再用定點類型來顯示這個商。這是定點代碼在代碼中的表現(xiàn)與在仿真中的表現(xiàn)的最大差異處。

4 結(jié)論

    本文基于Embedded Coder 進(jìn)行了發(fā)動機(jī)的變量存儲管理、查表模塊封裝和底層內(nèi)存管理模塊封裝,從而定制了生成代碼中的變量定義方式和儲存方式,并將其與底層庫中的查表插值函數(shù)接口相匹配,使得查表模塊可以進(jìn)行仿真計算、離線數(shù)據(jù)標(biāo)定,其生成發(fā)動機(jī)控制代碼能夠支持在線標(biāo)定和離線燒寫。仿真和代碼實驗結(jié)果表明,所建查表模塊可以滿足開發(fā)需求;定點數(shù)在仿真和代碼中的表示都會損失一定的精度;定點數(shù)在仿真和代碼中進(jìn)行加法、減法、乘法計算結(jié)果一致,除法計算會有差異。

參考文獻(xiàn)

[1] DILLABER E,KENDRICK L,JIN W,et al.Pragmatic strategies for adopting model-based design for embedded applications[J].SAE Technical Paper,2010,2010-01-0935.

[2] HODGE G,YE J,STUART W.Multi-tar-get modeling for embedded software devel-opment for automotive applications[J].SAE Technical Paper,2004,2004-01-0269.

[3] The Math Works Inc.Embedded Coder reference[Z].2015.

[4] ERKKINEN T.Fixed-point ECU development with model-based design[J].SAE Technical Paper,2008,2008-01-0744.

[5] REDDY V,NADARAJAH S,BEALS G.Tips for fixed-point modeling and code generation for simulink[EB/OL].[2017-10-23].http://cn.mathworks.com/matlabcentral/fileexchange/7197-tips-for-fixed-point-modeling-and-code-generation-for-simulink-6.


作者信息:

陰晉冠1,蘇鐵熊1,馮云鵬2,劉  濤3,賈  利3,周慧芳3,張艷崗1

(1.中北大學(xué) 機(jī)電工程學(xué)院,山西 太原030051;

2.北京特種車輛研究所,北京100072;3.中國北方發(fā)動機(jī)研究所,天津300400)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。