基于模型的HEX自动生成工具的开发与应用

2018-08-23 01:12李哲帅周文华
机电工程 2018年8期
关键词:共轨任务调度代码

李哲帅,周文华,聂 飞

(浙江大学 能源工程学院,浙江 杭州 310027)

0 引 言

目前,世界上主流柴油机电控喷油系统就是高压共轨系统,而控制软件的开发成为至关重要的环节[1]。随着控制功能越来越多,基于扭矩的控制算法越来越复杂化[2],传统手写代码的开发模式已难以胜任,采用基于模型的开发模式[3-5],便于控制策略后续修改完善。共轨压力控制是一个实时控制系统[6],为追求良好的响应和控制精度,需要不断摸索最优控制算法,采用模型设计方法将会极大减轻设计工作量,缩短开发周期。

通过Embedded Coder可将Simulink控制模型转换为C代码,但从C代码到可下载至单片机运行的包含程序和数据的十六进制文件(HEX文件),仍有许多工作要做,如C代码编译链接、数据单元描述文件(ASAM MCD-2MC language, A2L)地址更新等,若人工执行,耗时耗力且容易出错。此外,模型数据管理也是个问题。

针对基于模型开发中这两个无法回避的问题,本文将利用脚本开发模型一键生成HEX工具,将Simulink模型直接转换为HEX文件。

1 总体框架设计

模型自动生成HEX工具autorun.m主要包含两部分:数据管理和HEX文件生成。具体实现流程如图1所示。

数据管理主要实现用Excel管理转换公式和模型数据。HEX文件生成包含模型编译、任务调度、代码后处理、编译链接和A2L文件更新。autorun.m脚本编写是建立在通用文件夹基础架构上的,通用文件夹基础架构如图2所示。

图2 通用文件夹基础架构

2 数据管理

本研究采用常用的Excel实现数据统一管理,用于模型仿真测试、代码生成及A2L自动生成,其相较于m文件、mat文件、sldd格式的数据字典等[7],更加清晰直观,并可利用Excel诸多便捷功能。

2.1 转换公式

转换公式包含枚举型enumeration和数值型numeric两类,用于物理值和十六进制数之间的转换,合理的转换公式有助于提升运算速度和精度。调用自定义函数Import_ComputeMethod.m读取Excel转换信息,分别创建enumeration.m文件至Matlab搜索路径,导入numeric至Matlab工作空间,实现流程如图3所示。

2.2 模型数据

模型数据包含Simulink控制模型中的测量量和标定量。调用自定义Import_Data_Object.m函数,通过xlsfinfo.m和xlsread.m函数读取Excel数据,写入modeldata.m文件后运行,则把数据导入到Matlab工作空间,实现流程如图4所示。

3 HEX文件生成

目标是自动生成可直接下载至ECU中使用的HEX文件,以及包含正确ECU描述信息的A2L文件。代码的编译链接、A2L文件的地址更新等所有过程都是在后台完成,最终在Matlab命令窗口显示工作完成。HEX文件自动生成流程如图5所示。

图3 转换公式流程图

图4 模型数据流程图

图5 HEX文件自动生成流程图

3.1 模型编译

本研究在编译前完成如下配置:主模型选择定步长离散求解器,硬件选择Infineon-TriCore,系统目标文件选择ert.tlc;单个功能模块设置为原子单元,以便自定义其生成代码的文件名及函数名;设置标定量输出类型为从常数继承,测量量输出resolve,保证模型编译成功;最后通过rtwbuild.m函数编译模型为C代码。

3.2 任务调度

项目采用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任务调度信息表

3.3 代码后处理

本研究通过copyfile.m函数将Matlab自动生成C代码和脚本控制生成C代码统一拷贝至包含底层驱动和基础软件的工程路径下。

3.4 编译链接

本研究将工程路径下所有应用层及底层源代码,通过后台调用编译器方式转换为机器码。调用bat批处理文件,设定后台编译软件为cctc.exe,初始化工作空间和路径,定义CPU类型为TC 1782,参照TASKING编译器Compiler和Linker中配置生成的All options执行语句,把源代码编译成目标文件,再把目标文件和库文件链接成可执行文件,完成地址和空间分配,后台实现C代码编译链接等工作。

3.5 更新A2L文件

直接由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中的假地址,完成变量地址更新。

4 试验验证

该试验用高压共轨控制模型如图8所示。

试验用发动机是直列、废气涡轮增压中冷、水冷、四冲程柴油机,四缸,排量1.995 L,额定功率75 kW,额定转速3 600 r/min,最大扭矩223 Nm,怠速转速800 r/min,型号为常柴4F20TCI。在发动机试验台架上,主要通过测试启动工况、轨压控制、怠速工况及部分负荷工况等4大核心功能,实现对高压共轨控制程序的充分验证,整个试验过程中发动机均能正常运行,验证了工具自动生成HEX文件的可靠性。

4.1 启动工况

实测发动机启动过程如图9所示。

图9 启动控制过程图

启动过程十分平顺,用时2 s左右,启动成功后转速超调80 r/min左右,并快速稳定至目标怠速800 r/min,未出现“跌坑”,启动过程轨压超调量不超过80 bar,并平稳过渡至目标轨压,整个启动过程正常,满足高压共轨柴油机启动要求。

4.2 轨压控制

实测发动机轨压控制效果如图10所示。

图10 轨压控制效果图

本研究手动设定目标轨压,通过调节PID控制参数,将轨压稳态偏差限制在±5 bar内。保持转速为1 400 r/min,当目标轨压阶跃50 bar时,轨压超调20 bar左右;当目标轨压阶跃100 bar时,轨压超调30 bar左右;当目标轨压阶跃200 bar时,轨压超调60 bar左右。轨压控制采用轨压-燃油计量阀驱动电流双闭环控制策略,调节响应迅速,基本没有振荡,直接平稳过渡至目标轨压,轨压稳态偏差控制和动态响应控制效果满足要求。

4.3 怠速工况

实测发动机怠速控制过程如图11所示。

图11 怠速控制过程图

稳态空载怠速波动在±5 r/min范围内,手动设定目标怠速阶跃50 r/min,怠速超调量小于10 r/min,并迅速稳定至目标怠速,响应时间不超过1 s,满足怠速稳态和动态控制要求。

4.4 部分负荷工况

发动机部分负荷工况如图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范围内,发动机运行稳定,满足试验要求。

5 结束语

(1)本研究利用m语言、tlc语言和bat脚本,完成了Simulink控制模型到单片机HEX文件一键式实现,成功应用于高压共轨ECU开发项目,实践证明:HEX自动生成工具开发的高压共轨ECU满足柴油机控制要求,并提升了整个开发过程自动化程度,提高了基于模型开发效率;

(2)HEX自动生成工具采用调用函数方式实现了各功能,便于后续完善,比如可通过Excel管理层次化模型信息,实现自动集成,进一步提升自动化程度,减轻了工作量,缩短了开发周期;

(3)HEX自动生成工具具有较强通用性,虽然是基于高压共轨ECU开发项目,完成工具开发与发动机台架试验验证,但也适用于其他任何ECU开发项目。

猜你喜欢
共轨任务调度代码
高压共轨发动机控制器硬件平台自动化测试设备设计
基于PEPA的云计算任务调度性能分析
基于改进NSGA-Ⅱ算法的协同制造任务调度研究
创世代码
创世代码
创世代码
创世代码
基于小生境遗传算法的相控阵雷达任务调度
基于混合粒子群算法的云计算任务调度研究
采用共轨喷油系统和可变截面涡轮增压器的3.0L-V6型柴油机