嵌入式软件模型化开发

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式软件模型化开发

随着现今社会的进步和发展,嵌入式系统开发经逐步面临着市场需求多样性与开发实现快速性之间的矛盾。然而传统的嵌入式系统开发模式,从需求分析、设计、实现到测试的顺序开发过程中由于开发环节较多、中间文档较多,常导致各开发环节之间的衔接存在很大的不确定性和潜在的遗漏危机,一旦在最终实现和测试阶段出现了明显的错误或是需求不满足的情况,则无法进行跨越阶段的重复设计,只能从头开始设计和实现,这样将无法满足市场对产品开发周期的快速性需求,使嵌入式系统开发陷入设计瓶颈。目前,依靠手工编程的设计流程已经很难胜任新的开发需求,而且通过手工编写的代码容易产生程序缺陷。查找和解决这些问题不仅要花费大量的人力和时间,有时甚至会导致软件的重新开发。特别是在对安全系数要求较高产品上,出现程序缺陷会直接关系到人身安全。因此,近几年汽车电子行业的一些龙头企业已经通过代码自动生成的方法逐步取代了传统开发模式下的手工编程,收到了良好的效果[1],这就是模型化的嵌入式软件开发方法。

一、基于模型的设计方法

1.1基于模型设计思想简介

基于模型的设计(Model Based Design),就是在系统的设计过程之中,所有信息传递、工作的核心与基础都是若干模型,所有工程师都利用同一的模型完成自己关注的开发任务。如今基于模型的设计思想已经被大家广泛的认可,基于模型的设计流程使用的是框图化开发环境,系统开发工程师在这个环境中构建嵌入式系统的可执行模型。

1.2 传统设计方法与基于模型设计方法的对比

1 传统设计方法的缺陷

传统的开发手段是自顶向下、逐步细化的“瀑布式”开发手段,如图1所示。

图1嵌入式系统传统设计方法

在传统的设计过程中,不同类型的工程师彼此交换自己的设计成果,逐步细化设计任务,直到完成最后的产品。这种自顶向下的开发流程具有快速便捷、易于实现的特点。但是,随着嵌入式系统本身复杂程度的增加以及设计研发周期缩短和市场的压力等诸多原因,传统的设计开发手段逐渐暴露出许多问题。

首先在传统的开发手段中,在不同阶段彼此之间传递的信息需要依赖文档,例如需求分析报告、系统详细设计规范、设计任务书、设计报告等。由于工程人员总会存在针对文字理解的二义性问题,因此即便是文档本身没有错误,可能也会由于理解上的误差而引起系统设计、实现的错误。其次,由于设计的嵌入式软件算法需要有专门的硬件生产出来之后才能够进行测试,因此,一些设计错误要在软/硬件产品都具备之后才能够进行集成与测试。但是这时发现错误就很难找出错误的原因,既有可能需要重新编写软件,甚至由于产品的更新换代造成整个计划的取消[2]。这个问题很难从根本上避免。在传统的设计手段中,整个程序都是利用手工编写的。使得系统的开发必须面对程序缺陷不断严重的现实,甚至程序缺陷还未解决,产品就已经更新换代。再次,无法做到所有开发人员都有同样的责任心,无法避免开发人员出错的可能性,最系统维护时也会遇到很大的困难。

2 基于模型设计方法的优势

在基于模型的系统设计过程中,执行不同设计任务的工程师彼此在统一的环境下完成开发工作,在他们之间传递的不仅仅是设计文档,还包含系统模型。当需要具体实现产品或者进行集成测试时,只要通过自动代码生成就可以迅速地完成代码生成、硬件实时仿真与测试,避免了大量的手写代码工作。这种方法主要解决了传统设计手段中手写规范文档、测试工作在后期阶段的主要问题。

模型工具选择Mathworks 公司推出的Simulink/Stateflow 可视化建模环境,为嵌入式系统的控制逻辑关系提供了一个平台及开发流程。通过加入可视化图形设计、快速原型化、迭代设计、系统仿真等众多新的元素,并在传统的顺序开发基础上提出了基于模型的设计流程和V 字型软件开发模式,如图2所示。

图2 基于模型设计的控制系统开发流程

图2是基于模型设计的控制系统开发流程,其符合经典V型控制系统开发流程的各个阶段。首先根据客户需求分析,利用Simulink及Stateflow工具进行目标模型和控制算法的初步建立。建立模型后,在Simulink环境下对目标模型及控制算法进行离线仿真测试,测试通过后利用RTWEC工具箱自动对控制逻辑生成代码。然后手工编写或用微控制器自带的工具生成与微控制器直接相关的底层控制驱动代码,经过规范有效的代码整合,供相应微处理器下载使用[3]。接下来就可以用下载了目标程序的ECU,利用硬件在环实时仿真环境,进行软件(ECU)在环测试,为实车测试做准备。最终实现产品开发,完成嵌入式控制软件的开发。

