1 初识MBD
基于模型的设计( Model-Based Design,MBD )是一种围绕模型搭建展开的一种项目开发方法。这种方法可以避免繁琐的代码编写和调试过程,可以极大的提高项目开发效率。并且从模型的角度入门汽车电子,对新手来说更加友好,学习容易,上手非常快。
在网络中检索MBD相关信息,有很多相关的技术博客和帖子,但有很多老工程师并不看好MBD。在实际中,也是大公司大项目用得多,小公司或者小项目很少使用MBD开发方法。MBD应用最为广泛的领域应属汽车电子领域了,有很多相关的产品和工具链,以后会单独讲讲MBD的相关产品和公司。
还有一种很有意思的现象,那就是有的工程师使用的是MBD开发方法的一部分,比如使用HIL( Hardware In the Loop )进行项目功能测试,但代码编写和调试依然是人工编写。当然,严格来说HIL是可以从MBD独立出来的,使用HIL不意味着就一定是MBD。
还有一种较为常见的开发方式,叫做快速开发原型( Rapid Control Prototyping,RCP )。RCP和MBD刚好相反,HIL是将控制对象进行建模,下载到实时操作系统中,控制器使用的是实际的控制器(HIL测试后会成为产品的控制器);而RCP开发过程中,控制器是原型控制器,控制对象一般是实际受控对象(也可以是仿真对象),原型控制器和最终的产品是两个东西,所以RCP只能用于验证软件算法,达不到产品级的验证。
提到HIL,就不免联系到SIL( Simulation In the Loop )、PIL( Processor In the Loop )和MIL( Model In the Loop ),这三种在环测试就和MBD有较强的联系了。如果在项目中使用到了这四种测试方法(包括HIL)中的一种或多种,同时还使用到代码自动生成(Code Generation),那么就可以认为使用的是MBD。当然,严格的来说,MBD的内容非常丰富,这里指的是很简单的概念。
具体而言,这四种在环测试的作用和实际应用情况如下:
SIL:该测试用于确定自动生成的代码是否能够正常工作,如果目标代码需要进行定点处理,SIL将起到非常重要的作用。此外我,生成的代码甚至有的还能保证满足功能安全要求(例如ISO26262)。如果是只涉及到浮点运算,SIL和PIL的作用显得很近似,这种情况下就没有单独进行SIL的必要了;
PIL:该测试用于确定处理器是否能够满足算力要求和数据精度,但实际项目中,前期的芯片选型阶段就会充分考虑算力和精度,而且一些经验也能判断出处理器算力和精度是否满足要求;
MIL:该测试用于确定算法的可行性,实际上算法不可行也就没有项目的确立,MIL最大的作用还是梳理项目的开发框架,是系统层面上的设计工作,还可以对不熟悉的领域或者相关知识进行学习;
HIL:该测试用于确定控制器是否能正常工程,控制对象一般是仿真模型,但是是跑在实时操作系统中的。如果受控对象并不复杂,也可以用真实的受控对象进行HIL测试。
2 MBD模型管理
这里引用一下MathWorks在Managing Model-Based Design一文中的一张图片来说明MBD是怎么运作的:
MBD是怎么运作的
如果有了解过的人,可能更多看到的是V型开发流程,关于V型开发流程以后细讲,这里主要在更高层面上讲一讲MBD是怎么运作的。
使用MBD方法开展项目开发,主要流程包含以下三点:
输入:MBD的输入是需求(requirements or Specifications)和已有的或公开的研究成果(Research);
模型迭代:这是MBD的核心,也是高效实现MBD的关键,模型迭代就涉及到上述的MIL、SIL、PIL、HIL和RCP,这些都不是必须的,根据项目的实际情况进行相应的测试即可;
输出:即自动生成的代码、模型报告、测试报告,以及验证报告。
MBD有一个很显著的特点就是,可记录、可追踪的文本记录,因此需要专门的工具,例如Simulink Requirements工具(也有其他的一些第三方工具)。模型是基于需求创建,每一个需求都有对应的模型。同时在模型迭代中,都会生成相应的模型报告或者测试报告。因为所有的这些工作都是围绕模型展开的,所以被称为基于模型的设计。
以上这三点都包含了很丰富的内容,这里没有讲的很深入,因为如果只是文字描述的话,会很抽象。以后会结合实例,具体细致地讲各个环节应该做的工作。
实际上,从我的观点来看,MBD更像是一种项目管理方法,并不是开发方法。我们管理的对象是模型,对模型进行迭代和测试。而类似Simulink Requirements这样的工具也是一个管理工具。而在MBD之下,就是具体的开发方法了,即上述的MIL、HIL等。对工程师而言,更多使用到的是开发方法,所以提到MBD就和MIL、HIL这些等价起来。很多团队在实施MBD的时候,就不关心模型管理的问题,只是使用MIL、HIL等开发方法,这就可能导致最终的效果并没有很好,所以也就有老工程师不看好MBD。