UDS服务基础篇之31

UDS服务基础篇之31服务

前言

正如前文《UDS基础之2F服务》所说的2F服务与今天本文要将的31服务存在着有些相似之处,因此需要针对31服务本身进行较为细致的剖析,在此小T抛出如下几个基本问题供大家思考:

  • 你知道31服务是干什么的吗?
  • 31服务是怎样的请求与诊断格式?
  • 31服务在使用的过程中需要注意哪些问题?

这篇,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:

在这里插入图片描述


正文

服务功能

功能描述

根据ISO14119-1标准中所述,诊断服务31服务主要用于实现针对某类测试场景,非正常工况下的程序活动以及其他擦除内存等连续性操作步骤的集合

在某些情况下2F服务的基本功能也是能够通过31服务来实现,可以理解2F实现的功能31服务均可以实现,不过如果能够用2F实现的功能来用31服务,未免有些大材小用,因此31服务则是用于更为复杂的输入输出控制场景,而2F服务则可用于较为简单常见的输入输出控制场景。

下列文中使用到的Client可直接理解为上位机Tester,Server可直接理解为接受Tester诊断请求的ECU。

应用场景

一般而言,对于31诊断服务,主要应用场景为以下场合:

  • 比如用于某sensor特定工况下的操作集合,如进行摄像头或者雷达内参标定流程;
  • 在整车制造过程中较为常见的便是某Sensor的外参标定工位,在该工位中需要用到31服务开启标定例程,标定流程结束后也能够31服务获取标定例程的最终结果;
  • 如雷达使用过程中的非正常工况下的发波波形配置调整可以通过31服务来实现;
  • 在进行UDS刷写过程中可以通过31服务来触发内存的擦除操作等;

上述这些应用场景较为常见,这里就不一一列举。

除了在哪些应用场景下使用,在此还需要针对31服务提出如下几点注意事项:

  • 31服务针对同一控制场景一般可分为开始,停止,获取结果三个过程,这三个过程并不是同时存在,是否需要同时存在完全可以客户自定义;
  • 31服务针对每一个控制场景均可以一个Routine ID来进行唯一的区别,因此不同的控制场景应采用唯一的Routine ID来进行区别;
  • 通过AUTOSAR工具链配置的31 Routine回调函数命名时,函数名除了说明其基本功能以外,也需要将对应的Routine ID体现在函数名称中,这样便于搜索排查问题,是一种不错的代码实践;
  • 对于31服务涉及的回调函数,一般不建议走RTE,主要是从代码可维护角度而言,更加简洁明了,实现效率高,走RTE接口还需增加额外的工作量,没有必要且容易出错。

31服务控制基本原理:

如下图1所示,针对31服务的通信控制过程会经过如下几个AUTOSAR BSW模块进行处理,然后完成最终的Routine控制,具体步骤如下:

  • Client 发送诊断指令给到Server,Server接收到指令后通过确认Routine Type来决定调用不同的回调函数;
  • 在每个回调函数中便可以实现客户自定义的控制场景,具体场景就是要根据客户需求来自定义来实现的。

在这里插入图片描述

图1 31服务控制流程图

服务请求

服务请求是Client发送给到Server的诊断服务指令

请求格式

