TL718的OBD命令 - 汽车OBD2诊断程序开发
如果你向TL718发送的指令以16进制数的ASCII开头,则TL718认为是OBD命令,TL718接收后,把成对的ASCII码16进制数转换成单个字节的16进制数据发送到车辆电脑数据总线。OBD命令实际是被嵌入到数据消息包内后发送到数据总线上的,大多数标准要求:在每个数据消息包内包含三字节的头及最后一个数据校验字节。TL718自动添加了这些附加的字节,这些默认的值对OBD2诊断模式请求指令都不需要更改,但如果你想要更改这些头字节值,可以用内部命令“ATSH XXXXXX”更改。
大部分OBD指令长度只有一个字节或2个字节,TL718充许发送的最长度是对应标准规定的字节,超出部分将被丢弃。发出的OBD指令,不能出现单个的数字,16进制数必须成对发送,比喻0不可能发送单个的“0”,必须发送“00”,如果出现单个数字,TL718认为指令格式错误,将返回一个“?”。由于OBD(汽车诊断标准)都使用16进制,所以TL718接收发送的数据也是16进制的。例15的代表的十进制值是21;
当发送完OBD2命令后,TL718等待从总线接收OBD消息,如果接收到地址的消息并且地址匹配,则TL718就把数据从RS232发送给PC,如果TL718接收到的消息和发送的地址不匹配,则忽略该消息。但也可以通过ATBD内部命令查看该接收到的消息包。如果直到等待时间(P2MAX ATST命令的设置值,默认值100ms)结束,没有接收到匹配地址的数据,则TL718返回“NO DATA”,如果接收到数据并且地址匹配则复位计时间,继续等待,直到等待时间溢出。
OBD2标准诊断模式
开发OBD2诊断程序,必须掌握ISO 15031-5( SAE J1979)定义的九种诊断模式,对于英文不是很好的朋友,本站有个中文的说明:
可以参考:
OBD系统输出信息的模式/服务
每个模式后面紧跟一个参数标识(PID)表示后面是什么参数,每个模式的PID 00 是ISO15031定义专用的参数,每个符合标准的电脑必须支持这个参数标识。代表该模式对其他PID是否支持。
- Mode 1: 请求动力系当前数据
- Mode 2: 请求冻结祯数据
- Mode 3: 请求排放相关的动力系诊断故障码
- Mode 4: 清除/复位排放相关的诊断信息
- Mode 5: 请求氧传感器监测测试结果
- Mode 6: 请求非连续监测系统OBD测试结果
- Mode 7: 请求连续监测系统OBD测试结果
- Mode 8: 请求控制车载系统,测试或者部件
- Mode 9: 读车辆和标定识别号
与车辆数据通讯
OBD2命令的格式
1、
上图是OBD2的诊断指令的消息包的完整格式(极大部分厂商专用的功能也是这种格式),TL718能自动设定了Header/ID/PCI/CHECKSUM这部分数据,对于标准的OBD2诊断程序你都几乎不用关心修改它。想了解有关内容,它们分别定义在ISO14230-2、J1850 、IS9141-2 和ISO15765-2数据链层定义的文本内。
TL718自动检测数据总线的物理连接,能在协议1-9间自动搜寻当前车辆的协议,搜寻到后自动返回数据。当然也可手工设定到某个特定的协议。TL718不搜寻A-F协议,因为A-F协议它们没有象OBD2一样有一个统一的ISO15031应用层协议,那样的话自动搜索变得毫无意义。
2、ISO15031(SAE J1979)是应用层的协议,同样它也不用关心使用什么样的物理层协议(TL718自动连接),你编程时只要发送数据,和接收及处理接收回来的数据(计算或显示)。所以这么多种物理连接,以统一标准规定的数据包来发送接收,我們编程处理变得相对简单。下面我们来讨论OBD2指令。
3、这里我们只要关心数据消息包的7字节数据(data byte)部分就可以了
ISO15031-5定义:
字节 意义
1 MODE 代表请求数据的类型
2 PID 参数标识
3-7 根据不同的MODE及PID ISO15031-5有详细的定义
如上图所示,连接好线路及打开车匙到ON,不要起动车辆。不用做任何设定,只要你向TL718发送指令,TL718自动返回车辆响应的数据。
例 1: 图所示:“0100”代表ISO15031-5定义MODE 01 PID 00 指令。
>01 00
41 00 BF 9F B9 90
第1个字节 41 代表 Mode 01 (01+40,标准定义)
第2个字节 00 代表 PID 00
3-6字节是车辆发送回来关于 MODE 01 PID 00 请求返回来的数据
表示模式00 所支持其他(PID01---PID32)标识的按位定义的数据 1代表支持 0代表不支持。
例 2:请求(读取)发动机水温 MODE 01 PID 05
我们只要简单的向车辆发送0105指令
>0105
41 05 7B
41代表MODE 01
05代表 PID 05
7B是水温值 10进制数值是(7*16+11)123 水温是123-40=80度
例 3:读取发动机转速rpm MODE 01 PID 0C
同样只要向TL718发送:010C
>01 0C
41 0C 1A F8
1AF8是2字节的16进制值,转换为10进制数是6904,每格1/4 rpm
转速是6904/4=1726 rpm
注:以上数据的转换,及格式在ISO15031-5内有详细定义
- 第 1 页:汽车OBD2诊断程序开发
- 第 2 页:TL718的OBD命令
- 第 3 页:读OBD2故障码
本文导航
非常好我支持^.^
(89) 50%
不好我反对
(89) 50%
相关阅读:
- [电子说] 多种角度来了解OBD2 2023-09-04
- [电子说] KUKA C2数字电子伺服设备及分解器数字转换器诊断程序 2021-01-03
- [人工智能] 新的人工智能诊断程序可以预测是否感染新冠肺炎 2020-05-26
- [电子说] 怎样制作Arduino OBD2扫描仪 2019-11-14
- [通信设计应用] MAXQ1103破坏性复位诊断程序 2009-10-23
( 发表人:zhangjin )