各步骤的简介各步骤的简介

(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年经验的程序员手写的代码质量要高。

二、快速原型是什么?

快速控制原型(Rapid Control Prototype,简称RCP)。实时硬件运行Simulink控制算法(模拟控制器),控制真实被控对象(如开关、电磁阀、电机、发动机等),快速验证该Simulink算法。此时实时硬件可以看作是原型的控制器,通过这种方式我们快速地得到了一个原型控制器,对原型的控制算法进行测试,故称之为快速控制原型。此时,被控对象是真的,控制器是假的(控制器不是真正的量产控制器)。

快速控制原型

1、快速原型的设备有什么?

链接:https://www.zhihu.com/question/24239041/answer/72565699

这就不得不提到牛逼的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"/>

这个就是我在前面提到的microautobox

在硬件出来之前:
对于硬件系统(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提供相关的工程服务(嗯,很贵)。

三、自动代码生成

参考:https://www.zhihu.com/question/52838341/answer/138658739
https://www.zhihu.com/question/369208008
1. 什么是自动代码生成技术?或者说什么是基于模型的设计?
在汽车行业,2010年之前,大多数控制软件,比如发动机控制软件,自动变速箱控制软件,车身控制软件等等,都是手写C代码的。欧洲汽车行业使用很多外包公司来进行这项重复性的脑力活动,甚至把很多写代码的活儿外包到印度降低成本。一个大型软件比如发动机控制软件,甚至需要超过上百个码农在像网吧一样的大办公室里手动撰写不同模块的代码,之后再进行拼装。 2010年之后到现在,在汽车行业手写C代码的情况已经非常少了,如下表所示来自Infineon的预测,到2020年手动C代码在整个汽车行业所占的比例会只剩下10%左右,就这个估计我觉得还是保守的,其实现在除了少数一些发展中的车企和微型公司,C代码已经很罕见了。   
 
那么如果不用手写C代码,汽车控制软件编译前的代码怎么得到呢?就是通过自动代码生成技术,或者说基于模型的设计。如果你用过类似 Matlab 中的 Simulink 或者其他图形化的语言就会知道,在建模和仿真的过程中很少直接使用 C 代码。Simulink对比C代码,就好像 Windows 操作系统对比 DOS 操作系统一样,一个是图形化的控制,一个是基于命令行。Simulink 的图形和 C 代码之间是可以双向转换的,比如下图这段代码: 
 那么在这个背景下, Simulink 可以搭配专门的自动代码生成工具,比如Targetlink或者Matlab自己的Embedded Coder,软件设计者只需要编写图形化的 Simulink 代码,之后通过上面说到的两个工具之一自动生成对应的C代码,最后可以直接编译再刷写到具体的电子控制器上使用。
 
  2. 这种技术有什么优点?
在使用自动代码生成技术前,汽车控制软件的主要一部分开发流程是下图这样的:
 
  • 首先系统和功能设计工程师需要制定软件的功能和需求,并设计控制模型,系统和功能设计工程师可能完全不懂C代码。
  • 之后功能设计工程师提供具体的需求和设计说明书给软件工程师或者外包公司的码农。
  • 码农将系统工程师的设计理念从模型转化为C代码,编译后刷写到电子控制器。
  • 最后系统工程师或者测试工程师再拿到刷写好的软件去测试自己设计的功能。
 
而使用了自动代码生成技术之后,软件开发流程就成了下面这样: 
码农下岗了。
软件开发中,功能设计工程师不再需要浪费时间给码农解释自己的设计理念,也不需要等待码农输出C代码,只需要使用Targetlink,Embedded coder加上其他软件工具来自动生成和编译图形化的代码。
  • 那么相对于上面的手动C代码,基于模型的设计有显而易见的巨大进步:
  • 节约了闭环设计中无数的时间和人力成本,那一房间上百个码农都可以节约下来了。
  • 系统和功能设计工程师可以独立完成软件的输出,可以很容易避免因为技术文档描述不准确或者歧义而导致的从功能到代码的错误设计。
  • 软件功能修改后可以快速自动生成代码而不需要经过复杂的流程由码农来做修改。
  • 软件一致性不会像以前一样因为使用不同的码农而不同,代码也会由自动工具统一优化。 图形化的软件设计和Windows一样更易懂,类似Simulink中完整的诊断和查询显示功能也可以更容易对软件进行纠错,找到bugs。
基于模型的设计和自动代码生成技术对于包括汽车和航空航天在内的很多行业可以说是革命性的进步,也是目前汽车行业最多金和最热门的技术研发领域。

四、硬件在环

硬件在环仿真(Hardware-in-loop,简称HIL)。是一个反过来的过程,实时硬件运行Simulink被控对象模型(模拟被控对象),受真实控制器的控制,以此对控制器进行测试。此时,控制器是真的,被控对象是假的。在实车测试之前,先对控制器做一个全面的功能测试。因为该被控对象是假的,所以HIL比实车测试安全高效,而且可以测试一些实车测试中不容易实现的极端case。

硬件在环仿真

判断一个设备是做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-Time​www.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"/>

截图引自MathWorks官网

转自:https://www.zhihu.com/question/369208008/answer/1066342163

硬件在环和快速控制原型

(百度百科中的解释)

也即是硬件在回路(HiL),首先看一下下面三种情况的区别(如果将实际控制器的仿真称为 虚拟控制器,实际对象的仿真称为虚拟对象,可得到控制系统仿真的3种形式:)
①虚拟控制器+虚拟对象=动态仿真系统,是纯粹的系统仿真;
②虚拟控制器+实际对象=快速控制原型(RCP)仿真系统,是系统的一种半实物仿真;
③实际控制器+虚拟对象=硬件在回路(HiL)仿真系统,是系统的另一种半实物仿真 。

汽车中的V流程开发的更多相关文章

  1. fir.im Weekly - iOS开发中的Git流程

    本期 fir.im Weekly 收集了微博上的热转资源,包含 Android.iOS 开发工具.源码等好用的轮子,还有一些 APP 设计的 Tips,希望对你有用. 精仿知乎日报 iOS 端 @我偏 ...

  2. 【转】windows和linux中搭建python集成开发环境IDE

    本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...

  3. Oracle数据库中调用Java类开发存储过程、函数的方法

    Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日  浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...

  4. 第二十三篇:在SOUI中使用LUA脚本开发界面

    像写网页一样做客户端界面可能是很多客户端开发的理想. 做好一个可以实现和用户交互的动态网页应该包含两个部分:使用html做网页的布局,使用脚本如vbscript,javascript做用户交互的逻辑. ...

  5. K2 blackpearl 流程开发(二)

    转:http://blog.csdn.net/gxiangzi/article/details/8444590 本来想一篇文章把流程开发介绍完的,后来发现实在是太多了,只好分成两部分了.上一篇很简单的 ...

  6. K2 blackpearl 流程开发(一)

    转:http://blog.csdn.net/gxiangzi/article/details/8444060 郁闷,今天K2的license过期了,很多东西都没法用了,还得去找PM大大帮忙申请一个. ...

  7. zigbee学习:示例程序SampleApp中按键工作流程

    zigbee学习:示例程序SampleApp中按键工作流程 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:IAR8. ...

  8. Systemd初始化进程/RHEL 6系统中System V init命令与RHEL 7系统中systemctl命令的对比

    Linux操作系统的开机过程是这样的,即从BIOS开始,然后进入Boot Loader,再加载系统内核,然后内核进行初始化,最后启动初始化进程.初始化进程作为Linux系统的第一个进程,它需要完成Li ...

  9. APP开发过程中需求变更流程

    在APP开发过程中,不可避免的会有需求变更,从以往项目开发过程总结发现,需求变更太频繁,产品一句话需求,没有形成良好的版本迭代概念,频繁的变动影响开发交付日期,但是交付日期又是定死的,严重拖累了开发及 ...

随机推荐

  1. 小白都能看懂的tcp三次握手

    众所周知,TCP在建立连接时需要经过三次握手.许多初学者经常对这个过程感到混乱:SYN是干什么的,怎么一会儿是1一会儿是0?怎么既有大写的ACK又有小写的ack?为什么ACK在第二次握手才开始出现?初 ...

  2. oracle plsql手动修改数据

    转至:https://blog.csdn.net/Ranchonono/article/details/87690830?spm=1001.2101.3001.6650.1&utm_mediu ...

  3. 磁盘管理及shell脚本编程练习

    转至:http://www.178linux.com/88405 1.创建一个10G分区,并格式为ext4文件系统 a) 要求其block大小为2048,预留空间百分比为2,卷标为MYDATA,默认挂 ...

  4. LINUX服务器常用命令

    转至:https://my.oschina.net/7shell/blog/70508 常用命令 查看所有80端口的连接数 1. netstat -nat|grep -i "80" ...

  5. Flutter 设计模式|工厂模式家族

    文/ 杨加康,CFUG 社区成员,<Flutter 开发之旅从南到北>作者,小米工程师 在围绕设计模式的话题中,工厂这个词频繁出现,从 简单工厂 模式到 工厂方法 模式,再到 抽象工厂 模 ...

  6. LeetCode-092-反转链表 II

    反转链表 II 题目描述:给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right .请你反转从位置 left 到位置 right 的链表节点,返回 ...

  7. 面试官:Redis中哈希数据类型的内部实现方式是什么?

    面试官:Redis中基本的数据类型有哪些? 我:Redis的基本数据类型有:字符串(string).哈希(hash).列表(list).集合(set).有序集合(zset). 面试官:哈希数据类型的内 ...

  8. springboot-jta-atomikos多数据源事务管理

    背景 我们平时在用springboot开发时,要使用事务,只需要在方法上添加@Transaction注解即可,但这种方式只适用单数据源,在多数据源下就不再适用: 比如在多数据源下,我们在一个方法里执行 ...

  9. Linux备份数据库,mysqldump命令实例详解

    mysqldump是mysql数据库中备份工具,用于将MYSQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中. 语法: mysqldump (选项) 选项: --add-drop-ta ...

  10. 【图片+代码】:GCC 链接过程中的【重定位】过程分析

    作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). ...