汽车软件开发模式的5个特点

汽车软件开发属于较为复杂的系统工程,经常让来自不同知识背景的工程师在观点交锋时出现分歧。在解决复杂性和对齐讨论基准时,可以通过勾勒出讨论对象最关键的几个特征来树立典型概念。本文旨在通过5个典型特点的抽取,来勾勒出汽车软件开发模式的特殊性和变迁性。

01.车载与非车载软件的分类及差异

汽车软件是非常复杂的,种类繁多自是预料之内,首先需要解决分类这个最基本的问题。

1.1 带物理盒子的车载软件

最正宗的汽车软件当属ECU(Electronic Control Unit,电子控制器单元)里的软件,也就是车载软件。直观来看,就是固定在车上,并通过线束与电气系统或其他ECU连接起来的物理盒子。

ECU已经在汽车行业存在了近60年,但直到现在,ECU仍然是谈论汽车软件时的主要对象。只不过随着汽车电子电气架构的演变,ECU的功能越来越集中化——即现在炒得热火朝天的域控或中央计算。

无论如何,形式上来看,ECU或DCU(Domain Controller Unit,域控制器)都是嵌入在物理盒子里的车载软件产品

1.2 车载软件的内涵

除了形式,再看功能内涵。首先,基于这两年广泛流传的博世五域划分,可以将车上的电子软件功能进行分区,即动力域(车辆运动)、底盘域(安全)、车身域(车身电子)、座舱域(娱乐信息)和自动驾驶域(驾驶辅助)

这五域划分可以给出大框架的参考,但对于区分开发模式来说并不够友好。进一步的,车载软件可以划分为四类:

  • 第一类:与整车高度耦合或安全等级较高的模块,如发动机控制、电机控制、刹车控制、电子助力转向控制、车身稳定控制系统ESP、混动系统控制、安全气囊控制、电池热管理等。
  • 第二类:功能独立且安全等级较低的车身控制模块,如网关、照明控制、雨刮控制、车门车窗控制、无钥匙启动、天窗控制、座椅记忆控制、后视镜控制、功放控制等。
  • 第三类:智能驾驶,ADAS、AD及附属的雷达或摄像头传感器等。
  • 第四类:智能座舱或说车机,主要是以各类大屏为承载的软件。

1.3 非车载软件

除了车载软件,非车载类软件也广泛地存在于汽车行业的各个领域。包括云平台(如数据埋点后台、电池状态远程监控、OTA运营平台)、工具链软件、生产用下线电检软件(EOL,End Of Line)以及手机车联app车机上的第三方app

其中,云平台与app和互联网软件比较接近,车载软件和互联网软件则是完全不同类别的东西,谈论主体的不一致经常是两个行业背景的人产生分歧的原因之一。

当然,现在这些非车载软件还没有形成稳定及具规模的生态,所以本文仍然主要基于车载软件展开,但是V2X(Vehicle to Everything,车用无线通信技术)作为热点趋势仍值得被关注。

02.从代码到整车的5层集成

汽车软件种类繁多、模块众多,而且需要装在整车上跨模块、跨域体现功能,所以只要电子电气架构的集中化没有走到中央计算和云计算,只要供应链各方的软硬件自主权没有被收归一统,多层集成就不可避免。

按照当下的架构发展阶段可以把汽车软件的集成分为5个层次:

  • 将软件单元集成到一起
  • 将软件集成到硬件上
  • 将硬件集成到机械壳体上
  • 将ECU 集成到子系统中
  • 将子系统集成到整车上

03.联调与整车级评价

汽车软件开发是个各模块或功能域协作的过程。一直以来,大家习惯于在各自的电脑上、台架上完成开发与验证,然后在集成点处进行确认。“各人自扫门前雪”的协作惯例能让分工清晰,也会让几乎不可避免的问题延后暴露。

因此,部分与整车环境依赖关系比较紧密的模块(第一类)会提前进行联调,比如说安全气囊控制器:整车碰撞试验会花费高额的成本,一旦试验失效会造成时间和金钱的巨大浪费,前期的联调非常必要,比如安装方向、传感器位置、线束连接、电阻范围、DTC状态、软件版本及对手件响应等的联调确认。当然安全气囊太成熟、太传统,软硬耦合程度太深了,对于与其他模块或整车耦合程度没那么高的模块(第二类),其联调必要性就会减弱,比如简单的天窗控制模块和方向盘加热模块,可能台架上连接一个电机和加热垫就绰绰有余。智驾和座舱逐渐脱离了传统汽车软件开发模式,而二者之间也有些不同。

智驾的开发验证可以依赖一部分仿真模拟,但终归需要整车的调试标定,尤其需要运动控制部分的功能完善。智舱集成了大量的人机交互内容,无论是控制指令的发出还是反馈信息的投屏,大屏正在变成人与车的I/O口,这让座舱的开发颇为困难,所谓联调或者协同验证的意义和必要性也十分显著。

