OBD诊断协议

上周领导需要做个OBD相关的功能,我对OBD没有啥概念,于是周末就了解下这到底是个啥东西。了解过后发现很简单,其实就是个UDS协议的简化版,OBD是英文On-Board Diagnostics的缩写,中文翻译为“车载自动诊断系统”,有自己一套偏向于排放的诊断协议。

硬件

硬件比较简单,就2行8列16个口/引脚,实物长这样。

具体引脚的功能

1    Reserved
2    SAE J1850 总线的正线
3    Reserved
4    底盘地
5    信号地
6    CAN_H
7    K线
8    Reserved
9    Reserved
10    SAE J1850 总线的负线
11    Reserved
12    Reserved
13    Reserved
14    CAN_L Can
15    L线
16    电池电压

所以我们看到里面最重要的就是两条CAN线,一半我们也是重点关注这两条线。

服务的总体介绍

有以下几个服务,其中0x05已经删除了,因为0x06就能完全包含。

读取动力系统当前诊断相关数据(0x01)服务

根据PID读取对应排放相关的当前数据,包括:模拟输入/输出数据数字输入/输出数据,系统状态信息。
要求必须是实际读取的值,非默认值或替代值。

里面定义了一种像DID一样的参数,叫PID,并不要求把这些参数都实现,可以支持部分PID就行。但是有一点,所有支持OBD标准的ECU都必须支持0x01,PID=0x00的服务,其它PID不做强制要求。

有部分PID的作用是查询其他PID是否支持,譬如0x00,0x20,0x40,0x60...0xE0,我们称为查询PID,表示查询ECU对其它PID支持信息回复数据4字节32位,依次对应ECU对其后32个PID支持信息。举几个例子:

PID 0x00 用于查询(0x01~0x20)之间支持的PID参数

PID 0x20 用于查询(0x21~0x40)之间支持的PID参数

PID 0x40 用于查询 (0x41~0x60)之间支持的PID参数

……

后面一样一直到0xE0。

被支持的PID我们称为数据PID。

所以一般诊断的流程分两步:

1、先发送查询PID,看看是否支持我们想要的查询的数据PID。

2、根据接收到的支持PID结果,再发送想要的查询的数据PID。

请求报文要求

最多可以包含六个PID
在同一条请求报文中,可以重复出现同一个PID,但是不能同时出现查询PID不能和数据PID。

响应报文要求

ECU支持最多6个PID的请求
如果同一条请求当中,重复出现同一个PID,就当作多个处理。

响应报文中PID的顺序不要求同于在请求报文中的顺序,譬如请求时候是12345,响应的时候可以是54321。

查询PID举例

请求报文

数据描述
0x01服务ID
0x00查询PID,查询0x01~0x20之间的PID是否支持

响应报文

数据描述
0x41正响应:服务ID+0x40
0x00接收到的查询PID
0x880x65 = 1000 1000 支持PID 0x01和0x05
0x660x66 = 0110 0110 支持PID 0x0A/0x0B/0x0E/0x0F
0x00在0x11~0x18范围内没有支持的PID
0x00在0x19~0x20范围内没有支持的PID

数据PID举例

请求报文

数据描述
0x01服务ID
0x05查询数据PID
0x0A查询数据PID

响应报文

数据描述
0x41正响应:服务ID+0x40
0x0A接收到的数据PID
0x08数据PID0A的具体数据
0x05接收到的数据PID
0x00数据PID05的具体数据高位
0x64数据PID05的具体数据低位

在这里大家可以看出,相应的顺序不一定要跟请求的一样,而且每个PID具体数据长度是双方约定好的。

读取动力系统冻结帧数据(0x02)服务

跟UDS协议里面的冻结帧是一样的作用,这个服务也有查询PID,在0x02服务里面,PID就是冻结帧的ID。规定PID=0x02返回的是引起冻结帧数据的DTC,如果ECU中没有冻结帧数据,那么返回的DTC=0x00。OBD协议的DTC比较短,只有2个字节,例子如下。

请求报文要求

最多可以包含3个PID

在同一条请求报文中,可以重复出现同一个PID,但是不能同时出现查询PID不能和数据PID。

响应报文要求

ECU支持最多3个PID

如果同一条请求当中,重复出现同一个PID,就当作多个处理。
响应报文中PID的顺序不要求同于在请求报文中的顺序,譬如请求时候是12345,响应的时候可以是54321。

