ECU应用层软件入门的三部曲之2 基础

文摘   2024-11-11 06:44   上海  

ECU应用层软件入门的三部曲之1 广博 (qq.com)

接着上篇文章,来聊聊ECU应用层软件入门的三部曲之2 基础。这里的基础包括控制基础、软件基础、开发基础以及流程和工具等。
1 控制基础
恰好之前写过几篇电机控制基础的文章,就直接通过这几篇文章为引子。
假如你是要做电机的FOC控制,那么你最好能够充分理解这些控制基础,就如下图:
深入理解这些关键概念:Park变换、Clarke变换、反Park变换和SVPWM等,就比如当自己搭建Park变换和Clarke变换模型,模型搭建并不复杂,但是跑出来的结果却令人很疑惑,为啥经过转换出来的iq和id不是直线,还是正弦的?
最终才发现是simulink中的abc-dq模块是默认顺时针方向为正,而一般参考文献中的永磁同步电机控制算法中是逆时针方向为正。当我们根据文献自己搭建abc-dq模块时,就是默认逆时针方向为正,用simulink模块时就是顺时针方向为正,因此需要对电角度作处理。
从这也不难发现,掌握控制基础是应用层软件开发非常重要的一步,尤其对于涉及到汽车的横纵垂直(XYZ)三个方向的控制。除了之外,对于零部件特性的理解也十分重要,记得以前做变速箱控制开发的时候,遇到一个湿式离合器特性的问题,就是一直想通过关系式或查表方式来准确地表达,类似于下图这种形式:

后来发现理解离合器特性的影响因素非常重要,在工程应用上虽然不会用复杂的数学模型或公式来计算,但是可采用这些影响因素去摸索出很多个一二维的特性表来表示。
这些控制基础的一些认识,简单总结就是:一方面要掌握产品的控制基础逻辑或策略;另一方面要掌握产品所涉及的关键零部件特性。

2 软件基础

1)要建怎样的模型

假设需要建立一个整车动力学方程模型,分别计算滚动阻力,空气阻力和坡道阻力,这是一种我在学生时代最常用的实现方式,一目了然,简单直接。

但不是基于MBD的汽车嵌入式应用层软件开发方式。对于ECU应用层软件,对模型有以下几个方面的要求:
  • 方便理解模型算法:模型应具备强可读性,接口清晰,记录详细。
  • 提高建模效率:模型易于维护和修改,组件重用性强,调用方便,架构清晰。
  • 方便模型测试:模型可测试,并且测试方便。
  • 方便生成代码:生成的嵌入式代码方便,软件修改方便,生成的代码具有较强的鲁棒性。
因此,综合考虑这些要求,ECU应用层软件有一套建模规范,同时也需要进行数据的管理,也就是数据字典(存储模型相关数据的集中式存储库,它可以存储定义参数和信号的设计数据,还包括定义模型行为的数据)。
综合考虑两者之后,那么就可以建立一个符合ECU应用层软件量产规范的模型,下图就是关于滚动阻力,空气阻力和坡道阻力计算,所搭建有一定的质量、可读性和可维护性的ECU应用层模型。

2)生成怎样的代码
我一向觉得模型自动生成代码的配置并不复杂,可以说很简单,一顿操作性下来,代码就可以自动生成了,如下所示:
但这是你预期的代码文件和代码内容吗?比如生成代码文件是否足够或者多余,就如主文件ert_main.c是否需要;生成代码中的内容是否符合你的预期,有些函数是否需要,代码可读性怎么样,数据类型是否满足要求。

到此,会发现自动生成代码是否符合预期又与模型强相关,可以以结果为导向来考虑,因为模型的最终产物是代码,所以首先要明确的是目标的代码文件和代码内容,然后再是目标的模型和代码生成配置。个人认为这是就是ECU应用层软件最重要的软件基础,即明确目标的代码和模型,后面的实践朝着这个方向来实现。
3)测试基础
为了保证所开发的ECU应用层软件的正确性,仿真和测试是非常重要的一个方面,比如单元测试和集成测试,测试形式包括MIL、SIL、PIL和HIL等,这里不做展开,具体可参考之前文章:

4)理论方面的基础

上面三个方面焦点在模型和代码,如果放眼汽车嵌入式软件开发,有了一些基础性的软硬件知识将会更加有益,比如ECU应用层软件在整个软件层面是怎么运行的,或者在整个控制器的软硬件层面是怎么运行的。对于大多数人来说,这块优化级真可以放很低很低,本来属于在学校时期学的内容,在工作中再去投入不见得有啥收益,纯凭个人兴趣与爱好。

推荐资源:

  • CPU 是怎么认识代码的? 

  • 依据基本原理构建现代计算机:从与非门到俄罗斯方块(基于项目的课程)

  • 依据基本原理构建现代计算机:从与非门到俄罗斯方块 Part II(基于项目的课程)

以上三点就是个人对于ECU应用层软件开发的软件基础理解,你需要创造什么样的软件,什么样的模型,以及软件背后是在如何运行。

3 软件项目基础

1)开发流程

对于开发流程上篇文章也提到过:什么时候(When)谁(Who)通过哪些活动必须交付怎样(How)的东西(What)核心点是交付,由此会产生很多的问题与纠纷,到时就会回归到开发流程整个道德至高点,如果你没有流程意识,不懂开发流程,可能就会出现埋头辛苦地干活,结果背锅还是你。

当然这是现实残酷的一面,回归追求产品质量的一面,有效的开发流程也将是ECU应用层软件开发的质量的保证。ECU应用层软件是以V流程进行开发,即需求分析,架构设计,模型开发,单元测试,软件集成与测试和软件确认测试这6个环节。对于这6个环节需要做什么,需要什么产出,可以参考ASPICE或者功能安全ISO26262。

source:https://www.embitel.com/blog/embedded-blog
总之,对于ECU应用层软件的开发流程本质是质量成本时间三者的折衷,开发流程因企业而异,因环境而异,因时而异。而开发流程离不开开发工具,没有好的开发工具支持,开发流程很痛苦。

2 开发工具

开发工具主要针对开发流程的这6个环节,以及软件项目开发活动管理。下面列举一个如何选择工具链的案例,如下针对ECU应用层软件选取如下的开发工具:

开发工具选取决策背景是这样的:先了解公司其他ECU应用层软件团队工具链情况,确定了最核心的建模和生成代码工具,采用了基于simulink建模和Embedder code生成代码的工具方案;然后根据控制器的MCU为英飞凌TC系列以及供应商的BSW工具链情况,采用Tasking来编译,Vector的CANape来标定和测量,ASAP2来生成A2L;再根据公司现有的软件项目管理项目情况,软件需求使用Polarion来管理,模型和代码版本管理采用SVN;以此最终基础确定了ECU应用层软件的开发工具链配置清单。

最后关于开发工具的使用,从项目角度来说,对于个人的要求够用就行,当然大多数人将处于这种水平,而从个人角度,取决于你的职业发展规划,工具用的好卖工具可以是一种选择。

4 总结

关于ECU应用层软件入门的三部曲之2 基础的内容,核心差不多就是以上这几个方面,归纳起来就是:

  • 掌握ECU应用层软件的目标产品功能,控制方法和特性等;
  • 明确目标的ECU应用层软件模型和代码,以及验证方法;
  • 理解ECU应用层软件的开发流程和开发工具。
以此实现ECU应用层软件的控制闭环、开发闭环和管理闭环。

创作不易,欢迎点赞再看收藏关注


汽车研发交流群,有兴趣的朋友请添加群主:prOmiseyes,备注:公司+职务入群。仅限汽车从业人员。

谦益行
分享汽车研发日常,助力你我共同成长。
 最新文章