汽车中的V流程开发
各步骤的简介各步骤的简介
(1)Control Design and offline Simulation:算法模型构建和离线仿真(基于模型的设计)。算法工程师用Matlab模型实现算法;并实施离线仿真,验证算法。
(2)Rapid Control Prototyping:快速原型。算法工程师将上一步构建好的算法模型下载到快速原型设备中,并使用快速原型设备控制车辆,并实施在线仿真,验证算法。请注意,这一步的仿真是在线仿真,而上一步则是离线仿真。
(3)Automatic Code Generation:自动代码生成。通过软件将算法模型自动生成C代码。
(4)HIL:硬件在环。此时,上一步生成的C代码已经验证完毕,并下载到了量产ECU中。在这一步,用量产ECU驱动车辆,以验证量产ECU的软件、硬件。
(5)Calibration:标定。在这一步,主要是为了优化软件中的参数使得车辆各方面性能达到最佳。
一、基于模型的设计(Model Based Design,MBD)是什么?
1.基于模型的开发是一种软件开发方法
传统的嵌入式软件开发方法:算法工程师编写算法文档,程序员根据算法文档手写代码(C或汇编语言),代码完成之后下载到嵌入式硬件中验证算法、软件是否正确。
与传统的方法相比,基于模型的开发有以下优点
(1)可运行的算法。基于模型的开发中算法 = Matlab模型 ,Matlab模型是可以运行的。因此算法工程师在构建模型之后可以运行模型对算法实施验证,确认算法是否符合预期。这样,可以更早地发现算法中的错误。
(2)自动生成代码。传统方法中需要由程序员根据算法手写代码,而基于模型的开发则可以通过Targetlink等代码自动生成软件将算法直接转变为C代码。这个过程不但缩短了代码开发的时间,而且还大大地提升了代码的整体质量和可靠性。因为Targetlink生成的代码一般比3年经验的程序员手写的代码质量要高。
二、快速原型是什么?
快速控制原型
1、快速原型的设备有什么?
这就不得不提到牛逼的dSpace盒子
<img src="https://pic4.zhimg.com/50/287c9ef96327c7fe680b6f9d9bb77197_hd.jpg?source=1940ef5c" data-rawwidth="632" data-rawheight="312" class="origin_image zh-lightbox-thumb" width="632" data-original="https://pic4.zhimg.com/287c9ef96327c7fe680b6f9d9bb77197_r.jpg?source=1940ef5c"/>
在硬件出来之前:
对于硬件系统(mechanic and electronic)建模:
1 Matlab/Simulink可完成mechanic 和传感器,促动器的建模
2 microautobox就是electronic硬件,也相当于就是很多ECU的组合,它比汽车单个的ECU功能强大的多。你可以只当一个ECU来用,也可以当多个ECU来用。
3 这个盒子硬件部分可以接传感器,促动器。软件可以接Matlab/Simulink
4 我们在Matlab/Simulink里面设计控制算法,比C更直观容易理解
5 算法自动转码成C Code到这个盒子
6 dspace还有对应软件可以看输出端实时(realtime)响应曲线
等汽车造出来以后
7 电脑--------盒子------CAN BUS------汽车连接起来 (这就是HIL的一种,什么是Hardware In the Loop 就不细说了)
8 一个人开车,一个人坐在副驾驶座上用软件实时的调节各项参数
9 所有都合适之后,生产单个的ECU(发动机ECU,ABS的ECU,ESP的ECU......)
10 FINAL TEST
11 well done!给汽车工程师发奖金
2、dspace简介
dSPACE的作用 对整车厂来说,dSPACE是一个卓越的基于模型开发相关的软件、设备、工程服务供应商。
自动代码生成软件,dSPACE有Targetlink(行业标杆)。 快速原型设备,dSPACE有MicroAutoBox+RapidPro设备(行业标杆,但是很贵,好多公司都改用更便宜的MotoHawk了)。
硬件在环设备,dSPACE有HIL设备(行业标杆,但是很贵,好多公司都改用更便宜的ETAS、NI了)。
此外,关于如何改进整个基于模型的开发流程,以及如何满足ISO26262、AUTOSAR标准,dSPACE提供相关的工程服务(嗯,很贵)。
三、自动代码生成
- 首先系统和功能设计工程师需要制定软件的功能和需求,并设计控制模型,系统和功能设计工程师可能完全不懂C代码。
- 之后功能设计工程师提供具体的需求和设计说明书给软件工程师或者外包公司的码农。
- 码农将系统工程师的设计理念从模型转化为C代码,编译后刷写到电子控制器。
- 最后系统工程师或者测试工程师再拿到刷写好的软件去测试自己设计的功能。
- 那么相对于上面的手动C代码,基于模型的设计有显而易见的巨大进步:
- 节约了闭环设计中无数的时间和人力成本,那一房间上百个码农都可以节约下来了。
- 系统和功能设计工程师可以独立完成软件的输出,可以很容易避免因为技术文档描述不准确或者歧义而导致的从功能到代码的错误设计。
- 软件功能修改后可以快速自动生成代码而不需要经过复杂的流程由码农来做修改。
- 软件一致性不会像以前一样因为使用不同的码农而不同,代码也会由自动工具统一优化。 图形化的软件设计和Windows一样更易懂,类似Simulink中完整的诊断和查询显示功能也可以更容易对软件进行纠错,找到bugs。
四、硬件在环
硬件在环仿真
判断一个设备是做RCP还是HIL的直观方法是:看设备的大小。
一般情况下,相对而言,被控对象模型比控制算法模型复杂,所以HIL对CPU算力的要求比RCP更高,因此HIL实时主机机箱比RCP的大;另外,HIL可能会涉及到程控电源、信号调理、故障注入等,所以HIL设备会有更多的附件。因此,比较小巧简洁的是RCP设备,比较大且复杂的HIL设备。
比如,RCP设备甚至有下图这种手掌大小的。
<img src="https://pic2.zhimg.com/50/v2-b0129c9ef9c037019bf14bb1529980ef_hd.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="403" data-rawheight="238" data-default-watermark-src="https://pic1.zhimg.com/50/v2-a6b0ee095a9f15ed999651ca9e8df33f_hd.jpg?source=1940ef5c" class="content_image" width="403"/>
HIL设备有桌面式的,也有机柜式的。
桌面式如下图左侧设备:
<img src="https://pic3.zhimg.com/50/v2-e1258efb338d4e2dbf9447e9fdb20e74_hd.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="1883" data-rawheight="539" data-default-watermark-src="https://pic2.zhimg.com/50/v2-90dfc312142365816c1709ee00ddd82b_hd.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="1883" data-original="https://pic2.zhimg.com/v2-e1258efb338d4e2dbf9447e9fdb20e74_r.jpg?source=1940ef5c"/>
截图引自MathWorks公开课视频,链接如下:
Using Speedgoat Target Computer Hardware for Simulink Real-Timewww.mathworks.com
集成程控电源、信号调理板卡、故障注入板卡等的机柜式HIL设备如下图(引自MathWorks官网):
<img src="https://pic4.zhimg.com/50/v2-c98d242578f8445c83f2dbb959880531_hd.jpg?source=1940ef5c" data-size="normal" data-rawwidth="281" data-rawheight="718" data-default-watermark-src="https://pic4.zhimg.com/50/v2-143363e1a9fde64a43f245770533293e_hd.jpg?source=1940ef5c" class="content_image" width="281"/>
转自:https://www.zhihu.com/question/369208008/answer/1066342163
硬件在环和快速控制原型
(百度百科中的解释)
汽车中的V流程开发的更多相关文章
- fir.im Weekly - iOS开发中的Git流程
本期 fir.im Weekly 收集了微博上的热转资源,包含 Android.iOS 开发工具.源码等好用的轮子,还有一些 APP 设计的 Tips,希望对你有用. 精仿知乎日报 iOS 端 @我偏 ...
- 【转】windows和linux中搭建python集成开发环境IDE
本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...
- Oracle数据库中调用Java类开发存储过程、函数的方法
Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日 浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...
- 第二十三篇:在SOUI中使用LUA脚本开发界面
像写网页一样做客户端界面可能是很多客户端开发的理想. 做好一个可以实现和用户交互的动态网页应该包含两个部分:使用html做网页的布局,使用脚本如vbscript,javascript做用户交互的逻辑. ...
- K2 blackpearl 流程开发(二)
转:http://blog.csdn.net/gxiangzi/article/details/8444590 本来想一篇文章把流程开发介绍完的,后来发现实在是太多了,只好分成两部分了.上一篇很简单的 ...
- K2 blackpearl 流程开发(一)
转:http://blog.csdn.net/gxiangzi/article/details/8444060 郁闷,今天K2的license过期了,很多东西都没法用了,还得去找PM大大帮忙申请一个. ...
- zigbee学习:示例程序SampleApp中按键工作流程
zigbee学习:示例程序SampleApp中按键工作流程 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:IAR8. ...
- Systemd初始化进程/RHEL 6系统中System V init命令与RHEL 7系统中systemctl命令的对比
Linux操作系统的开机过程是这样的,即从BIOS开始,然后进入Boot Loader,再加载系统内核,然后内核进行初始化,最后启动初始化进程.初始化进程作为Linux系统的第一个进程,它需要完成Li ...
- APP开发过程中需求变更流程
在APP开发过程中,不可避免的会有需求变更,从以往项目开发过程总结发现,需求变更太频繁,产品一句话需求,没有形成良好的版本迭代概念,频繁的变动影响开发交付日期,但是交付日期又是定死的,严重拖累了开发及 ...
随机推荐
- 小白都能看懂的tcp三次握手
众所周知,TCP在建立连接时需要经过三次握手.许多初学者经常对这个过程感到混乱:SYN是干什么的,怎么一会儿是1一会儿是0?怎么既有大写的ACK又有小写的ack?为什么ACK在第二次握手才开始出现?初 ...
- oracle plsql手动修改数据
转至:https://blog.csdn.net/Ranchonono/article/details/87690830?spm=1001.2101.3001.6650.1&utm_mediu ...
- 磁盘管理及shell脚本编程练习
转至:http://www.178linux.com/88405 1.创建一个10G分区,并格式为ext4文件系统 a) 要求其block大小为2048,预留空间百分比为2,卷标为MYDATA,默认挂 ...
- LINUX服务器常用命令
转至:https://my.oschina.net/7shell/blog/70508 常用命令 查看所有80端口的连接数 1. netstat -nat|grep -i "80" ...
- Flutter 设计模式|工厂模式家族
文/ 杨加康,CFUG 社区成员,<Flutter 开发之旅从南到北>作者,小米工程师 在围绕设计模式的话题中,工厂这个词频繁出现,从 简单工厂 模式到 工厂方法 模式,再到 抽象工厂 模 ...
- LeetCode-092-反转链表 II
反转链表 II 题目描述:给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right .请你反转从位置 left 到位置 right 的链表节点,返回 ...
- 面试官:Redis中哈希数据类型的内部实现方式是什么?
面试官:Redis中基本的数据类型有哪些? 我:Redis的基本数据类型有:字符串(string).哈希(hash).列表(list).集合(set).有序集合(zset). 面试官:哈希数据类型的内 ...
- springboot-jta-atomikos多数据源事务管理
背景 我们平时在用springboot开发时,要使用事务,只需要在方法上添加@Transaction注解即可,但这种方式只适用单数据源,在多数据源下就不再适用: 比如在多数据源下,我们在一个方法里执行 ...
- Linux备份数据库,mysqldump命令实例详解
mysqldump是mysql数据库中备份工具,用于将MYSQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中. 语法: mysqldump (选项) 选项: --add-drop-ta ...
- 【图片+代码】:GCC 链接过程中的【重定位】过程分析
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). ...