![Page 1: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/1.jpg)
1© 2016 The MathWorks, Inc.
统一的模型和代码验证
23 June 2016
宋 登 Application Engineering
![Page 2: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/2.jpg)
2
为何做?
当前大多数控制系统软件既包含模型自动生成代码又包含手写代码
如何高效的测试混在一起的手写代码和自动生成代码呢?
MathWorks提供了不同的工具用于测试模型和代码
有没有一个流程可以以最高效的方式使用这些工具呢?
![Page 3: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/3.jpg)
3
如何做?
功能测试之前模型和代码的静态分析
动态测试:对模型、S-function和自动生成的代码进行功能验证
静态分析集成的代码:手写代码、S-function和自动生成代码
统一的、互为补充的模型和代码验证流,持续提高产品信心
![Page 4: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/4.jpg)
4
案例研究: 巡航定速控制应用
65 mph
目标: 根据驾驶员的操控和车辆的运行工况设定目标速度和踏板位置
巡航定速控制应用 (C 代码)
• 手写代码模块单元
• 基于模型的Stateflow模块单元
• 基于模型的S-function模块单元
![Page 5: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/5.jpg)
5
案例研究: 巡航定速控制系统架构
巡航定速控制系统
读取输入
故障日志
踏板命令控制模块
控制输出
手写代码
自动生成代码
S-function代码
目标速度控制模块功能调度
系统输入
Cruise Power
Brake
Vehicle Speed
Coast/Set
Accel/Resume
系统输出
Target Speed
Engaged
Pedal Position
![Page 6: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/6.jpg)
6
案例研究: Roles & Workflow
MBD 控制模块负责人: Chuck– 基于Simulink模型进行开发– 通过s-functions在模型中集成C代码– 产生代码– 依靠基于模型的测试方法
集成和编译负责人: Anthony– 基于手写C代码进行开发– 集成手写代码和自动生成代码– 创建ECU编译– 依靠HiL设备进行测试
读取输入
故障日志
控制输出
巡航定速控制应用系统
目标速度控制模块
踏板命令控制模块
自动生成的C代码
集成的C 代码
![Page 7: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/7.jpg)
7
案例研究: 向客户提交第一个发布版本
向客户提交的第一个版本必须包含如下新功能/改变:
目标速度模块中的信号/标定量从浮点类型转为整型
在踏板命令模块中包含用户的查找表以便支持标定
展示生成的代码是遵循MISRA编码规范的
移除无用的故障记录
移植代码运行在用户的 ECU (14-bit to 12-bit ADC)
除了这些改变,我们还需要向用户提供基于模型的模块和集成代码功能测试报告。
![Page 8: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/8.jpg)
9
基于模型的设计任务
首先关注在基于模型的设计任务中可以进行哪些检查:
将目标速度模块单元中的信号/标定量从浮点类型转换成整型
在踏板命令模块中包含用户查找表以便支持标定
展示自动生成的代码是MISRA规则兼容的
我们的方法将会在功能测试之前进行检查,在开发过程的早期最小化返工
![Page 9: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/9.jpg)
10
浮点型到整型的转换: 检查模型中设计错误
Simulink Design Verifier识别可以产生“dead logic”的模型设计错误,确保功能测试能够顺利进行
目标速度控制模块
![Page 10: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/10.jpg)
11
Dead Logic的根源分析/修复
Dead logic 是因为 incdec/holdrate*10 中的“uint8”运算
Fix: 改变运算顺序为10*incdec/holdrate
条件不可能为false
![Page 11: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/11.jpg)
12
基于模型的设计任务
首先关注在基于模型的设计任务中可以进行哪些检查:
将目标速度模块单元中的信号/标定量从浮点类型转换成整型
在踏板命令模块中包含用户查找表以便支持标定
展示自动生成的代码是MISRA规则兼容的
我们的方法将会在功能测试之前进行检查,在开发过程的早期最小化返工
![Page 12: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/12.jpg)
13
用户查找表: 检查 S-Function代码是否含有Runtime Errors踏板命令控制模块
![Page 13: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/13.jpg)
14
S-Function中Run-time Errors的根源分析/修复踏板命令控制模块
![Page 14: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/14.jpg)
15
基于模型的设计任务
首先关注在基于模型的设计任务中可以进行哪些检查:
将目标速度模块单元中的信号/标定量从浮点型转换成整型
在踏板命令模块单元中包含用户查找表以便支持标定
展示自动生成的代码是MISRA规则兼容的
我们的方法将会在功能测试之前进行检查,在开发过程的早期最小化返工
![Page 15: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/15.jpg)
16
使用Model Advisor检查MISRA规则兼容性 目标速度控制模块
![Page 16: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/16.jpg)
17
目标速度控制模块使用Model Advisor检查MISRA规则兼容性
![Page 17: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/17.jpg)
18
检测模型设计和代码生成配置 提高产生遵循 MISRA C:2012 编码规范的代码
使用Model Advisor检查MISRA规则兼容性 目标速度控制模块
![Page 18: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/18.jpg)
19
从模型中配置 Polyspace 验证选项目标速度控制模块
![Page 19: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/19.jpg)
20
从模型中启动 Polyspace 进行验证 目标速度控制模块
![Page 20: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/20.jpg)
21
查看 Bug Finder MISRA 分析结果目标速度控制模块
![Page 21: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/21.jpg)
22
设置 “Code Placement” 减少 MISRA 冲突目标速度控制模块
![Page 22: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/22.jpg)
23
通过添加注释解释其它MISRA冲突目标速度控制模块
![Page 23: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/23.jpg)
24
基于模型的设计任务
首先关注在基于模型的设计任务中可以进行哪些检查:
将目标速度模块单元的信号/标定量从浮点型转换为整型
在踏板命令模块单元中包含用户的查找表以便支持标定
展示自动生成的代码是MISRA规则兼容的
我们的方法将会在功能测试之前进行检查,在开发过程的早期最小化返工
![Page 24: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/24.jpg)
28
基于模型的测试
所有的检查结束后,我们将为基于模型的模块产生测试结果:
基于踏板命令模块对s-function进行功能测试
目标速度模块的等效性测试(model-to-code)
![Page 25: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/25.jpg)
29
踏板命令(S-Function)的功能测试踏板命令模块
对模型 和 s-function 代码进行覆盖率分析
![Page 26: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/26.jpg)
30
基于模型的测试
所有的检查结束后,我们将为基于模型的模块产生测试结果:
基于踏板命令模块对s-function进行功能测试
目标速度模块的等效性测试(model-to-code)
![Page 27: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/27.jpg)
31
检查生成的代码与模型行为的一致性
集成的 SIL 模式支持模型到代码的等效性测试
自动生成代码的覆盖报告用于详细的等效性分析
![Page 28: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/28.jpg)
32
基于模型的测试
所有的检查结束后,我们将为基于模型的模块产生测试结果:
基于踏板命令模块对s-function进行功能测试
目标速度模块的等效性测试(model-to-code)
![Page 29: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/29.jpg)
33
集成的代码测试
手写代码设计任务:
移除无用的故障记录
移植代码到用户的 ECU (14-bit to 12-bit ADC)
少量手写代码改变已经完成。
基于集成的手写代码和生成代码的ECU 编译已经创建
我们现在需要产生集成的代码在HiL设备上的功能测试结果
发现这些已经测试过的模块在代码集成过程中引入的缺陷(手写代码、s-function代码 和 基于模型生成的代码)。
![Page 30: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/30.jpg)
35
通过HIL测试发现的缺陷…
在故障检测中巡航速度控制关闭
并且, 目标速度从未超过 40 mph
![Page 31: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/31.jpg)
36
读取输入 写入输出 调度算法 故障日志
目标速度控制模块
踏板命令模块
创建Code Prover 工程检查集成代码
![Page 32: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/32.jpg)
37
使用 Polyspace 进行代码集成检查:
手写代码中的 Non-terminating loop缺陷故障日志
![Page 33: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/33.jpg)
38
故障检测中巡航速度控制关闭的原因故障日志
![Page 34: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/34.jpg)
39
巡航速度控制关闭的根源
1210
故障日志
![Page 35: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/35.jpg)
40
修复并验证手写代码中已经排除 Runtime Errors故障日志
![Page 36: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/36.jpg)
41
使用Polyspace 进行代码集成检查:
自动生成代码中的Dead Code
Unreachable/Dead code
Maximum target speed = 90Vehicle speed signal propagated to
“CruiseControl_PS.c” [0 … 40]
目标速度控制模块
![Page 37: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/37.jpg)
42
Dead Code 产生的根源:
Speed Sensor Input Hand Code
14 to 12-bit的模拟-数字转换器的改变导致了dead code
MASK – accounts for scaling down
for new ADC from 14-bit to 12-bit
Overlooked changing
CONV_FACTOR for new ADC
读取输入
![Page 38: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/38.jpg)
44
巡航速度控制系统
MBD
生成代码
流程小结:
模型&代码验证互为补充
• 功能测试(simulation)
• 通过模型早期检查设计缺陷
• 检测MISRA编码规范 (Mdl Advisor)
• 检查s-function代码的run-time errors
• 检查MISRA 编码规范 (Polyspace)
• 代码覆盖率 (SIL)
• SIL 模式支持
• 检查集成代码的run-time errors手写代码
![Page 39: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/39.jpg)
45
互为补充的模型验证和代码验证过程 …
功能测试之前的模型和代码检查减少返工
基于模型进行功能测试、动态测试 并且 自动完成代码结构分析、重用测试资源
分析代码找出如下代码集成过程中引入的缺陷:o 手写代码
o s-function代码
o 基于模型生成的代码
除功能测试之外引入形式化分析方法
实现了模型和代码的早期验证
持续提高产品信心
![Page 40: 统一的模型和代码验证 - MathWorks · 2 为何做? 当前大多数控制系统软件既包含模型自动生成代码又包含手写代码 如何高效的测试混在一起的手写代码和自动生成代码呢?](https://reader033.vdocuments.net/reader033/viewer/2022042515/5f6ba51143ba70634e218502/html5/thumbnails/40.jpg)
46
Thank You!