按照ISO14229-1标准所述,如下图2所示为31服务诊断请求格式,即上述31服务控制原理中诊断服务请求格式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5YgnAc3y-1691416930001)(https://carthomas.oss-cn-shanghai.aliyuncs.com/UDS%E6%9C%8D%E5%8A%A1%E5%9F%BA%E7%A1%80%E7%AF%87%E4%B9%8B31%E6%9C%8D%E5%8A%A1/2-%E6%9C%8D%E5%8A%A1%E8%AF%B7%E6%B1%82.png)]

图2 31诊断服务请求格式

上述参数routineControlOptionRecord是可选项,在项目中可自定义,如传递相关的一些控制参数等。除此之外,就是SID,SubFunction,routineIdentifier这三个参数则必选,下图3中各参数解释如下:

在这里插入图片描述

图3 31诊断服务请求格式说明
请求实例

开启Routine(01)

开启Routine为例,假设Routine ID为0201,该Routine则用于进行短时间的输入输出控制, 31服务诊断请求开启Routine实例如下图4所示:

在这里插入图片描述

图4 31服务开启Routine请求实例

停止Routine(02)

停止Routine为例,31服务诊断停止Routine请求实例如下图5所示:

在这里插入图片描述

图5 31服务停止Routine请求实例

获取Routine结果(03)

以获取Routine结果为例,31服务诊断获取Routine结果请求实例如下图5所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mWsvwM6w-1691416930003)(https://carthomas.oss-cn-shanghai.aliyuncs.com/UDS%E6%9C%8D%E5%8A%A1%E5%9F%BA%E7%A1%80%E7%AF%87%E4%B9%8B31%E6%9C%8D%E5%8A%A1/6-%E8%8E%B7%E5%8F%96Routine%E7%BB%93%E6%9E%9C%E8%AF%B7%E6%B1%82%E5%AE%9E%E4%BE%8B.png)]

图6 31服务获取Routine结果请求实例

服务响应

服务响应是针对Client对Server诊断请求的响应。

正响应格式

如下图7所示,为31诊断服务的正响应格式:

在这里插入图片描述

图7 31诊断服务正响应格式

从上图中可以看出,31诊断服务的正响应由以下二个部分组成:

  • Response ID:该参数固定为SID+0x40 = 0x71;
  • SubFunction:该参数为上述诊断请求格式中Routine Type保持一致;
  • routineIdentifier: 该参数与诊断服务请求中的routineIdentifier中保持一致;
  • routineInfo:一般可以理解为客户自定义,作为可选项;
  • routineStatusRecord: 同上;
正响应实例

开启Routine(01)

如下图8所示,为上述31 01 02 01请求示例所对应的正响应:
在这里插入图片描述

图8 31 01正响应示例

其中,0x01就是跟诊断请求中31 01中的RoutineType保持一致即可,同时routineStatusRecord则是根据客户需求进行自定义回复。

停止Routine(02)

如下图9所示,为上述31 02 02 01请求示例所对应的正响应:

在这里插入图片描述

图9 31 02正响应示例

其中,0x02就是跟诊断请求中31 02中的RoutineType保持一致即可,同时routineStatusRecord则是根据客户需求进行自定义回复。

获取Routine结果(03)

如下图10所示,为上述31 03 02 01请求示例所对应的正响应:

在这里插入图片描述

图10 31 03正响应示例

其中,0x03就是跟诊断请求中31 03中的RoutineType保持一致即可,同时routineStatusRecord则是根据客户需求进行自定义回复。

负响应NRC支持

绝大多数情况下,Server针对Client的请求都会给到正响应,比如发生重启前需确保整车处于安全状态,如引擎熄火,车速不能超过3km/h等,或者为了防止不按照诊断请求格式进行请求,那么Server需要通过某种方式来告诉Client执行不成功的原因在哪里以便于调查问题直至得到正响应。

因此ISO14229-1针对所有的诊断服务提供了一种统一的诊断负响应的诊断格式:7F +SID + NRC

其中NRC全称为Negetive Responce Code,每个NRC具有唯一的含义来代表当前诊断请求错误的原因所在。当然每个诊断服务支持的NRC不尽相同,具体支持的NRC需要参考ISO14229-1标准文档,对于31服务而言支持的NRC如下图:

在这里插入图片描述

在这里插入图片描述

图11 31服务NRC支持
  • 当诊断请求的subfuntion不在Server支持的范围内时,则Server会回复”7F 31 12“;
  • 当发送报文长度或者格式不对时,则Server会回复"7F 31 13";
  • 例如当尝试请求复位时且当前车速条件不满足,此时Client发送诊断指请求时,Server将会回复“7F 31 22”来告诉请求者当前进入编程会话的条件不满足,请再次检查进入编程会话的条件;
  • 当某个routine还没有Start时便请求结果或者中止Routine时,那么Server会回复**“7F 31 24”**;
  • 当routineIdentifier或者可选的routineControlOptionRecord中均超出规定的范围时,则Server会回复** “7F 31 31” **;
  • 当该routineIdenfier设置了安全访问等级时,如果未解锁便执行该31服务,则Server会回复**“7F 31 33”**;
  • 当31服务用于擦除NVM时,在此过程中如果出现失败那么Server便会回复**“7F 31 72”**

上述NRC也存在对应的优先级,因此小T将对应的31服务NRC优先级展示如下图12所示:

在这里插入图片描述

图12 31服务NRC优先级

更多AUTOSAR精彩基础与实战内容,敬请关注公号:ADAS与ECU之吾见。
结合小T的基础内容,可以深度学习下小T的实战系列,如此便可以轻松掌握AUTOSAR:
AUTOSAR实战指南

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

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

相关文章

vue 在方法里用字符串赋值图片路径获取不到,提示找不到图片

原因 直接通过字符串赋值命名路径是不会生效的,如 this.file1"../assets/addmodel/TAR.png" 因为在Vue模板中直接使用字符串赋值的方式不会被解析为正确的资源路径。 你可以使用动态绑定(v-bind 或简写为 :)来设置图片的路径。…

Redis性能瓶颈揭秘:如何优化大key问题?

1. 什么是Redis大key问题 Redis大key问题指的是某个key对应的value值所占的内存空间比较大,导致Redis的性能下降、内存不足、数据不均衡以及主从同步延迟等问题。 到底多大的数据量才算是大key? 没有固定的判别标准,通常认为字符串类型的k…

在WebStorm中通过live-server插件搭建Ajax运行环境

1.下载node.js 官网: https://nodejs.cn/download/ 2.配置Node.js的HTTPS 使用淘宝的镜像: npm config set registry https://registry.npm.taobao.org 也可以使用cnpm npm install -g cnpm --registryhttps://registry.npm.taobao.org 配置之后可以验证是否成…

SAP SD 交货单发货过账缺料提醒 改成 弹窗框清单提醒增强

场景:零件库下销售订单100来个行项目,产生的交货单也是100多个行项目,但因为库存做不准,不及时,以及本来就缺料,在交货单发货过账时会提醒,见下图 但是每次只提醒一个,零件库实际业务…

HCIP-linux知识

linux安装教程参考,https://blog.51cto.com/cloudcs/5245337 yum源配置 本地yum源配置: 8版本配置:将光盘iso挂载到某个目录,/dev/cdrom是/dev/sr0软链接,# mount /dev/cdrom /mnt,# ls /mnt AppStream B…

webpack基础知识十:与webpack类似的工具还有哪些?区别?

一、模块化工具 模块化是一种处理复杂系统分解为更好的可管理模块的方式 可以用来分割,组织和打包应用。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体(bundle) 在前端领域中,并非只有webpack这一款…

K8S系列文章之 Kind 部署K8S的 服务发布

安装kind 下载 https://github.com/kubernetes-sigs/kind/releases/download/0.17.0/kind-linux-amd64 执行以下命令: mv kind-linux-amd64 /usr/local/bin/kind chmod 777 /usr/local/bin/kind 之前需要先在本地主机安装好docker yum -y install yum-utils d…

微服务 云原生:基于 Gogs + Drone 进行项目 CI/CD

传统构建部署 以一个简单的前后端项目来说,分别编写前后端的 Dockerfile 文件并构建镜像,然后编写 docker-compose.yml 构建部署,启动运行。 一个简单的例子: 前端: 项目名:kubemanagement-web技术栈&am…

调整vscode

调整vscode 连wifi linux连接wifi

Git从远程仓库中删除文件,并上传新文件

目录 删除: 拉取远程分支的更新: ​编辑 首先查看git状态: ​编辑 删除文件并提交版本库: 提交: 上传新文件: 首先查看git状态: 提交到暂存区: 提交到版本库: 上…

HCL MPLS L2VPN BGP lsp

目录 1 拓扑 2 配置步骤 2.1 配置接口IP 和路由协议 2.2 配置MPLS LDP 2.3 配置L2VPN PW(BGP) 2.4 验证L2VPN 使用EVE-NG 中 的H3C 镜像,配置bgp 后,OSPF 会失效,可能镜像有问题,使用HCL没有问题。 1 拓扑 2 配置步骤 2.1…

【MySQL】deepin安装mysql的cpp开发包

在deepin下安装好mysql后&#xff0c;发现在c语言中没有<mysql.h>的头文件。 而根据ubuntu的办法直接按照mysql的开发包&#xff0c;会出现这种情况&#xff1a; ~/Desktop$ sudo apt-get install libmysqlclient-dev 正在读取软件包列表… 完成 正在分析软件包的依赖关…

使用vscode远程登录以及本地使用的配置(插件推荐)

1、远程登陆ssh 1.1打开vscode插件商店&#xff0c;安装remote-ssh插件 远程ssh添加第三方插件&#xff1a;vscode下链接远程服务器安装插件失败、速度慢等解决方法_vscode远程安装不上扩展_Emphatic的博客-CSDN博客 转到定义&#xff0c;选中代码->鼠标右键->转到定义…

Leetcode周赛 | 2023-8-5

2023-8-5 题1体会我的代码 题2体会我的代码 题1 体会 一开始是觉得这道题是贪心的&#xff0c;选出现次数最多的元素&#xff0c;但是发现&#xff0c;当有多个元素出现次数均为最多时&#xff0c;似乎很难处理&#xff0c;就放弃了。转而问ChatGPT &#xff0c;结果让自己走上…

文字转语音

键盘获取文字&#xff0c;转化为语音后保存本地 from win32com.client import Dispatch from comtypes.client import CreateObject from comtypes.gen import SpeechLib speakerDispatch(SAPI.SpVoice) speaker.Speak(请输入你想转化的文字) datainput(请输入&#xff1a;)#s…

75. 颜色分类

题目链接&#xff1a;力扣 解题思路&#xff1a;因为整个nums数组中只有0&#xff0c;1&#xff0c;2三个数组成。对nums升序排序后&#xff0c;0一定都在数组的最左边&#xff0c;2一定都在数组的最右边&#xff0c;1在数组的中间。那么只需要将0移动到数组的左边&#xff0c;…

Vue3+SpringBoot快速开发模板

起因&#xff1a;个人开发过程经常会使用到Vue3SpringBoot技术栈来开发项目&#xff0c;每次在项目初始化时都需要涉及一些重复的整理工作&#xff0c;于是结合一些个人觉得不错的前后端模板进行整合&#xff0c;打通一些大多数项目都需要的实现的基础功能&#xff0c;以便于快…

ChatGLM-RLHF(六)-PPO(Proximal Policy Optimization)原理实现代码逐行注释-论文导读

一&#xff0c;前言 从open AI 的论文可以看到&#xff0c;大语言模型的优化&#xff0c;分下面三个步骤&#xff0c;SFT&#xff0c;RM&#xff0c;PPO&#xff0c;我们跟随大神的步伐&#xff0c;来学习一下这三个步骤和代码实现&#xff0c;本章介绍PPO论文。 上一章介绍了…

IDEA常用插件介绍

1.CodeGlance&#xff08;CodeGlance Pro&#xff09; 安装后&#xff0c;重新启动编译器即可。 CodeGlance是一款非常好用的代码地图插件&#xff0c;可以在代码编辑区的右侧生成一个竖向可拖动的代码缩略区&#xff0c;可以快速定位代码的同时&#xff0c;并且提供放大镜功能…

【UE4】多人联机教程(重点笔记)

效果 1. 创建房间、搜索房间功能 2. 根据指定IP和端口加入游戏 步骤 1. 新建一个第三人称角色模板工程 2. 创建一个空白关卡&#xff0c;这里命名为“InitMap” 3. 新建一个控件蓝图&#xff0c;这里命名为“UMG_ConnectMenu” 在关卡蓝图中显示该控件蓝图 打开“UMG_Connec…