查询PID举例

请求报文

数据描述
0x02服务ID
0x00PID
0x00帧类型,默认为0

响应报文

数据描述
0x42正响应:服务ID+0x40
0x00查询PID
0x00帧类型,默认为0
0x16支持的PID
0x36支持的PID
0x7C支持的PID
0x59支持的PID

读取冻结帧举例

请求报文

数据描述
0x02服务ID
0x06冻结帧PID
0x00帧类型,默认为0

响应报文

数据描述
0x42正响应:服务ID+0x40
0x06冻结帧PID
0x00帧类型,默认为0
0x15冻结帧数据
0x36冻结帧数据
0x74冻结帧数据
0xB9冻结帧数据

读取引起冻结帧数据的DTC举例

请求报文

数据描述
0x02服务ID
0x02查询引起冻结帧数据的DTC
0x00帧类型,默认为0

响应报文

数据描述
0x42正响应:服务ID+0x40
0x02查询引起冻结帧数据的DTC
0x00帧类型,默认为0
0x01第1个DTC高位
0x30第1个DTC低位
0x001第2个DTC高位
0x5D第2个DTC低位

读取确认的排放相关故障码(0x03)服务

看看已经发生故障的DTC有哪些,跟UDS的19服务是一样的。

举例

请求报文

数据描述
0x03服务ID

响应报文

数据描述
0x43正响应:服务ID+0x40
0x02已经故障的DTC有2个
0x01第1个DTC高位
0x14第1个DTC低位
0x01第2个DTC高位
0x56第2个DTC低位

如果都没有故障则会回复43 00

清除排放相关诊断信息(0x04)服务

相当于UDS的14服务,清除的数据包括DTC的故障状态码、冻结帧、扩展数据等。

举例

请求报文

数据描述
0x04服务ID

响应报文

数据描述
0x44正响应:服务ID+0x40

请求氧传感器的检测结果(0x05)服务

监控氧传感器的测试结果,一般06服务已经涵盖了05服务。它跟服务01一样,有查询PID,不过这里叫TID(Test Identifiers)测试表示符,分为三种查询TID,组件TID和数据TID。

整个流程有3步:

1、先发送查询TID,看看是否支持我们想要的查询的组件TID。

2、根据接收到支持的组件TID结果,再发送想要的查询的数据TID。

3、接收到的数据TID结果。

报文跟06服务差不多,如果没有组件TID,流程就缩减为2步,在第二步就请求数据TID结果。

请求规定监测系统的OBD监测结果(0x06)服务

跟UDS的31服务一样,这里的ID被称为MID。

举例

请求报文

数据描述
0x06服务ID
0x10MID

响应报文

数据描述
0x46正响应:服务ID+0x40
0x10MID
0x01检测结果高位
0x56检测结果低位
0xFF上限值高位
0xFF上限值低位
0x00下限值高位
0x00下限值低位

读取排放相关当前或最后驾驶循环的故障码(0x07)服务

该服务主要应用于汽车维修后的测试工作当清除所有故障码后,测试一个驾驶循环,如果失败,则会出现故障码,当然这并不代表部件/系统故障,还需要进一步的测试,于是就使用0x03服务进行详细的测试。

举例

请求报文

数据描述
0x07服务ID

响应报文

数据描述
0x47正响应:服务ID+0x40
0x01第1个DTC高位
0x1C第1个DTC低位
0x33第2个DTC高位
0x13第2个DTC低位
0x01第3个DTC高位
0x56第3个DTC低位

请求控制车载系统、测试或元部件(0x08)服务

这个服务使用的比较少,也就是UDS的0x31服务。请求报文只会请求开启、关断或者持续一定时间的循环测试。响应报文里面也只是上报个系统状态或者测试结果。这个服务也有查询TID。

举例

请求报文

数据描述
0x08服务ID
0x45测试TID
0x89测试数据
0x33测试数据

响应报文

数据描述
0x48正响应:服务ID+0x40
0x45测试TID
0x89测试结果
0x86测试结果
0x00测试结果
0x96测试结果

读取车辆信息(0x09)服务

跟UDS的22服务读取DID一样,和前面提到的PID TID一样,这里叫InfoType,一样有查询InfoType。

举例

请求报文

数据描述
0x09服务ID
0x05InfoType

响应报文

数据描述
0x49正响应:服务ID+0x40
0x05InfoType
0xAAInfoType05高位
0xBBInfoType05低位

