【车载开发系列】UDS诊断---例程控制($0x31)

news2024/11/18 23:00:59

【车载开发系列】UDS诊断—例程控制($0x31)

UDS诊断---例程控制($0x31)

    • 【车载开发系列】UDS诊断---例程控制($0x31)
    • 一.概念定义
      • 1)RoutineControl服务
      • 2)例程的概念
      • 3)例程的应用
      • 4)例程有效前提
    • 二.子功能
      • 1)启动例程
      • 2)停止例程
      • 3)请求运行结果
    • 三.否定响应流程
      • 1)NRC13
      • 2)NRC31
      • 3)NRC34
      • 4)NRC33
      • 5)NRC12
      • 6)NRC13
      • 7)NRC31
      • 8)NRC22
      • 9)NRC24
    • 四.报文格式
      • 1)请求报文
      • 2)肯定响应
      • 2)否定响应
    • 五.RID Definition

一.概念定义

1)RoutineControl服务

用于对主机厂定义的一些特定程序的控制操作(启动例程、停止例程、请求运行结果)。
例程控制服务主要功能是由客户端请求服务端开始、结束一个例程,以及获取例程执行的状态和结果。

2)例程的概念

例程也可以理解为程序,就是指的一段写好的具有一定功能的代码模块,通过例程控制服务,可以控制这段代码
例程有两种,一种是完全由例程控制服务对例程的开始和结束进行控制,该例程开始之后会持续执行,由客户端对其进行控制,服务端仅负责接受和执行请求;
另一种是由客户端请求例程开始执行,但例程结束由服务端控制,可以是在诊断响应之前就结束,也可以在给出诊断响应之后再结束。

3)例程的应用

最常见的应用场景如车钥匙学习,四轮胎压学习,ESP制动液注入,车窗防夹标定,存储器擦除,数据校验,一些需要测试的功能检测,功能控制等等。

4)例程有效前提

例程执行的条件由ECU系统供应商定义。出于存在任何对于操作者、驾驶员及乘客安全隐患的考虑,一般情况下,系统必须保证在例程执行前满足低车速的情况下可用。

二.子功能

例程控制服务只有三个有效子功能,其他的都是保留值,其定义对应的就是上篇提到的三个功能。

1)启动例程

服务端在接收到开始例程的请求后,应立即开始执行指定的例程(通过一个两个字节的ID来指定,后面格式里会看到),根据例程设计的不同,服务端应该在执行例程之后给出响应,有些例程如擦除寄存器、数据校验等,需要立即执行并且在执行完给出结果的,则需要在执行完给出肯定或者否定响应,而有些如钥匙学习、胎压学习等需要由客户端发送请求来控制,则在正常开始例程之后给出肯定响应,如不正常则给出否定响应。

2)停止例程

服务端在接收到停止例程的请求后,应立即停止指定的例程,如果例程停止成功,服务端应该给出肯定响应,如果例程停止失败,则需要给出否定响应。

3)请求运行结果

一般例程,在前面的两个指令的响应里,就会带有例程执行的结果。但是有一些由于例程的特殊性无法在响应里给出结果,所以需要单独请求例程执行的结果。

三.否定响应流程

例程控制服务只有三个有效的子功能,其他的都是保留值,其定义对应的就是上篇提到的三个功能。如果下面的检查内容都检查通过了,则回复肯定响应。

1)NRC13

Minimum length check:这里最小长度检查包括了SID,SubFunction,RID,最少是4个字节;

2)NRC31

这里检查在当前诊断会话模式,是否支持请求的RID,这里的RID即routineIdentifier

3)NRC34

如果服务支持安全传输,这里检查安全传输的验证结果是否通过;

4)NRC33

如果DID支持安全校验,这里检查安全校验服务是否已经验证通过;

5)NRC12

这里校验请求里的子功能是否支持;

6)NRC13

Total length check:总长度检查,即包括SID,SubFunction,RID,routineControlOptionRecord的总长度,routineControlOptionRecord的长度依据RID而定;

7)NRC31

当检查逻辑执行到这里的时候,主要检查的是routineControlOptionRecord参数是否在RID定义的有效范围内;

8)NRC22

NRC22有两个,第一个检查的是请求的服务和子功能的执行条件是否满足,第二个检查的是请求数据的执行条件是否满足;

9)NRC24

