《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于Embedded Coder的ECU數據管理系統開發
基于Embedded Coder的ECU數據管理系統開發
2018年電子技術應用第5期
陰晉冠1,蘇鐵熊1,馮云鵬2,劉 濤3,賈 利3,周慧芳3,張艷崗1
1.中北大學 機電工程學院,山西 太原030051; 2.北京特種車輛研究所,北京100072;3.中國北方發動機研究所,天津300400
摘要: 基于模型的開發(Model Based Development,MBD)在現代汽車電控領域有著廣泛的應用。MATLAB/Simulink軟件作為策略開發和自動代碼生成工具也得到了廣泛的應用。發動機電子控制單元(ECU)開發時間比較早,已經積累了許多可靠性高的C源代碼,在轉入基于模型的開發后不可能遺棄這些資源,所以對新舊模式的整合就十分有必要。傳統手寫查表函數和內存管理函數可靠性高且形成產品規模,所以基于Embedded Coder開發相應的數據管理系統與之相匹配:將原有的數據類型定義移植到MATLAB環境下;創建查表模塊庫代替Simulink中的Lookup Table模塊使之生成代碼后能夠調用原有的查表函數。結果證明所開發的數據管理系統能夠很好地與傳統手寫代碼相匹配,而傳統的經驗也有助于加快基于模型的開發速度。
中圖分類號: TK402;TP319
文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.174385
中文引用格式: 陰晉冠,蘇鐵熊,馮云鵬,等. 基于Embedded Coder的ECU數據管理系統開發[J].電子技術應用,2018,44(5):52-55.
英文引用格式: Yin Jinguan,Su Tiexiong,Feng 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,Feng 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軟件開發愈加重要[1-2]。對于發動機ECU系統來說,查表模塊要滿足離線數據燒寫和在線標定兩方面的需求:離線燒寫時將查表模塊數據全部定義到固定的Flash區域中,在燒寫時,燒寫工具將該Flash區域的數據全部燒寫為新的值;進行在線標定時,內存管理模塊將Flash中的查表模塊數據拷貝到RAM中,標定RAM中的查表模塊數據,并且讓發動機ECU軟件讀取RAM中的查表模塊數據。因此,需要在查表插值函數中,先通過內存管理模塊得到查表模塊的實際地址,再進行查表插值計算,返回查表結果。而Simulink自帶的Lookup Table模塊,在生成代碼時會自動生成查表插值函數,但是該函數無法調用底層的內存管理模塊,只能使用Flash中的查表模塊數據進行計算,無法滿足在線標定的需求。因此針對原有的底層模塊,自定義開發與之匹配的Simulink查表模塊是十分有必要的。另外,借鑒傳統手寫代碼中有益的經驗,在MATLAB/Simulink環境下開發數據字典對模型中的變量及數據類型進行管理可以減少模型定點化工作,提升開發速度。

1 變量存儲管理

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

1.1 數據類型實現

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

1.2 變量及其存儲實現

    在Embedded Coder自動生成代碼時,要盡可能按照不同查表模塊結構定義方式生成變量。基于Embedded Coder的包自定義適合單片機的包,使得Simulink模型中的變量的各項屬性滿足在代碼生成時的各種要求。建立包的過程如圖1所示。

qrs3-t1.gif

    首先創建一個自定義的包,在該包上定義所需的數據類:定義Parameter數據類用于表達標定變量,定義Signal數據類用于表達監控變量。各數據類的屬性會默認繼承Simulink包中相應數據類的屬性。發動機電控系統的查表模塊必須定義在指定的Flash段空間內,所以需要定義數據類的自定義儲存類CSC(Custom Storage Class)來定制變量的儲存屬性,例如數據類型(結構體或非結構體)、內存塊Memory Section(定義變量聲明和定義所在的儲存區域)、鏈接屬性(是否聲明為外部變量)等屬性。

2 創建查表模塊

    查表模塊用于在模型中使用定點或浮點數據查表進行建模仿真,在創建查表模塊時可以分為兩個步驟:查表模塊的封裝和相應的底層內存管理模塊封裝。

2.1 查表模塊封裝

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

qrs3-t2.gif

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

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

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

qrs3-t3.gif

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

qrs3-t4.gif

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

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

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

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

qrs3-t5+t6.gif

qrs3-t7+t8.gif

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

2.2 底層內存管理模塊封裝

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

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

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

qrs3-t9.gif

3 仿真與代碼實驗

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

qrs3-t10.gif

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

    將該實驗模型生成代碼后查看其代碼的表現,結果顯示在進行加法、減法、乘法計算時,單片機中的計算結果與前述仿真結果一致。在進行除法計算時,單片機中的計算結果為:如果被除數小于除數,則結果為0,否則結果為商的整數部分。這與仿真結果明顯不同。這是因為Simulink的除法模塊在進行除法計算時,是先將除數與被除數當做浮點數來計算浮點形式的商,然后再用定點類型來顯示這個商。這是定點代碼在代碼中的表現與在仿真中的表現的最大差異處。

4 結論

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

參考文獻

