李哲帥,周文華,聶 飛
(浙江大學 能源工程學院,浙江 杭州 310027)
目前,世界上主流柴油機電控噴油系統就是高壓共軌系統,而控制軟件的開發成為至關重要的環節[1]。隨著控制功能越來越多,基于扭矩的控制算法越來越復雜化[2],傳統手寫代碼的開發模式已難以勝任,采用基于模型的開發模式[3-5],便于控制策略后續修改完善。共軌壓力控制是一個實時控制系統[6],為追求良好的響應和控制精度,需要不斷摸索最優控制算法,采用模型設計方法將會極大減輕設計工作量,縮短開發周期。
通過Embedded Coder可將Simulink控制模型轉換為C代碼,但從C代碼到可下載至單片機運行的包含程序和數據的十六進制文件(HEX文件),仍有許多工作要做,如C代碼編譯鏈接、數據單元描述文件(ASAM MCD-2MC language, A2L)地址更新等,若人工執行,耗時耗力且容易出錯。此外,模型數據管理也是個問題。
針對基于模型開發中這兩個無法回避的問題,本文將利用腳本開發模型一鍵生成HEX工具,將Simulink模型直接轉換為HEX文件。
模型自動生成HEX工具autorun.m主要包含兩部分:數據管理和HEX文件生成。具體實現流程如圖1所示。
數據管理主要實現用Excel管理轉換公式和模型數據。HEX文件生成包含模型編譯、任務調度、代碼后處理、編譯鏈接和A2L文件更新。autorun.m腳本編寫是建立在通用文件夾基礎架構上的,通用文件夾基礎架構如圖2所示。

圖2 通用文件夾基礎架構
本研究采用常用的Excel實現數據統一管理,用于模型仿真測試、代碼生成及A2L自動生成,其相較于m文件、mat文件、sldd格式的數據字典等[7],更加清晰直觀,并可利用Excel諸多便捷功能。
轉換公式包含枚舉型enumeration和數值型numeric兩類,用于物理值和十六進制數之間的轉換,合理的轉換公式有助于提升運算速度和精度。調用自定義函數Import_ComputeMethod.m讀取Excel轉換信息,分別創建enumeration.m文件至Matlab搜索路徑,導入numeric至Matlab工作空間,實現流程如圖3所示。
模型數據包含Simulink控制模型中的測量量和標定量。調用自定義Import_Data_Object.m函數,通過xlsfinfo.m和xlsread.m函數讀取Excel數據,寫入modeldata.m文件后運行,則把數據導入到Matlab工作空間,實現流程如圖4所示。
目標是自動生成可直接下載至ECU中使用的HEX文件,以及包含正確ECU描述信息的A2L文件。代碼的編譯鏈接、A2L文件的地址更新等所有過程都是在后臺完成,最終在Matlab命令窗口顯示工作完成。HEX文件自動生成流程如圖5所示。

圖3 轉換公式流程圖

圖4 模型數據流程圖

圖5 HEX文件自動生成流程圖
本研究在編譯前完成如下配置:主模型選擇定步長離散求解器,硬件選擇Infineon-TriCore,系統目標文件選擇ert.tlc;單個功能模塊設置為原子單元,以便自定義其生成代碼的文件名及函數名;設置標定量輸出類型為從常數繼承,測量量輸出resolve,保證模型編譯成功;最后通過rtwbuild.m函數編譯模型為C代碼。
項目采用RTA-OSEK操作系統[8],可實現噴油量、噴油正時、軌壓精確控制。為避免直接面對C代碼進行操作,本研究采用Excel管理任務調度信息[9],主要配置2個初始化任務,9個時間任務,3個事件任務,任務調度函數信息表如圖6所示(以10 ms任務為例)。
筆者將各功能模塊函數名分別列入相應Sheet,調用自定義OSTaskFilesRewrite.m函數,通過xlsfinfo.m和xlsread.m函數讀取不同Sheet中的任務函數名,并利用fopen.m和fprintf.m函數寫入任務調度C文件如圖7所示。