31服务的子功能是有顺序的,即停止例程的请求必须是在开始例程的后面请求才可以,请求例程的执行结果也必须在开始例程之后才被允许,否则回复此NRC。

四.报文格式

1)请求报文

  1. 主要包括请求的服务ID,子功能,routineIdentifier和routineControlOptionRecord四个部分。
  2. routineControlType就是子功能类型;
  3. routineIdentifier和输入输出控制服务的DID参数类似,也是用来标识具体的功能的,具体可以参照下面;
  4. routineControlOptionRecord这个参数是可选的,根据实际的routine设计来决定,有些例程需要额外的数据,就需要通过这个参数来放入一些内容;比如在检查编程依赖性的时候(RID:0xFF01)就用这个参数来传递CheckSum。
    在这里插入图片描述

2)肯定响应

  1. routineStatusRecord是实际的例程执行结果,根据具体的例程进行定义,可以是简单的成功失败,也可以是具体的执行后的数据。
  2. 在ISO14229当中还有一个routineInfo,这个参数的定义比较有意思,这是个固定格式,主要目的是为了能够让诊断工具更加得通用。
    一般说来诊断工具分为两种,OEM自己的和通用诊断工具,OEM自己的很容易理解,因为有OEM的数据支持,所以基本上所有的数据都可以识别,而通用的诊断工具则没有办法识别OEM定义的部分内容;这个参数在一些OBD的标准里要求的例程是强制的,而对于OEM则是可选的。
    在这里插入图片描述

2)否定响应

否定响应码具体可以参照以上的否定响应流程。
在这里插入图片描述

五.RID Definition

RID就是RoutineIdentifier的缩写。

字节值说明说明详细
0x0000 – 0x00FFISOSAEReservedISOSAE保留位
0x0100 - 0x01FFTachographTestIds自动回转速度计测试标识符
0x0200 - 0xDFFFvehicleManufacturerSpecific车辆制造商专用
0xE000 - 0xE1FFOBDTestIdsOBD测试标识符
0xE200DeployLoopRoutineID部署点火线圈例程标识符
0xE201 – 0xE2FFSafetySystemRoutineIDs安全系统例程标识符
0xE300 - 0xEFFFISOSAEReservedISOSAE保留位
0xF000 - 0xFEFFsystemSupplierSpecific系统供应商专用
0xFF00eraseMemory清除内存
0xFF01checkProgrammingDependencies检查编程依赖性
0xFF02eraseMirrorMemoryDTCs清除镜像内存DTC
0xFF03 - 0xFFFFISOSAEReservedISOSAE保留位

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用腾讯云轻量应用服务器搭建免费开源企业CMS?

1.背景概述 腾讯云轻量应用服务器是新一代面向中小企业及开发者的云服务器产品,简单易用,一站式融合多款云服务,能帮助用户在云端快速构建网站、博客、电商、论坛等各类应用以及各类开发测试环境。 PbootCMS是一款针对企业网站开发的国产CM…

Docker+Node-exporter+Prometheus+Grafana

载docker-compose容器编排并授权x curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-uname -s-uname -m > /usr/local/bin/docker-compose && chmod x /usr/local/bin/docker-compose所有客户端服务器node-exporter的dock…

[附源码]JAVA毕业设计婴幼儿玩具共享租售平台(系统+LW)

