【摘 要】随着乘用车行业的飞速发展,用户对于乘用车的需求越来越高,使得汽车电子控制单元ECU的功能也越来越复杂,乘用车的迭代速度和可移植性逐渐成为汽车软件开发人员的主要关注点。手写代码的开发方式在开发周期、开发难度和可移植性上都显示出了较大弊端,基于模型设计MBD的嵌入式软件开发方法能够有效解决该问题。文章对基于MBD的乘用车嵌入式软件开发方法进行详细介绍,从而提高开发效率和软件品质,对乘用车嵌入式软件开发工作具有较强的指导意义。
【关键词】乘用车;MBD;嵌入式软件
中图分类号:U463.6 文献标识码:A 文章编号:1003-8639( 2024 )09-0029-03
Research on Embedded Software Development Method for Passenger Car Based on MBD
HAN Hao,ZHAO Wenbo
(FAW Car Co.,Ltd.,Changchun 130012,China)
【Abstract】With the rapid development of the passenger car industry,the demand for passenger cars is getting higher and higher,making the functions of automotive ECU more and more complex,and the iteration speed and portability of passenger cars have gradually become the main concerns of automotive software developers. The handwritten code development method shows great disadvantages in terms of development cycle,development difficulty and portability,and the embedded software development method based on MBD can effectively solve this problem. This paper introduces the embedded software development method of passenger cars based on MBD in detail,so as to improve the development efficiency and software quality,and has strong guiding significance for the development of embedded software for passenger cars.
【Key words】passenger car;MBD;embedded software
1 概述
中国乘用车嵌入式软件开发发展经历了3大阶段,如图1所示,分别经历了汇编语言、C代码和MBD。
MBD是一种基于模型的软件设计方法[1],其核心在于根据需求使用建模工具进行建模,并完成自动代码生成,最后使用仿真测试工具对模型进行验证。基于MBD的方法较传统手写代码的方法在开发方式、开发周期、代码品质、可靠性和代码维护上均有较强优势,其具体内容如下。
1)开发环境更统一,适用于不同背景的开发人员,有利于整体项目的整合。
2)开发方式上将功能进行分解,不同于手动编码容易产生漏洞,采用图形化的设计方式,呈现的效果更直观,建模过程更简单,出现的问题更少,测试更容易。
3)开发周期较手写编码大幅缩短,全部代码、文档自动生成,支持多种验证方式,降低了错误的产生,优化了设计和测试方式。
4)代码品质更客观,按照既定的系统需求,采用可视化模拟的方式来优化代码,并自动生成符合行业标准的C语言代码。
5)维护难度更小,系统需求和软件设计相互关联,整个开发过程可以持续验证,需求或变更时只需要简单调整模型即可,移植性较强。
综上所述,基于MBD的开发方法逻辑实现更加直观,可以快速地进行开发、仿真和测试,并且在项目早期便可以解决大量问题,使得开发的周期和成本大大减少。因此,基于MBD的开发方式直击传统乘用车嵌入式软件开发的痛点,并迅速成为了众多嵌入式软件设计师开发过程中的第一选择。
2 开发流程
乘用车软件开发需要依赖于完整的周期,当前主流开发模式是V型开发模式[2],其具体内容如图2所示。整个V型结构下,以系统需求为开端,系统设计和软件需求共同形成开发的嵌入式需求规范,并将此作为标准进行算法设计和代码生成,并通过软件测试、系统测试和功能测试等进行多轮验证,保证软件的正确性。整个开发流程中,每一个开发阶段与测试阶段相互对应,可以对软件的准确性进行精确验证。
基于MBD的开发方式属于V型方式的一种,并对V型方式进行优化。整个流程以需求、开发、测试为主体,每一阶段都包含不断地回溯和验证,该流程下实现的嵌入式软件能够规避掉很多开发问题。基于MBD的嵌入式软件开发流程如图3所示。项目开始阶段,系统设计人员需要根据项目具体需求,以文档方式建立系统需求规范,以便作为整个项目的实施标准。开发人员针对系统需求进行反复解读,明确系统需求的各部分内容,并根据系统需求建立软件需求以便指导后续的开发工作。项目中期属于开发阶段,开发人员根据上一阶段的设定标准进行接口和架构设计,该环节执行的好坏能够直接影响开发工作的效率。在具备良好的架构设计后,开发人员可使用建模工具针对功能逻辑进行可视化设计,设计过程中应严格按照模型静态检查标准,以确保模型可靠性。整个模型建模完成后,通过自动代码生成功能生成C标准代码和模型跟踪报告。项目后期的测试阶段中,软件在环测试由开发人员执行,目的是确保软件正常执行和保障基础功能实现。实车测试由专业测试人员进行,用于发现工程在真实环境下的细节问题。整个项目进行过程中,每个阶段相辅相成,能够极大程度保证代码品质。
3 软件开发
3.1 接口设计
接口设计作为开发阶段的第一步,目的是按照需求标准确定各功能模块输入输出信息,其具体内容有:信号类型、报文ID、信号名、接口类型、数据类型、初始值、有效值取值范围、描述信息和接收/发送模块。其中信号类型一般可分为控制器局域网络(Controller Area Network,CAN)、本地互联网络(Local Interconnect Network,LIN)及硬线等,一般指信号来源或信号去除。报文ID表示信号在信号矩阵中所处的不同报文段,信号名表示命名信息。接口类型一般可以分为发送/接收(Sender/Receiver,S/R)、客户/服务(Client/Server,C/S)及运行实体件变量(Inter Runnable Variable,IRV)等。数据类型、初始值、有效值范围和描述信息用于明确该信号的具体信息。接收/发送模块表示使用该信号进行交互的运行实体。
接口设计规定了软件程序需要实现的行为和功能,使得在设计阶段可以最大程度地使软件开发结果可预见,从而保障软件的品质。
3.2 架构设计
架构设计阶段需要使用DaVinci Developer开发工具,该开发工具产自Vector公司,是一款专门用于乘用车ECU软件的开发工具。用户可以使用该软件的图形用户界面进行图形化设计,可进行应用层软件开发并定义程序界面,最终生成架构层面源代码。图4展示了DaVinci Developer工具中图形化设计操作界面,该设计方式降低了开发难度,无需开发人员具备较强的编码经验,只需要了解各模块的功能,并根据接口设计方案便可轻松完成架构设计工作,大大提升了开发效率和代码品质。另外,该工具可以兼容DaVinci系列的其他工具,增强了后续开发的连贯性,为各阶段的设计师提供了统一环境。基于DaVinci Developer进行应用层软件架构及相应接口的设计完成后,可以导出arxml格式的描述文件,用于指导后续建模。
3.3 模型建模
架构设计阶段生成的arxml文件需要导入MATLAB工具中进行SIMULINK/Stateflow建模[3],模型的设计过程需要充分结合系统功能的逻辑关系。该环境下,研发人员可根据功能进行任务划分,并根据各自的设计任务修改子模型,提高了软件开发速度,并且通过可视化的表现,为开发人员提供设计新思路。图5展示了某功能模型图,其中状态机表示所处的状态,如:OFF/ON,优先级数值越小表示优先级越高,迁移表示从一个状态迁移到另一个状态,判断条件是否满足迁移一般分为条件成立和条件不成立。
建模过程中需要同步进行建模标准检查,可以根据标准使用Model Advisor工具进行自动模型检查。Model Advisor提供相关建模标准(例如MAAB标准)的检查选项,使建立的模型可以符合建模标准。该工具能够对模型的潜在问题进行检查,找出可能限制代码效率的情况,为模型的设计人员提出相应的意见。Model Advisor的打开界面(图6),通过选择检查的目标和检查标准,可根据检查项对模型进行检查,并最终生成准确率高和复杂度低的代码。
3.4 自动代码生成
在模型得到充足的验证后,可以进行自动代码生成工作。MATLAB中的代码生成工具可将上一阶段完成的模型编译并转化为C代码。在生成代码前,首先需要对代码生成的步长类型等进行配置后再编译,编译通过的情况下,会自动生成相应的代码报告,如图7所示。
报告中包含子系统报告和静态代码报告等,开发者可根据这些描述文件了解模型的具体配置信息。因代码与模型互相对应,可以通过模型找到代码,也可以通过代码找到模型,为开发者在模型代码对照的过程中提供极大便利。
4 模型测试
4.1 软件在环测试
软件在环测试[4]目的是测试软件的准确性,评估代码可行性,属于对代码的早期验证,意义重大。软件在环测试可以被理解为对模型和代码的联合仿真,通过对比模型测试的真实输出和开发者期待的真实输出来判断模型功能实现是否正确。此环节中,可以使用Simulink Design Verifier工具进行测试,该工具可通过手动编写或自动生成测试用例的方式对模型逻辑进行验证并生成测试报告(图8),报告中包含兼容性检查、设计错误检查和模型覆盖度检查等。
测试用例的覆盖率通过百分比数值体现,通过判断是否满足设定目标确定测试用例的有效性。如图8所示,通过生成的报告,开发者可以清楚地了解模型中是否有未执行的迁移条件,从而减少错误的发生。因此,在完成软件在环测试后,如能够在达到较好覆盖率的情况下仍可满足最初设定的功能需求,则该代码具备很高的可靠性。
4.2 实车测试
控制器多数信号都是通过CAN总线方式进行接收,通过程序运行进行逻辑运算,然后以CAN报文的形式发送到总线上供其他控制器使用。如图9所示,实车测试过程中更多是使用CANalyzer工具和CANoe软件进行CAN通信和信号测试。测试过程中,通过CAN的硬件接口将相应的虚拟节点替换成设计完成的真实节点,其他的虚拟节点不变,然后把实际物理节点与虚拟节点连接到一起,对真实节点进行测试,确保其能够实现系统功能。将实际系统的部分负载与计算机连接,然后应用嵌入式软件对真实环境下的运行情况进行验证,更能够证明该研究方法下开发的控制系统的有效性。
5 结束语
基于MBD的乘用车嵌入式软件开发方法是一种高效、灵活和低成本的开发方法,这种方法对于当下乘用车软件开发的高速迭代需求具有非常重要的意义,其高效的开发手段和验证方式,可以在极大程度上保证开发的时效性和产品的品质。因此,把基于模型的设计流程应用到乘用车嵌入式软件开发中,可极大降低模型开发过程中的时间成本和人力成本,提高开发效率,减少潜在错误。
参考文献:
[1] 查正运. 基于模型驱动的汽车电子软件开发方法研究[J]. 科技创新与应用,2015(25):76.
[2] 王永乐. 一种基于V模型的嵌入式软件测试方案[J]. 电子制作,2015(8):82.
[3] 王鑫,李惠宇,王茹,等. 基于Simulink模型的车身控制系统设计[J]. 汽车电器,2023(7):37-41.
[4] 王丽娟,刘全周,李占旗,等. 汽车电子嵌入式软件单元测试用例设计方法研究[J]. 中国汽车,2022(8):14-18,23.
(编辑 凌 波)
作者简介韩昊(1997—),男,助理工程师,硕士,从事汽车嵌入式软件开发工作。