总之,这一趋势正逐渐显现:联调正伴随着架构的集成化逐渐演变为对整车整体的评价。

04.开发验证受制于实车环境

仿真是个非常古老的概念,其发展看起来始终有些缓慢,汽车开发的各层级开发验证,都难以离开真实的物理环境,也就是车。车很贵,工程车尤其贵,退而求其次,大家用模拟信号与负载、用简易台架加ECU、用白车身、用拼凑的实车......而求其次自然会求来软件版本不对齐、验证负载不充分、暴露问题不及时等等各类次的问题。

受制于样件和实车的环境是汽车开发的特点,特别地,在架构融合的过渡阶段,更耦合的功能、更多的交互,会让这种单一仿真环境凸显出更大的问题。

05.考虑生产

一切软件都需要进入整车,从整车层面解决客户需求,而进入的第一步和主要步骤还是通过生产装配,特别是对于第一类(与整车高度耦合或安全等级较高的模块)软件,所以汽车软件要关注制造、关注生产。原因有二:

  • OTA技术、流程和监管还不足够成熟,还不能自由OTA。
  • 现有的标准化生产方式仍然足够安全可靠。

同时,ASPICE还会一定程度地回归,会随着行业生态的恢复和产品方案的成熟逐渐体现出其必要的规范性意义,其分层意义可能会随着架构集中的进一步发展而减弱。

06.全文小结

本文因汽车软件所在行业与产品特殊性,首先区分了汽车软件的分类,最典型的当属车载软件,按照开发模式的差异性分成了4类,而行业的方向正在向非车载软件延展。

对于分布式架构和协同供应链下的车载软件,多层集成是其非常直接的特点,大体来看,从代码到整车可分为5层。

每个集成点都是一个接口,接口之间需要联调,尤其对于跨模块、多接口的复杂系统。而随着架构的集中化,这种趋向整车级的评价会是越来越突出的趋势。

在仿真足够真实之前,出于成本的考虑,开发始终会受制于实车环境。同样的,在OTA足够可靠之前,汽车软件不得不考虑其对生产的影响和生产对其的影响。

总得来说,汽车软件的特点与两个概念密切相关:软件架构的软硬耦合和整车电子电气架构的分布式。而伴随着软硬解耦和架构集中化,汽车软件的特异性会逐渐地演变,乃至消亡。

原文链接:汽车软件开发模式的7个特点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/366281.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

023 for循环详解

什么是for循环 // 练习1 int odd 0; int even 0; for (int i 0; i < 100; i) {if (i % 2 0) {even i;} else {odd i;} } System.out.println("奇数和为:" odd ",偶数和为:" even);// 练习2 for (int i 1; i < 1000; i) {if (i % 5 0) {Sy…

使用STM32 DMA实现高效数据传输的设计与优化

使用STM32的DMA功能可以有效地实现高效的数据传输。在下面的解释中&#xff0c;我将介绍如何设计和优化使用STM32 DMA进行高效数据传输的方法。同时&#xff0c;我将提供一些示例代码来帮助您理解和实践。 ✅作者简介&#xff1a;热爱科研的嵌入式开发者&#xff0c;修心和技术…

决策树的相关知识点

&#x1f4d5;参考&#xff1a;ysu老师课件西瓜书 1.决策树的基本概念 【决策树】&#xff1a;决策树是一种描述对样本数据进行分类的树形结构模型&#xff0c;由节点和有向边组成。其中每个内部节点表示一个属性上的判断&#xff0c;每个分支代表一个判断结果的输出&#xff…

2017年苏州大学837复试机试C/C++

2017年苏州大学复试机试 要求 要求用C/C编程&#xff1b;对程序中必要的地方进行注释。上机规则 请在电脑桌面上新建一个文件夹文件夹名为考试姓名&#xff08;中文&#xff09;&#xff1b;考试完毕后&#xff0c;将所编写的文件放在上述文件中。 第一题&#xff08;20分&…

vue使用antv-x6 绘制流程图DAG图(二)

代码&#xff1a; <template><div class"graph-wrap" click.stop"hideFn"><Toobar :graph"graph"></Toobar><!-- 小地图 --><div id"minimap" class"mini-map-container"></div>…

URL重写

URL重写 URL重写是一种通过修改URL来管理用户会话的会话管理技术。由于URL容易在传输过程中被截取,因此该技术一般在要传输的信息不是很重要时才使用。例如,在线购物门户中,servlet可以修改URL以便包含用户名等用户信息。然后servlet显示该URL。用户单击URL超链接时,信息发…

ES6.8.6 Java客户端发起 增删改查 query (bool)、update、delete