[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.中北大學 機電工程學院,山西 太原030051;

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

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
久久久久免费视频| 欧美三级欧美一级| 亚洲一区二区三区在线视频| 香蕉久久夜色精品| 欧美午夜a级限制福利片| 久久综合中文| 久久精品日韩欧美| 欧美一级视频精品观看| 亚洲欧美视频在线| 亚洲欧美在线看| 一本色道久久加勒比88综合| 亚洲精品综合久久中文字幕| 亚洲国产美女精品久久久久∴| 欧美自拍丝袜亚洲| 欧美中日韩免费视频| 香港久久久电影| 先锋a资源在线看亚洲| 午夜天堂精品久久久久| 亚洲欧美日韩视频一区| 午夜精品福利在线| 香蕉av777xxx色综合一区| 亚洲在线观看视频网站| 亚洲欧美电影院| 亚洲免费在线精品一区| 亚洲一线二线三线久久久| 亚洲在线观看免费| 亚洲欧美影音先锋| 久久国产精品网站| 亚洲福利精品| av成人免费在线| 一区二区三区 在线观看视| 日韩一区二区精品在线观看| 中文在线不卡| 亚洲综合电影一区二区三区| 香港久久久电影| 久久精品国产成人| 久久综合久久综合九色| 欧美sm视频| 欧美乱妇高清无乱码| 欧美色综合网| 亚洲精品韩国| 久久狠狠久久综合桃花| 欧美一区二视频| 亚洲国产精品第一区二区| 亚洲日本视频| 亚洲深夜av| 欧美在线高清| 免费日韩av电影| 欧美日韩亚洲一区二| 国产精品日韩精品欧美精品| 韩国精品久久久999| 亚洲电影av| 一区二区精品在线| 欧美一区二区三区成人| 亚洲伦理自拍| 午夜在线a亚洲v天堂网2018| 久久中文字幕一区二区三区| 欧美日韩午夜剧场| 国产亚洲福利| 亚洲毛片网站| 欧美一区二区三区在线观看| 日韩午夜剧场| 欧美在线视频日韩| 欧美激情久久久久久| 国产精品视频一区二区三区| 在线播放不卡| 亚洲一级二级| 亚洲欧洲在线免费| 性xx色xx综合久久久xx| 欧美国产乱视频| 国产精品一区二区三区免费观看| 亚洲第一精品夜夜躁人人爽| 亚洲系列中文字幕| 日韩视频一区二区三区| 久久精品亚洲精品| 欧美视频官网| 亚洲国产成人av| 午夜精品久久久久久久久久久久 | 亚洲午夜久久久久久久久电影网| 性娇小13――14欧美| 欧美好骚综合网| 国产亚洲福利社区一区| 99视频日韩| 亚洲国产日韩美| 久久成人18免费观看| 欧美日韩情趣电影| 一区二区在线视频播放| 亚洲欧美乱综合| 宅男精品视频| 欧美成人在线影院| 国外成人在线视频| 亚洲免费在线观看| 亚洲特级毛片| 欧美精品激情在线观看| 伊人狠狠色丁香综合尤物| 亚洲欧美日韩在线| 亚洲影院在线| 欧美电影免费观看网站| 韩国av一区二区三区在线观看| 亚洲综合国产精品| 亚洲综合首页| 欧美日韩美女| 亚洲欧洲视频在线| 亚洲国产天堂久久综合网| 久久精品人人做人人综合| 国产精品揄拍500视频| 中文在线不卡| 亚洲天堂av在线免费| 欧美日韩国产综合视频在线观看 | 亚洲福利在线观看| 亚洲第一区在线观看| 欧美一区二区三区日韩视频| 欧美日韩免费区域视频在线观看| 亚洲国产精品电影| 亚洲第一成人在线| 久久久久久91香蕉国产| 国产亚洲激情在线| 欧美一级免费视频| 久久国产精品毛片| 国产日产精品一区二区三区四区的观看方式 | 久久精品国产91精品亚洲| 国产精品视区| 亚洲一区二区欧美日韩| 香蕉免费一区二区三区在线观看| 国产精品国产三级欧美二区| 一区二区三区欧美亚洲| 亚洲少妇一区| 国产精品国产三级国产aⅴ9色| 这里只有精品丝袜| 欧美一级在线视频| 国产欧美在线观看| 欧美一级艳片视频免费观看| 久久狠狠婷婷| 韩国成人精品a∨在线观看| 亚洲承认在线| 欧美激情综合五月色丁香小说| 亚洲三级免费电影| 宅男精品视频| 国产精品一二| 久久精品国产99| 欧美a级一区| 亚洲精品影视| 亚洲一区二区网站| 国产精品主播| 久久av老司机精品网站导航| 久久一区欧美| 亚洲日本在线视频观看| 亚洲小说欧美另类婷婷| 国产精品家教| 久久99在线观看| 欧美高清在线视频观看不卡| 最新国产成人在线观看| 亚洲午夜精品久久| 国产精品一区毛片| 久久国产欧美精品| 欧美激情在线有限公司| 亚洲一区不卡| 久久视频国产精品免费视频在线| 在线精品福利| 亚洲午夜精品一区二区| 国产一区二区av| 亚洲日本无吗高清不卡| 久久av资源网站| 欧美国产精品久久| 亚洲素人在线| 久久久噜噜噜久久久| 亚洲日韩视频| 性欧美在线看片a免费观看| 精品69视频一区二区三区| 99精品国产福利在线观看免费 | 亚洲福利专区| 欧美日韩在线免费观看| 欧美伊人久久| 欧美日本韩国| 欧美在线视频全部完| 欧美精品亚洲一区二区在线播放| 亚洲免费影院| 欧美国产视频在线| 亚洲欧美资源在线| 欧美精品麻豆| 欧美一区激情| 欧美日韩成人在线| 欧美中文字幕第一页| 欧美肉体xxxx裸体137大胆| 久久国产精品久久w女人spa| 欧美日韩在线看| 亚洲电影观看| 国产精品高潮呻吟视频| 亚洲国产欧洲综合997久久| 国产精品视频网址| 99在线精品观看| 好看的av在线不卡观看| 亚洲一区中文| 91久久午夜| 久久视频在线视频| 亚洲在线黄色| 欧美日韩在线播放三区四区| 亚洲欧洲另类国产综合| 国产亚洲精品久久久久久| 亚洲私拍自拍|