一,背景
随着家用轿车的越来越普及,汽车保有量也越来越大,随之而产生的车联网产品也越来 越多。所有的车联网产品几乎都需要获取原车的数据,简单到车速,转速,节气门开度,剩 余油量等等。专车专用的车联网产品也进一步获取到了车门,车灯,安全带,档位等信息。 这里面其实就包含了获取原车数据的 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 诊断板,提供硬件原理图和软件源码。