《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于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網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 欧美成人精品三级网站 | 美女张开腿让我 | 日本一级毛片免费播放 | 久久er国产精品免费观看1 | 免费在线观看a级毛片 | 最爽的乱淫片免费 | 欧美一级视频在线观看欧美 | 中文字幕无线码中文字幕网站 | 三级网站在线 | 精品国产_亚洲人成在线高清 | 在线视频 一区二区 | 在线播放国产视频 | 国产在线不卡免费播放 | 一级毛片中文字幕 | 久久91精品国产91久久跳舞 | 久久怡红院亚欧成人影院 | 中文字幕国产亚洲 | 久章草视频 | 久久久黄色大片 | 中文字幕一区二区三 | 加勒比在线视频 | 国产一区欧美 | 久久成人免费视频 | 亚洲欧美日韩在线不卡中文 | 国内美女福利视频在线观看网站 | 一级全免费视频播放 | 99精品一区二区三区 | 国产伦码精品一区二区三区 | 久久不雅视频 | 国产一级一级一级国产片 | 日本加勒比网站 | 亚洲精品国产经典一区二区 | 91精品国产综合久久香蕉 | 日韩一级一欧美一级国产 | 免费成人在线网站 | 亚洲精品国产综合一线久久 | 91亚洲国产成人久久精品网站 | 中国二级毛片 | 一级片在线观看视频 | 国产亚洲影院 | 亚洲成人黄色网 |