文章目录 环境测试数据增单个新增批量新增 删通过delete by api删除通过delete by query api删除删除索引中指定字段&#xff08;script&#xff09; 改单个修改update by api通过_bulk批量修改批量修改update by query api使用script脚本修改 查完全匹配&#xff08;term&…

【Qt基本功修炼】Qt线程的两种运行模式

1. 前言 QThread是Qt中的线程类&#xff0c;用于实现多线程运行。 QThread有两种工作模式&#xff0c;即 消息循环模式无消息循环模式 两种模式分别适用于不同的场景。下面我们将从多个方面&#xff0c;讲解QThread两种工作模式的区别。 2. 消息循环模式 2.1 实现原理 Q…

nightinage部署

git开源地址 GitHub - ccfos/nightingale: An all-in-one observability solution which aims to combine the advantages of Prometheus and Grafana. It manages alert rules and visualizes metrics, logs, traces in a beautiful web UI. 一、下载源码自己编译运行 二、用…

在本机搭建私有NuGet服务器

写在前面 有时我们不想对外公开源码&#xff0c;同时又想在VisualStudio中通过Nuget包管理器来统一管理这些内部动态库&#xff0c;这时就可以在本地搭建一个NuGet服务器。 操作步骤 1.下载BaGet 这是一个轻量级的NuGet服务器 2.部署BaGet 将下载好的release版本BaGet解…

字符下标计数

下标计数 数组计数&#xff0c;即通过使用一个新的数组&#xff0c;对原来数组里面的项进行计数&#xff0c;统计原来数组中各项出现的次数&#xff0c;如下图所示&#xff1a; 数组计数可以方便快速地统计出一个各项都比较小的数组中&#xff0c;数值相同的数的个数。 数组计数…

代码随想录算法训练营DAY10 | 栈与队列 (1)

理论基础及Java实现参考文章&#xff1a;栈和队列 一、LeetCode 232 用栈实现队列 题目链接&#xff1a;232.用栈实现队列https://leetcode.cn/problems/implement-queue-using-stacks/ 思路&#xff1a;使用两个栈stack1、stack2实现队列&#xff1b;stack1用来存储入队元素&…

【Servlet】——Servlet API 详解

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Servlet】 本专栏旨在分享学习Servlet的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 一、HttpServlet二、Htt…

图像处理之《可逆重缩放网络及其扩展》论文精读

一、文章摘要 图像重缩放是一种常用的双向操作&#xff0c;它首先将高分辨率图像缩小以适应各种显示器或存储和带宽友好&#xff0c;然后将相应的低分辨率图像放大以恢复原始分辨率或放大图像中的细节。然而&#xff0c;非单射下采样映射丢弃了高频内容&#xff0c;导致逆恢复…

Flink的SQL开发

概叙 Flink有关FlinkSQL的官网: https://nightlies.apache.org/flink/flink-docs-release-1.13/zh/docs/dev/table/sql/overview/ 阿里云有关FlinkSQL的官网: https://help.aliyun.com/zh/flink/developer-reference/overview-5?spma2c4g.11186623.0.0.3f55bbc6H3LVyo Ta…

Mac 下文件编码转换的方法

Windows文件传输到Mac,在Windows上打开是可以看的,但是在Mac上打开是乱码,这是因为Windows默认是GBK编码,而Mac使用的是UTF-8编码,这时候需要对文件编码进行转换,以方便在Mac上查看和使用 iconv macOS 系统中&#xff0c;iconv 命令是一个用于转换文件或文本流的字符编码的实用…

Django模型(八)

一、修改数据 先获取对象,通过对象属性更新数据,再保存 (更新单一数据)通过QuerySet的update函数更新数据 (更新多条数据) #单条记录修改 save c = Cook.objects.get(pk=1) c.name = 安妮 c.save()# 更新多个值 update Cook.objects.filter(sect=粤菜).update(level=5)1.1、…

C# 根据USB设备VID和PID 获取设备总线已报告设备描述

总线已报告设备描述 DEVPKEY_Device_BusReportedDeviceDesc 模式 winform 语言 c# using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Window…

IntelliJ IDEA 2023和Java的JDK详细安装教程

一、软件下载 网盘链接&#xff1a;IntelliJ IDEA 2023 提取码&#xff1a;2syx 二、详细安装教程 1.鼠标右击【JetBrains2023】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 JetBrains2023】&#xff1b;打开解压后的文件夹&#x…

银行数据仓库体系实践(15)--数据应用之巴塞尔新资本协议

巴塞尔新资本协议介绍 在银行管理中经常会听到巴3、新资本协议等专用词&#xff0c;那这都是指《巴塞尔资本协议》&#xff0c;全称《关于统一国际银行资本衡量和资本标准的协议》。新资本协议的五大目标是&#xff1a;促进金融体系的安全性和稳健性&#xff08;保持总体资本水…