圖6 10 ms任務調度信息表
本研究通過copyfile.m函數將Matlab自動生成C代碼和腳本控制生成C代碼統一拷貝至包含底層驅動和基礎軟件的工程路徑下。
本研究將工程路徑下所有應用層及底層源代碼,通過后臺調用編譯器方式轉換為機器碼。調用bat批處理文件,設定后臺編譯軟件為cctc.exe,初始化工作空間和路徑,定義CPU類型為TC 1782,參照TASKING編譯器Compiler和Linker中配置生成的All options執行語句,把源代碼編譯成目標文件,再把目標文件和庫文件鏈接成可執行文件,完成地址和空間分配,后臺實現C代碼編譯鏈接等工作。
直接由Maltab自動生成的A2L并不完整,可通過修改相關tlc信息來自定義生成理想A2L文件。標定量定義成Parameter,測量量定義成Signal,設置Interface為ASAP2。在asap2setup.tlc中自定義靜態配置,包括文件名、工程名、注釋、模塊名等。在asap2userlib.tlc中自定義HEADER項目信息,包括項目編號、項目版本等,設置硬件交互部分內容,如添加A2ML和IF_DATA、在MOD_PAR中設置內存范圍等。將自定義設置好的tlc文件添加到Matlab搜索路徑,生成自定義A2L文件。
Matlab自動生成的A2L文件不包含實際地址,需用編譯器分配物理地址進行更新。添加手寫代碼中測量量和標定量至自動生成的A2L文件后,利用bat腳本后臺調用asap2editor,結合包含編譯器分配地址信息的ELF文件,生成中間地址文件MAPCONV.TMP。用TMP中真實地址替換自動生成A2L中的假地址,完成變量地址更新。
該試驗用高壓共軌控制模型如圖8所示。
試驗用發動機是直列、廢氣渦輪增壓中冷、水冷、四沖程柴油機,四缸,排量1.995 L,額定功率75 kW,額定轉速3 600 r/min,最大扭矩223 Nm,怠速轉速800 r/min,型號為常柴4F20TCI。在發動機試驗臺架上,主要通過測試啟動工況、軌壓控制、怠速工況及部分負荷工況等4大核心功能,實現對高壓共軌控制程序的充分驗證,整個試驗過程中發動機均能正常運行,驗證了工具自動生成HEX文件的可靠性。
實測發動機啟動過程如圖9所示。

圖9 啟動控制過程圖
啟動過程十分平順,用時2 s左右,啟動成功后轉速超調80 r/min左右,并快速穩定至目標怠速800 r/min,未出現“跌坑”,啟動過程軌壓超調量不超過80 bar,并平穩過渡至目標軌壓,整個啟動過程正常,滿足高壓共軌柴油機啟動要求。
實測發動機軌壓控制效果如圖10所示。

圖10 軌壓控制效果圖
本研究手動設定目標軌壓,通過調節PID控制參數,將軌壓穩態偏差限制在±5 bar內。保持轉速為1 400 r/min,當目標軌壓階躍50 bar時,軌壓超調20 bar左右;當目標軌壓階躍100 bar時,軌壓超調30 bar左右;當目標軌壓階躍200 bar時,軌壓超調60 bar左右。軌壓控制采用軌壓-燃油計量閥驅動電流雙閉環控制策略,調節響應迅速,基本沒有振蕩,直接平穩過渡至目標軌壓,軌壓穩態偏差控制和動態響應控制效果滿足要求。
實測發動機怠速控制過程如圖11所示。

圖11 怠速控制過程圖
穩態空載怠速波動在±5 r/min范圍內,手動設定目標怠速階躍50 r/min,怠速超調量小于10 r/min,并迅速穩定至目標怠速,響應時間不超過1 s,滿足怠速穩態和動態控制要求。
發動機部分負荷工況如圖12所示。

圖12 部分負荷工況控制效果圖
試驗分別選取10個工況點進行驗證:(1)1 000 r/min下測功機設定扭矩分別為0 Nm、10 Nm、20 Nm、30 Nm;(2)1 500 r/min下測功機設定扭矩分別為0 Nm、30 Nm、50 Nm;(3)1 800 r/min下測功機設定扭矩分別為0 Nm、30 Nm、50 Nm。實測各工況下轉速波動在±5 r/min范圍內,軌壓波動在±5 bar范圍內,發動機運行穩定,滿足試驗要求。
(1)本研究利用m語言、tlc語言和bat腳本,完成了Simulink控制模型到單片機HEX文件一鍵式實現,成功應用于高壓共軌ECU開發項目,實踐證明:HEX自動生成工具開發的高壓共軌ECU滿足柴油機控制要求,并提升了整個開發過程自動化程度,提高了基于模型開發效率;
(2)HEX自動生成工具采用調用函數方式實現了各功能,便于后續完善,比如可通過Excel管理層次化模型信息,實現自動集成,進一步提升自動化程度,減輕了工作量,縮短了開發周期;
(3)HEX自動生成工具具有較強通用性,雖然是基于高壓共軌ECU開發項目,完成工具開發與發動機臺架試驗驗證,但也適用于其他任何ECU開發項目。