有关基于模型的设计(MBD)一些概念和理解(zz)

基于模型的设计(MBD)是指使用Simulink模型开发嵌入式软件的过程,强调算法建模、验证、代码生成和文档自动化。通过模型验证可以早期发现错误,提高开发效率和软件质量。代码生成能实现算法的早期验证,文档自动化减少手动文档工作。MBD流程包括模型验证(模型检查、评审、单元测试、快速原型)和代码生成后的SIL、PIL、HIL测试。对于底层驱动,通常不需要建模,因为无法仿真且需熟悉TLC语言。MATLAB生成的ANSI C代码支持所有编译器,Target Support Package适用于快速验证而非产品化解决方案。
摘要由CSDN通过智能技术生成

http://www.matlabsky.com/thread-38774-1-1.html

本文转载于MathWorks 中国高级工程师董淑成的帖子内容为了方便阅读,对原文进行了重新整理编辑

之前有网友引发了一些讨论,为了方便大家进一步讨论,专门开贴,讨论基于模型的设计题目有点大,以我的个人经历,我只能说说基于模型的嵌入式软件设计,我先抛砖引玉吧

先胡乱问几个大问题:

  • 什么叫基于模型的设计?
  • 为什么要基于模型的设计?
  • 基于模型的设计过程中,需要做什么事情?

再问几个小问题:

  • 模型验证是否必要?
  • 模型验证有哪些工作可以做?
  • 模型验证是否一定需要被控对象模型?
  • 代码生成效率如何?
  • 底层驱动是否要建模?
  • Embedded Coder(以前的RTW Embedded Coder)支持哪些芯片?
  • MILSILPIL、HIL的目的和实现方式?
  • 如何定点化?
  • 如何做代码集成?

也希望版上的网友提出各自的问题及见解,我们一起讨论

什么叫基于模型的设计?

这是一个很大的话题,因为本人能力所限,仅讨论使用Simulink模型开发嵌入式软件的设计过程。也就是说,我只能聊基于模型的嵌入式软件设计。

我的理解是,通过对算法建模进行软件设计的过程,都可以叫基于模型的设计。

当然,如果仅限于算法建模,把Simulink/Stateflow当做Visio使用,而不去进行其他环节的工作,这样的基于模型设计是不完整的,可能对你的开发效率不会有很大的提升。

如果想通过基于模型的设计提升软件开发团队的开发效率,提高软件品质,我觉得至少有如下几点可以考虑:

  • 算法模型的验证
  • 文档自动化
  • 代码和模型的等效性验证

传统的开发过程中,我们有一个环节,需求捕获,也即,从系统需求分解出软件需求。

在基于模型的设计过程中,我们同样可以通过分析系统需求,获得软件需求。当然,根据系统需求的详细程度,我们可以考虑是否要写专门的软件需求。

在基于模型的软件设计中,我们主要关心的是系统的功能需求,或者说可以通过软件实现的功能需求。如果这部分需求在系统需求文档里已经有非常清楚的定义,那么我们可以以系统需求文档作为依据建立模型。

当然,如果系统需求不是足够清楚,那我们有必要编写专门的软件需求文档。如果不考虑Simulink/Stateflow的应用上的问题,也就是说,如果我们都是熟练的Simulink/Stateflow用户,那么建模过程的主要工作是需求分析,通俗点讲,需求弄清楚了,建模也就是非常简单的事情了。当然,建模的时候,要考虑未来的验证、实现以及后期维护的问题。

我个人的体会,这个阶段,不要着急建模,一定要先弄清需求,另外,建模的时候,模型架构非常重要。

有了模型之后,接下来要做什么事情?代码生成?

这是很多比较初级的用户容易犯的错误,犯这个错误的用户,很大程度上是因为没有弄清楚为什么要做基于模型的设计?

为什么要做基于模型的设计?我相信很多用户没有仔细考虑这个问题,很多用户做基于模型的设计的理由是:国外的公司都这么做,同行其他公司都这么做......

弄清为什么要基于模型的设计,也就是要弄清楚基于模型的设计到底可以给我们带来哪些好处?

很多人会非常自然的想到,代码生成,代码生成可以提高软件开发效率。没错,代码生成是一个很大的好处,但,代码生成不是唯一的,也不是最大的好处。

代码生成最大的好处是,算法的早期验证,之前NASA有研究表明,开发初期引入的bug,如果到了晚期才发现出来,那么修复这一的bug,会产生非常大的费用。所以,我们期望能够尽早的发现开发过程中引入的bug。


如何尽早的发现设计上的错误?传统的开发模式里,我们使用review的方式去发现错误,在质量体系ISO9001里面有定义,任何一份设计,都必须要评审。评审的目的,也就是为了发现这个

基于模型设计(Model-based Design,MBD)是一种软件开发方法,通过使用数学模型和仿真工具,在软件开发的早期阶段,将系统需求和设计规范转化为可执行的模型。然后,通过模型验证、自动代码生成和测试自动化等过程,从而实现快速、高效的软件开发和验证。 我们以设计一款自动驾驶汽车的控制系统为例,来说明基于模型设计的实例。 首先,我们根据自动驾驶汽车的需求和规范,构建数学模型,并使用仿真工具进行验证。通过分析车辆动力学、传感器数据等信息,我们可以建立一个包含车辆控制系统和环境的模型。然后,我们在仿真环境中对模型进行验证,通过输入不同的场景和条件,评估系统的性能和安全性。 接下来,我们可以使用模型进行控制算法的开发。在设计控制算法时,我们可以使用模型驱动设计工具,如MATLAB/Simulink,来搭建控制逻辑的图形化模型。通过拖放和连接不同的模块,我们可以设计出满足需求的控制算法。 然后,我们可以使用模型自动生成代码。通过与目标硬件和软件环境的连接,我们可以将模型转化为可执行的代码。这个过程可以自动完成,减少了手动编写代码的错误和工作量。 最后,我们进行测试和验证。通过将生成的代码加载到目标系统中,我们可以进行实际的硬件测试,验证控制系统的性能。如果发现问题,可以通过修改模型来进行迭代和改进。 总之,基于模型设计提供了一种高效的软件开发方法。它可以帮助开发团队快速、准确地将需求转化为可执行的代码,并提供了大量的验证和测试手段,以确保系统的正确性和可靠性。这种方法在自动驾驶、航空航天等领域应用广泛,并为软件开发过程带来了更高的效率和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值