第一章 概念
1. 什么叫基于模型(MBD)的设计?
通过对算法建模进行软件设计的过程
2. 为什么要基于模型的设计?
a. 传统的开发模式的一些固有属性导致错误不能及时修复,错误修复的每次拖延造成修复费用的指数级增长,而基于模型开发可以实现早期的验证和持续验证;
b. 随着汽车四化的推进,性能功能的提升,使得汽车上代码量爆炸式的增长,导致代码的质量受到严峻考验,而基于模式开发可以实现自动代码生成,提升代码质量,同时也可以减少人力资源消耗;
c. 传统开发模式过程中工程师需要花大量时间编写文档,由于开发时间短导致很多文档不能及时输出,而基于模型开发可以实现文档自动化,至少有相当大的一部分文档可以让计算机替我们编写。
3. 基于模型的设计过程中,需要做什么事情?
a. 需求分析
b. 架构设计
c. 模型实现
d. 单元验证及测试
e. 软件集成及测试
f. 代码生成及测试
g. 软硬件的集成测试
第二章 满足ISO26262的基于模型设计
软件开发V流程
一、需求分析阶段
1. 需求分析阶段关注点:
Ø 可实现性;
Ø 可测性;
Ø 可追溯性
Ø 模型架构设计;
Ø 可配置;
推荐工具:DOORS、Word、Excel等(灵活)或者Simulink Requirements
二、架构设计阶段
1. 软件架构设计原则:模块化、层次化
Ø 模块划分的原则,推荐从功能上划分,尽可能的满足高内聚低耦合;
Ø 模块划分的目标:简化设计、便于分工、便于测试、便于后期维护;
2. 推荐工具:支持Autosar的Vector Davinci,Malab自带的System composer,可以结合需求确定架构同时定义好接口如下图所示:
可以直接由System Composer生成Simulink的接口和软件框架,这样在架构设计阶段就可以直接将生成模型与模型设计人员进行讨论,没有问题的话就可以直接分配给对应模块的工程师进行软件开发
三、模型建立阶段
1. 建模语言:
a. 使用建模语言子集,用最安全最可靠的功能实现;如根据经验建立的可用模块库。
b. Simulink和stateflow之间的选择:如果算法是复杂的逻辑运算使用stateflow
c. 如果主要是数据运算建议使用simulink;
d. Stateflow的 flow chart和state chart之间的选择:
e. 如果算法本质是计算工作状态或者离散状态,建议state chart
f. 如果算法本质是if-then-else的结构,建议使用flow chart或者true table;
宗旨:怎么方便怎么来,让模型简单便于维护
2. 建模标准:
参考建模规范(MAAB)及经验论,如不能有隐含的数据流或者控制流;
3. 模型复杂度:
可以通过Model Advisor进行运行时检查,圈复杂度建议不超过一定的限值;
4. 平台化开发:
可以考虑通过使用Model Variants;
四、单元验证及测试
1. 建模规范检查(静态):
a. 参考指定的建模规范包括MAAB、ISO26262、MISRA、企业经验等配置相应的检查项点;
b. 推荐工具:Simulink Check-Model Advisor,生成相应的测试报告。
2. 模型评审:
人工的评审的方式。
3. 形式化验证(运行时):
a. 主要检查项点包括是数据否存在越界,除0,溢出;
b. 推荐工具:Simulink Design Verifier。
4. 功能测试;
a. 基于功能性需求的测试;
b. 覆盖率:分支覆盖率、边界值,MC/DC要求(ASILD);
c. 推荐使用工具:Simulink Test、Simulink Coverage(测试框架搭建,测试用例编写,覆盖率分析,报告自动生成,测试报告分析等)
五、代码生成及验证
1. 代码生产的前提条件
模型经过充分验证,模型符合建模标准、功能测试覆盖率足够高、模型不含有无效逻辑、模型不含有错误;
2. 代码生成的主要工作
a. 数据对象和数据管理
Ø 使用数据对象定义数据属性(用户自定义数据类型对象和存储方式)
Ø 使用数据字典管理数据对象
另外,一个 model 可以配置多个数据字典,对于复杂系统可以用model reference,每一个reference建立一个数据字典,便于测试和独立开发。
b. 代码生成工具配置
Ø 求解器设置:(实时执行任务调度,所有模块的速率必须是基速率的整数倍,做好数据保护)
Ø 系统目标文件配置ert.tlc
Ø 代码生成报告配置
Ø 代码生成
Ø 生成的代码模块
Ø 生成的函数模块
Ø 定义与声明信号
Ø 定义与声明参数
Ø 数据结构体符号
Ø 外部代码集成
Ø 生成代码优化(静态代码量的度量、无效代码的移除)
综述:根据自身的使用尽量固化配置,不能轻易变更开发环境。
3. 等效性测试(SIL)
a. 验证生成的代码和用于生成代码的模型具有相同的行为属性,代码与模型的等效性测试;
b. 模型覆盖率和代码覆盖率比较,推荐工具Simulink Coverage
六、集成及集成测试
1. 集成方式:
a. 单元模型代码生成,代码级别做集成;
b. 模型级别做集成,然后生成代码;
2. 集成测试
a. 接口测试;
b. 函数,任务调度,模块运行时序;
另测试环境包括Simulink、
3. 软硬件的系统集成测试
a. 硬件在环测试HIL:推荐工具链为Dspace、NI等;
b. 台架测试
c. 实车测试
内容比较简单,但是整体流程和重点项都有设计,不足之处,请大家批评指正。