多帧处理

最后讲讲这个,大家才知道实际的数据帧里面是怎么发的

单帧举例

请求报文

数据描述
0x7DF诊断仪发送的报文CANID
0x08DLC
0x02第1字节数据,有效数据总长。
0x01第2字节数据,有效数据第1字节
0x00第3字节数据,有效数据第2字节
0x00第4字节数据,填充数据
0x00第5字节数据,填充数据
0x00第6字节数据,填充数据
0x00第7字节数据,填充数据
0x00第8字节数据,填充数据

响应报文

数据描述
0x760DUT发送的报文CANID
0x08DLC
0x06第1字节数据,有效数据总长。
0x41

第2字节数据,有效数据第1字节

0x00第3字节数据,有效数据第2字节
0x43第4字节数据,有效数据第3字节
0xB6第5字节数据,有效数据第4字节
0x4A第6字节数据,有效数据第5字节
0xF3第7字节数据,有效数据第6字节
0x00第8字节数据,填充数据

多帧举例

请求报文

数据描述
0x7DF诊断仪发送的报文CANID
0x08DLC
0x03第1字节数据,有效数据总长。
0x02

第2字节数据,有效数据第1字节

0x02第3字节数据,有效数据第2字节
0x00第4字节数据,有效数据第3字节
0x00第5字节数据,填充数据
0x00第6字节数据,填充数据
0x00第7字节数据,填充数据
0x00第8字节数据,填充数据

响应报文第一帧

数据描述
0x760DUT发送的报文CANID
0x08DLC
0x0D第1字节数据,有效数据总长。
0x42

第2字节数据,有效数据第1字节

0x02第3字节数据,有效数据第2字节
0x00第4字节数据,有效数据第3字节
0x01第5字节数据,有效数据第4字节
0x30第6字节数据,有效数据第5字节
0x01第7字节数据,有效数据第6字节
0x5D第8字节数据,有效数据第7字节

响应报文第二帧

数据描述
0x760DUT发送的报文CANID
0x08DLC
0x15第1字节数据,有效数据第8字节
0x63

第2字节数据,有效数据第9字节

0xD2第3字节数据,有效数据第10字节
0xCF第4字节数据,有效数据第11字节
0x66第5字节数据,有效数据第12字节
0x88第6字节数据,有效数据第13字节
0x00第7字节数据,填充数据
0x00第8字节数据,填充数据

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

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

相关文章

链表反转--理解链表指针的基本操作

链表反转--理解链表指针的基本操作 链表反转的方法--主要是理解链表指针链表心得类节点是对象和指针区别: 链表反转的方法–主要是理解链表指针 根据值创建新列表 用一个链表指针代替整个新链表 两个链表的赋值 递归求解反向链表 用一个链表代替前后链表数…

Qt应用程序发布

一、静态编译发布 1.0:以Release模式构建工程 1.1:查看当前构建生成路径,并将所生成的.exe单独拷贝出来 1.2:将可执行文件*.exe拷贝至任一目标文件夹:D:\Temporary\QQIF 2:查看安装Qt时发布工具windeployqt.exe所在的目录 windeployqt.exe在Qt开发套件的bin目录下。Qt的每…

构建高效稳定的短视频直播系统架构

随着短视频直播的迅猛发展,构建一个高效稳定的短视频直播系统架构成为了互联网企业的重要挑战。本文将探讨如何构建高效稳定的短视频直播系统架构,以提供优质的用户体验和满足日益增长的用户需求。 ### 1. 短视频直播系统的背景 短视频直播近年来蓬勃发…

Pycharm 添加内容根

解决问题:包未能被正常引入时

try…except…finally语句

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 完整的异常处理语句应该包含finally代码块,通常情况下,无论程序中有无异常产生,finally代码块中的代码都会被执行…

2024 年该如何利用 MidJourney 创作AI艺术(详细教程)

什么是 Midjourney Midjourney 是根据文本提示创建图像的生成式人工智能的优秀范例。与 Dall-E 和 Stable Diffusion 一样,它已成为最受欢迎的人工智能艺术创作工具之一。与竞争对手不同的是,Midjourney 是自筹资金和封闭源代码的,因此对它的…

【WRF理论第二期】模型目录介绍