二、基于模型的嵌入式系统软件设计方法研究

2.1基于模型的嵌入式系统软件开发流程

图3 基于模型的开发方式

根据目标需求建立可执行模型,在代码自动生成之前进行全模块仿真,使用RTWEmbedded Coder 进行代码自动生成,用一个标准的软件体系结构进行代码整合。在需求分析阶段,需要根据产品的需求定义所需要完成的工作,以及工作结果需要满足的某种特性要求,并且分析出为了满足这些需求分别需要完成哪些工作,工作的步骤以及不同工作阶段的产出与验收手段等。在分析了客户需求后就可以开始在Simulink 环境下建立模型,模型的建立框架主要分为三大部分:信号输入部分,逻辑控制部分和信号输出部分。模型建立好后需要对模型进行仿真、验证,仿真测试通过后使用RTWEC 进行代码自动生成。然后用一种标准的形式将手写的底层驱动代码与自动生成的代码进行代码整合。最后将整合好的代码固化于微控制器中。

2.2控制算法的建模与仿真

为了实现基于模型的嵌入式系统开发方法,首先要建立ECU 仿真模型,在后续开发流程中所有环节都是围绕模型进行的。

1 建模工具的选择

在进行基于模型的设计过程中,建模是一个重要环节。因为只有正确的模型才能够成为正确的设计规范,才能得到正确的代码。建模环节需要选择合适的建模工具。目前在世界范围内,系统的建模仿真都广泛采用了Mathworks 公司开发的Simulink平台。Simulink 平台提供丰富的功能模块,可以快捷地创建系统的模型[4]。

在模型建好后,即可运行模型以实现离线仿真,通过系统的各种输出来验证系统模型的性能或是控制算法的效果,然后根据预期目标来测试模型或控制算法的效果,然后根据预期目标来对模型或控制算法进行参数优化。此外,通过Simulink 设计的系统模型可以通过Simulink 中的RTWEC 工具箱为控制器生成代码,交叉编译,连接并固化到目标处理器上,进行硬件在环仿真。对控制逻辑部分的建模采用了Stateflow 工具箱。Stateflow 是Simulink 平台上的图形化设计与开发工具,主要用于针对控制系统中的复杂控制逻辑进行建模与仿真。利用Stateflow 可视化的模型和直观的仿真能力,可以清晰、简洁地反映出复杂动态逻辑关系。Stateflow 的基础是有限状态机理论,它通过对状态图、流程图的创建,对事件驱动系统进行建模和仿真。

2 信号输入部分建模

信号输入部分的建模是通过Simulink 平台上Sorrces 模块库中的各个模块来建立的。常用来搭建模型的有Constant 模块、Pulse Generator 模块、Signal Builder 模块、Step模块等。其中Signal Builder 模块可以创建产生多组信号。

3 控制算法建模

状态的标签一般可以由三个部分组成:状态名称Name;相应的状态动作State Action;注释部分/*………*/。

4 信号输出部分建模

信号输出部分的建模是通过Simulink 平台上Sinks 模块库中的各个模块来

建立的。常用来搭建模型的有Display 模块、Scope 模块、ToWorkspace 模块等。其中Scope模块把信号按照时间的顺序在二维坐标轴上显示出来。

5 模型的仿真

在嵌入式系统开发过程中,验证设备和控制器在整个系统行为范围内能够正确运行的理想方法是,用实际设备进行测试。但是这种系统级的测试一般在产品开发过程的晚期进行,这时已经建立原型硬件,解决开发周期这一阶段所发现问题的成本非常昂贵。因此,使用系统仿真在系统开发的早期进行测试来发现和解决问题是解决方案。采用基于模型的设计方法,在软件的开发中的每一个流程都可以进行测试。模型仿真测试是控制系统设计过程的组成部分,根据目标需求建立系统模型后,为了保证模型可靠有效,还必须使用基于时间或基于事件的仿真分析方法,来验证模型的准确性和完整性[5]。这样在系统开发的初级阶段就可以发现控制逻辑的设计缺陷,最大程度的减少带到实验现场的出错率。这也为后序的自动代码生成的质量提供了可靠依据。

2.3控制逻辑模型自动代码生成

在基于模型的嵌入式系统开发方法中,自动代码生成是不可缺少的环节。只有从控制模型自动生成ECU中运行的控制代码,才有可能实现开发过程中快速迭代。自动代码生成,指生成程序的程序,更详细的是指通过读取工程中的文本或模型,按照指定的设计模式,遵照一定的领域规则,生成规范的计算机能理解的代码的过程。

RTWEC(Real-Time Workshop Embedded Coder)是专门针对嵌入式系统的代码自动生成工具,它可以将Simulink 平台上建立的模型生成标准的C 代码,并且所生成的代码结构紧凑,运行效率较高[16]。RTWEC 是Mathworks 公司在原有RTW 工具的基础上推出了更加完善

相关文档
最新文档