[附源码]JAVA毕业设计婴幼儿玩具共享租售平台(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项…

C中的auto、static、register、extern、const和volitate

C语言中的每一个变量和函数有两个属性:数据类型和数据的存储类别。数据类型(整形、字符型等),存储类别是指数据在内存中存储的方法,存储方法有两大类:静态存储类和动态存储类。具体包括四种:自动…

TensorRT 高级用法

1,插件支持-转化TensorRT模型时不支持的算子 我们在做模型结构设计时,有时候自己会设计一些layer来满足任务需求,但是这些layer在使用Tensorrt优化时,TensorRT可能并不支持,如ROI Align,这时候就需要通过Pl…

vue源码分析-v-model的本质

双向数据绑定这个概念或者大家并不陌生,视图影响数据,数据同样影响视图,两者间有双向依赖的关系。在响应式系统构建的上,中,下篇我已经对数据影响视图的原理详细阐述清楚了。而如何完成视图影响数据这一关联&#xff1…

连接WiFi需要短信验证怎么做?

公共场所提供公共的无线wifi上网服务,需对用户进行实名认证。手机短信实名认证以其用户体验、综合成本等优势,成为公共无线上网认证的首选方案。 一、公共wifi需要短信验证怎么做 要实现访客无线上网短信认证功能,需要借助上网行为管理设备搭…

响应式开发基础知识以及大屏解决方案

1.响应式开发基础知识 1.1-媒体查询media: css中设置条件,基于media 媒体设备: all所有设备、print打印设备/screen屏幕设备媒体条件,符合某个条件,写对应的样式max-width、min-width、max-height、min-heigth 1.2-视口viewpo…

基于java+springboot+mybatis+vue+mysql的沁园健身房预约管理系统

项目介绍 现在无论是在PC上还是在手机上,相信全国所有地方都在进行网上健身房预约管理。随着经济的不断发展,系统管理也在不断增多,健身房预约平台就是其中一种。 本次的毕业设计主要就是在基于Java语言平台下设计并开发一个健身房预约平台…

k8s部署fabric 2.4

test-network的部署现状 dockerdocker-compose ip端口号:ip不可变,人工维护,不可冲突脚本化:程度低,部分流程需要登陆到容器中执行日志收集:无监控告警:无容器管理:无部署流程&…

4.1什么叫作PCB封装?它的分类一般有哪些? Cadence Allegro软件制作PCB封装的一般流程是什么?

笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验&a…

Java中的5个代码性能提升技巧,学会之后立马提升近10倍性能

文章目录预先分配 HashMap 的大小优化 HashMap 的 key不使用 Enum.values() 遍历使用 Enum 代替 String 常量使用高版本 JDK这篇文章介绍几个 Java 开发中可以进行 性能优化的小技巧,虽然大多数情况下极致优化代码是没有必要的,但是作为一名技术开发者&a…

如何通过nodejs快速搭建一个服务器

在前端开发过程中,可能某些时候需要自己搭建一台服务器用于一些文件图片请求或者进行后端相关知识的学习。本文主要讲解如何通过nodejs进行一个基础服务器的搭建,包括如何将文件布置的服务器,以及基础接口的开发。后面可能会更新关于通过node…

C# SuperSocket 手把手教你入门 傻瓜教程---9(CountSpliterReceiveFilter - 固定数量分隔符协议)使用COMMAND

C# SuperSocket 手把手教你入门 傻瓜教程系列教程 C# SuperSocket 手把手教你入门 傻瓜教程---1(服务器单向接收客户端发送数据) C# SuperSocket 手把手教你入门 傻瓜教程---2(服务器和客户端双向通信) C# SuperSocket 手把手教…

【Vue 快速入门系列】Vue数据实现本地存储、自定义事件绑定、全局事件总线、$nextTick的使用

文章目录一、本地存储1.概念2.接口3.实际操作二、自定义事件绑定1.自定义事件使用过程2.绑定自定义事件的语法3.其他注意事项三、全局事件总线1.全局事件总线概念2.全局事件总线的使用方式3.原理剖析四、$nextTick小技巧一、本地存储 1.概念 可以将数据临时存储到本地浏览器&…

基于适应度-距离平衡的人工生态系统优化求解暂态稳定约束最优潮流问题附matlab代码

​✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法…

数字时代,企业应该如何看待商业智能BI

新一代数字化相关技术的应用,使得数字化产品和服务覆盖了社会的方方面面,也让数据成为了构建现代化社会的核心元素,让人们明白数据不只是人类活动产生的附加品,还能够在应用过程中促进人类活动发展、优化和改变,真正成…

Python时间模块之datetime模块

目录 简介 函数介绍及运用 date:日期类 1.获取当前时间 2.日期对象的属性 3.date类中时间和时间戳的转换: 4.修改日期使用replace方法 time:时间类 time类操作 datetime:日期时间类 timedelta:时间间隔&…

【MySQL常用性能指标】

这里给大家分享一些MySQL的常用性能指标,可以对此增加一些自定义指标到数据库的监控里,如zabbix或者prometheus,来更好的检测数据库的状态。 我的MySQSL版本是5.7.19。因为是自己的测试环境,所以截图的一些指标很低,仅…

[附源码]Python计算机毕业设计SSM基于的考研信息共享平台(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…