WRF理论第二期:模型目录介绍 1 WRF主目录2 WPS主目录3 编译后的可执行文件4 运行目录参考 了解 WRF 模型的目录结构有助于有效地管理和操作模型,从而确保模拟和分析工作的顺利进行。以下分解介绍WRF主目录、WPS主目录等。 Github-wrf-model/WRF 1 WRF…

leetCode-hot100-二分查找专题

二分查找 简介原理分析易错点分析例题33.搜索旋转排序数组34.在排序数组中查找元素的第一个和最后一个位置35.搜索插入位置240.搜索二维矩阵 Ⅱ 简介 二分查找,是指在有序(升序/降序)数组查找符合条件的元素,或者确定某个区间左右…

找不到steam_api64.dll,无法继续执行的原因及解决方法

电脑已经成为我们生活中不可或缺的一部分。然而,在使用电脑的过程中,我们经常会遇到一些常见的问题,其中之一就是找不到某个特定的动态链接库文件,比如steamapi64.dll。这个问题可能会导致某些应用程序无法正常运行,给…

关于博图17安装体验过程—博图17安装失败原因(STEP7 许可证找不到)

目录 一、序言 二、正片 一、序言 该失败原因是在我使用Win11专业版安装博图17时出现的问题,也仅代表我的体验过程!以下我将安装过程和解决问题的过程描述一下,希望可以帮助和我一样自己安装博图时能够解决出现的问题。 二、正片 如果阁下…

linux驱动学习(五)之字符设备

需要板子一起学习的可以这里购买(含资料):点击跳转 一、 linux设备驱动分类 1、字符设备---char 应用程序与驱动程序在进行数据传输时,数据以"字节"为单位。 特点: [1] 按照顺序进行数据传输 [2] 数据传…

vscode专区

1.展示多行的文件导航标签,而非只有1行 1.1打开设置 1.2搜索该设置"workbench.editor.wrap.tabs",并勾选 1.3效果对比

vue+vscode 快速搭建运行调试环境与发布

1.安装node.js Node.js — Run JavaScript Everywhere 默认不断next 2.更换镜像地址 运行-cmd 执行以下代码安装 npm config set registry https://registry.npmmirror.com 检查node.js和镜像是否是否成功 node -v npm -v npm config get registry 3.安装打包工具 …

吊车报警的工作原理和使用场景_鼎跃安全

在现代建筑施工过程中,经常使用大型机械设备,如挖掘机、吊车、打桩机等,这些设备在施工过程中发挥着越来越重要的作用;同时,这些设备的作业频繁进行作业,对于接触到高压电线的风险也随之增加。大型机械设备…

Leetcode学习

回文数 反转一半数字 第一个想法是将数字转换为字符串,并检查字符串是否为回文。 但是,这需要额外的非常量空间来创建问题描述中所不允许的字符串。 第二个想法是将数字本身反转,然后将反转的数字与原始数字比较,如果它们是相同…

【计算机毕设】基于SpringBoot的中小企业设备管理系统设计与实现 - 源码免费(私信领取)

免费领取源码 | 项目完整可运行 | v:chengn7890 诚招源码校园代理! 1. 研究目的 在中小企业中,设备管理是确保生产和运营效率的重要环节。传统的设备管理通常依赖于手工记录和人工管理,容易导致数据不准确、…

近屿OJAC带你解读:什么是ML?

概念定义 ML是机器学习(Machine Learning)的缩写。机器学习是人工智能的一个分支,它使计算机系统能够从数据中学习和改进,而无需进行明确的编程指令。简单来说,机器学习涉及到开发算法和统计模型,让计算机…

UE4 使用自带的插件制作音频可视化

1.插件默认为开启 2.新建共感NRT,选择要使用的音频 3.添加音频组件,添加共感NRT变量,选择新建的共感NRT对象 4.编写蓝图

基础—SQL—DQL(数据查询语言)分页查询

一、引言 上一篇博客学习了排序查询,这次来讲查询的最后一个部分:分页查询。 涉及到的关键字是:LIMIT 。 二、DQL—分页查询 对于分页,不管以后做的是传统的管理系统还是做互联网的项目,基本上都会遇到分页查询的操…

计网ppt标黄知识点整理第(4)章节——谢希仁版本、期末复习自用

路由器:查找转发表,转发分组。 IP网的意义:当互联网上的主机进行通信时,就好像在一个网络上通信一样,看不见互连的各具体的网络异构细节。如果在这种覆盖全球的 IP 网的上层使用 TCP 协议,那么就…