一种基于 ISO15765 协议的获取车辆信息的方法

一,背景
随着家用轿车的越来越普及,汽车保有量也越来越大,随之而产生的车联网产品也越来 越多。所有的车联网产品几乎都需要获取原车的数据,简单到车速,转速,节气门开度,剩 余油量等等。专车专用的车联网产品也进一步获取到了车门,车灯,安全带,档位等信息。 这里面其实就包含了获取原车数据的 2 种办法,一种是通过 OBD 诊断接口发送请求命令获 取车辆信息,一种是通过监听 CAN 总线数据分析获取车辆信息。今天我们来介绍通过 OBD 诊断接口获取原车信息的办法。
二,方法简介
通过 OBD 诊断接口获取原车数据的办法,是一种最常用的办法。也是市面上很多车联 网产品的技术方案选择该办法。 如下图,这是汽车 OBD 接口的针脚定义图,6 针脚是 CANH,14 针脚是 CANL,4,5 针脚 是地线,16 针脚是 VCC,接电瓶电源的,常电,即使车辆熄火该针脚也有电压。就是通过该 接口,连接 6,14 号针脚,CAN 总线发送数据给行车电脑,然后行车电脑会返回车辆信息。
在这里插入图片描述

三,具体发送命令解析
外部终端发送、和行车电脑返回数据的通用格式如下:
终端发送: CANID 为:7DF 报文数据为: 02 01 PIDx 00 00 00 00 00
ECU 回复: CANID 为:7E8 报文数据为:07 41 PIDx A B C D 00
来直接的,如果想要从 OBD 口获取到发动机转速如何发送和接受解析命令?
发送 SID:0x07DF 数据字节(HEX):02 01 0C 00 00 00 00 00
接收 SID:0x07E8 数据字节(HEX):04 41 0C 0B 3E 00 00 00
以上发送命令解析为:7DF,为 CANID,这个 CANID 是所有具有诊断功能的行车电脑都会相 应的一个 CANID。发送的数据中,02 代表数据长度,后面有效字节长度为 2,即 010C。01 代表服务号,也叫 SID,其中 01 是动力有关的数据,01 服务为用的最多的一个服务。0C 代 表参数 ID,也叫 PID,这个 PID 具体定义在 IS015031-5 里面,此处 0C 这个是发动机转速的 PID。总结起来这条请求报文就是:外部设备要向行车电脑请求发动机转速!
接收到的数据为行车电脑返回的数据,其中 7E8 为行车电脑的物理 ID,也是 CANID。 CAN 报文数据为:04,代表后续有效字节有 4 个。41 为对 01 服务的一个应答,所有行车电 脑返回的数据,都会在请求数据的基础上加 0x40 返回(0X01+0X40 即 0x41)。0C 对应请求 命令中的 0C,代表发动机转速。0B 3E 代表转速值,为十六进制的转换为十进制为: 0x0B3E=2878,但是这个里面还有一个解析算法,这个值除以 4 为实际转速,也就是实际转速 为 2878/4=719 转。
四,PID 对应关系以及算法解析
通过第 3 部分我们知道,其实请求车子数据项,除了知道以上的数据格式之外,还需要
清除的知道各个 PID 的定义,以及行车电脑对应 PID 的解析算法。这个我们已经帮大家总结 好,见我另一篇文章<<乘用车汽车诊断总结>>。截图如下
在这里插入图片描述

五,对应硬件套件
外部请求设备,也叫 OBD 诊断板,提供硬件原理图和软件源码。
在这里插入图片描述