文/宋炳雨 陈娜娜 何晓明 李峰
MBD,全称为Model Based Design,即基于模型的设计。在汽车电子所属的嵌入式软件开发领域,MBD技术通常指采用图形化建模并仿真,进而将模型自动生成代码的技术。相比传统嵌入式软件开发方法,由于MBD技术具有需求可追溯、建模图形化、自动生成代码、快开发周期、方便并行开发等诸多特点,其近年来受到了越来多越多的重视。特别是基于Matlab/Simulink平台的MBD嵌入式软件开发方法,由于其应用广泛,逐渐成为一种趋势。
本文基于MBD开发方法与传统开发方法对比,分析和研究MBD技术在汽车嵌入式软件开发领域中的导入方法,以及要解决的一些关键问题。
如图1所示,传统嵌入式软件开采用自上而下的瀑布式流程,即下阶段工作开展依赖于上阶段工作的完成情况,上阶段工作为下阶段工作提供基础。这种开发流程一个显而易见的问题,就是不允许并行开发,并且如果在某阶段发现错误或需求变更,极有可能引起耗时较长的大规模软件更新甚至整个软件重写,从而拉长项目周期,并为项目本身带来诸多的不确定性。
其次,在传统的开发手段中,在不同阶段彼此之间传递的信息需要依赖文档,例如需求分析报告、系统详细设计规范、设计任务书、设计报告等。由于工程人员总会存在针对文字理解的二义性问题,因此即便是文档本身没有错误,可能也会由于理解上的误差而引起系统设计、实现的错误。
基于MBD技术的嵌入式软件开发采用V形开发流程。其中,V代表“Verification”和“Validation”,作为一套严谨完整的系统开发方法,其一般包含图2所示几个阶段:
可以看出,V开发流程将软件实现和软件验证进行了有效结合,软件实现的各阶段,均对应有相应的验证环节。
V开发流程中,为避免文字说明的模糊性及理解性错误,详细说明将采用模型方式,如用信号流图的方式(Simulink模型)进行定义。 控制方案的设计也不再采用过去的那种先将对象模型简化成手工可以处理的形式,再根据经验进行手工设计的方式,而是用诸如MATLAB/SIMULINK等计算机辅助建模及分析软件建立对象尽可能准确的模型,并进行离线仿真,从而避免了传统设计过程中,对象过于简化带来的设计方案无法满足实际对象要求的尴尬局面。
如图3所示,基于MBD技术的嵌入式软件开发方法(本文特指基于Matlab/Simulink,借助快速原型控制器进行MBD技术应用的开发方法),控制系统软件开发过程大概分为以下几个阶段。
(1)需求分析;
(2)控制系统方案设计;
(3)快速原型开发;
(4)单元测试与验证;
(5)系统集成测试与验证;
(6)自动代码生成;
(7)硬件在环仿真;
(8)台架及实车测试。
基于MBD的嵌入式软件开发在很多方面存在优势,但目前对于绝大多数有应用需求的汽车电子企业或科研院所而言,却是一种新的方法。而作为一种对新方法的尝试,就必然会面临如何融合和导入新方法的问题。
图1:嵌入式系统传统设计方法
图2:V开发流程
图3:基于MBD的嵌入式软件开发过程
对于无传统嵌入式软件开发经验,而仅希望定位于控制策略开发,且不希望关心控制器底层的使用者而言,选择一款市场上成熟、功能完善的快速原型控制器进行项目开发,是一种较为普遍的做法。由于快速原型控制器本身即为基于Matlab/Simulink的快速原型开发提供了解决方案,因此使用者在使用时,不必关心控制器底层、手写代码及程序刷写标定等问题。借助这种方式,使用者可以不再受传统嵌入式软件开发模式和方法的束缚,进而将精力完全放到应用软件开发层面。该种开发方式,实现对控制策略的快速验证的同时,也可以在很大程度上提高新产品的推出速度。
借助市场上现成的快速原型控制器进行产品开发,相比传统的嵌入式软件开发方式,优势体现在诸多方面,但其局限性也显而易见:由于快速原型控制器厂商在提供该类控制器产品时,会固化底层软件和控制器功能,因此对于使用者而言,一定程度上会影响使用者在使用该产品时的灵活性。
对于有传统嵌入式软件开发经验的使用者而言,引入MBD技术进行嵌入式软件开发,优势则显得更为明显。一方面,使用者可以灵活配置及定制底层代码及功能,另一方面,借助MBD开发方法,将极大的提高产品开发效率,提升嵌入式软件开发质量。这种开发方式,为ECU开发等复杂嵌入式软件开发项目的高效、有序进行,提供了可能。
基于MBD技术进行嵌入式软件开发,表面上看,仅需解决需求分析、快速原型开发,自动代码生成、硬件在环仿真以及系统测试等有限几个方面的问题。但实际要打通整个流程,并最终实现嵌入式软件产品化,却有很长的路需要走,很多问题需要解决。
需求管理包括需求分析、需求变更管理以及需求跟踪几个方面。虽然基于MBD的嵌入式软件开发可以使用模型或信号流图的形式进行系统辅助说明,在很大程度上避免传统开发模式下单纯文字描述(多为自然语言描述)的模糊性及二义性问题。但其和传统开发模式一样,在控制系统功能较为复杂的情况下,随着项目工作的逐步推进,很容易出现需求管理混乱,以及需求和模型不匹配的问题,这时通常需要结合MBD的实际应用情况,考虑使用第三方工具(如doors)辅助进行需求管理。需求管理是一件非常重要但却非常不容易做好的工作,在任何时候都应该引起足够的重视。
出于并行开发和保证控制系统模型可读性及可维护性的需要,在控制系统模型模型搭建过程中,我们通常会按功能将其划分为若干不同的功能模块(Unit level model),而不同模块之间存在信号交互关系,因此就涉及到控制系统各单元模型输入输出信号管理问题。
理想情况下,下游模块的输入应该和上游模块的输出应该保持完全一致,否则,将为后期的基于快速原型控制器的模型集成等工作带来很大的麻烦。但在项目开发过程中,由于需求变更而导致某些功能模块输入输出发生变动的情况时有发生,在模块众多及负责人各不相同的情况下,如果缺乏一套完善的输入输出信号管理办法,极易出现上下游信号名称、数据类型等不匹配的现象,从而引起控制系统模型集成时的各种问题。
将控制策略用Simulink或Stateflow以建模的方式准确表达出来,这就是控制系统软件建模。作为一种在业内使用最为广泛且功能完善的建模、仿真工具,Matlab/Simulink为用户提供了非常灵活的建模方式。因此,使用MATLAB/Simulink及Stateflow控制算法建模规范的重要性不言而喻,其是项目成功及团队合作(既包括内部成员合作,也包括与其他外部成员及分包商之间的合作)的基础。规范化模型是确保控制系统模型品质及一致性,以及使其具有良好可读性及可维护性的前提条件。在控制系统研发过程具有多人分工的情况下,如何形成并贯彻执行好一套适宜的建模规范,成为一个必然要考虑的问题。
模型集成是指将各功能模块按照既定的输入输出关系、任务优先级等进行集成,并使其实现既定功能的过程。由于当前市场上几乎所有快速原型控制器都只支持单模型代码生成,不支持多模型应用,因此模型集成是在项目后期必须要做的一项工作。
集成过程需要考虑模型接口、功能、任务优先级、以及集成模型稳定性等多个方面。准确完成接口集成是集成工作的基本要求以及接下来实现集成模型功能的前提条件,因此在集成过程中,要对各模块间的输入输出关系以及输入输出信号属性等引起足够的重视。
另外,软件版本管理是模型集成时必需考虑的另外一个问题,若没有一套统一的软件管理办法,或在软件集成中过程中未将软件版本管理工作做好,则极易引起集成模型的混乱。
模型测试是检验模型是否满足需求的手段,其和需求分析一样,在V开发流程中起着非常重要的作用。通过基于需求的测试,最终可以达到验证系统和确认产品的目的。
从测试方法角度,模型测试包括MIL(单元MIL测试及集成MIL测试)、HIL,PIL等多种测试手段,虽然几种方法的测试重点各有不同,但却是相互配合,层层递进。通过这几个阶段模型测试,可查找出控制算法中可能存在的绝大多数问题。而之后的台架测试,实车测试等,将进一步对控制系统模型验证,最终使得控制算法最优并达到功能匹配需求的目的。
模型测试过程中,测试用例生成及其管理工作对于模型测试工作效率有着重要影响。理想情况下,研发团队要针对当前控制系统软件设计和不断充实测试用例库,并保证测试用例在不同测试阶段具有可重用性,以最大程度的减少重复劳动,并为结果比对提供同一基础。
另外,Simulink针对模型测试,设计有专门的V&V(Validation and Verification)工具箱,该工具箱可实现的主要功能包括建模标准检查、覆盖度测试、自动生成测试报告等,正确使用将为模型测试工作带来极大方便。但要想使得这些工具真正发挥作用,研发人员还必须首先对这些工具箱获取足够了解,并针对研发团队的实际情况完成工具定制。
作为嵌入式软件开发的一种趋势,基于模型的嵌入式软件开发有着传统开发方法诸多不可比拟的优势,该方法不仅可以在很大程度上提高嵌入式软件的开发速度,辅助其他方法及工具,还能大大提升控制系统嵌入式软件的产品质量。掌握这种方法,将为提高企业研发实力及产品竞争力,提供巨大帮助。