>AT@S

CodeNumb:98764323

>

TL718的OBD命令

如果你向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系统输出信息的模式/服务

Mode 1: 请求动力系当前数据

Mode 2: 请求冻结祯数据

Mode 3: 请求排放相关的动力系诊断故障码

Mode 4: 清除/复位排放相关的诊断信息

Mode 5: 请求氧传感器监测测试结果

Mode 6: 请求非连续监测系统OBD测试结果

Mode 7: 请求连续监测系统OBD测试结果

Mode 8: 请求控制车载系统,测试或者部件

Mode 9: 读车辆和标定识别号每个模式后面紧跟一个参数标识(PID)表示后面是什么参数,每个模式的PID 00 是ISO15031定义专用的参数,每个符合标准的电脑必须支持这个参数标识。代表该模式对其他PID是否支持。

与车辆数据通讯

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内有详细定义

读OBD2故障码(DTCs Diagnostic Trouble Codes)    读故障码是诊断仪最常用的功能,这里只是简单的说明一下,详细内容请查阅ISO15031-5文本

一般情况下可直接用MODE 03读取当前故障码,但这里我们

先用MODE 01 PID 01读取现在有多少个故障码存在ECU内

>01 01

41 01 81 07 65 04

>

41 01 前面已说明是对MODE 01 PID 01的响应代码,

81   代表当前的故障码数,这个10进制数值是129,不是代表有129个故障码,

81它的最高位MSB 代表是否点亮故障指灯,低7位代表了故障码的数量

16进制算法应是 0x81 & 0x7F = 0x01 所以是一个故障码。也可是10进制数值直接减128

即:129-128=1;

所以81代表了,故障灯点亮,有一个故障码,81后面的数据请参考标准文本,和读故障码没有关系。

在这个例子中,TL718只返回了一行数据,但是如果有另外的控制模块也附合响应条件,有可能返回多行信息。

比喻常见的:发动机电脑和自动波箱控制电脑同时返回信息,就会有2行信息,要确认是哪一个电脑返回的是哪一行

信息,必须设置返回OBD消息保的三字节头(AT H1内部命令打开),查看消息头字节中的第三个字节(源地址)确定

是那个电脑模块返回的消息包。这里先不讨论,在另外章节来详细讨论,多消息包数据。

现在已经读了有多少个故障码,下一步读实际的故障码是什么。

用OBD2诊断模式MODE 03读取:只要简单地向TL718发送03

>03

可能的返回信息数据如下:

43 01 33 00 00 00 00

注:如果故障码数量多于3或多个电脑模块,会返回多行消息包,

43是对MODE 03 请求的响应(03+40),另外的6个字节是故障代码,2个字节代表一个故障码。

这里有3个代表故障码的数据:0133 0000 0000,“0000”是ISO15031在这个模式下返回的填充数据

不是实际的故障码。

故障码含义:ISO定义:二字节故障码(例0133)的第一个数如下表所示  现在来分析上面的故障码 0133:

第一个数字“0”按上表用“P0”代替。0133就代表是故障码P0133。

同样如果收到的是D016则,“D”用U1代替,则故障代码就时U1016;

如果收到是1131则代换后,故障代码是P1131。

注:ISO15765 CAN故障码消息包和J11850、ISO9141 ISO14230返回的信息有稍不同,

编写程序时要注意,ISO 15765 返回的信息第二个数据代表的是电脑模块有多少个故障码(DTCs),

详细看ISO15031-5内定义。

清除故障代码

OBD2诊断模式MODE04 是复位ECU的一个功能,同时也清触故障代码;执行后ECU将:

1、复位故障代码的数量为0

2、删除所有的故障代码

3、删除存储的冻结桢数据

4、删除所有O2传感器听测试数据

5、删除模式MODE06 和 MODE 07的数据信息

复位后你的汽车由于复位了一些数据,短时间内可能会引起工作异常。为了防止不小心复位ECU,

ISO15031-5要求所有的扫描工具(诊断仪)在发送MODE 04指令前,必须加一个“确认信息”。

TL718不监视发送信息的内容是否是复位指令。

>04

44

>

发送04指令后,车辆ECU接收成攻,将立即复位以上内容,

并发回一个MODE 04的响应信息44(04+40)。

一般的流程:

结束语

ISO14230 ISO9141要求通讯前的初始化过程、及连接后要求有一个周期性的握手信号,这些TL718都已经自动完成,OBD2标准的诊断程序都不用更改。怎样更改这些参数:

看完这些内容,就可开始你的OBD2开发。实际上厂商专用的诊断功能程序差不多也是这么简单。为什么叫专用,是因为它没有公开应用层的协议。开发时比我们OBD2开发多少一个过程。就是怎样用TL718从专用的设备中读得专用的诊断指令(也就是应用层协议)。在开发专用功能的诊断仪中讨论这个问题。

OBD2其他的诊断模式这里不再说明,诊断方法都是一样的。详细内容查看ISO15031-5或SAE J1979。

多试多做你会发现开发诊断程序原来如此简单。

c语言OBD编程,汽车OBD2诊断程序开发相关推荐

  1. 汽车OBD2诊断程序开发 (原文转载,思路很清晰!)

    原文地址::https://www.cnblogs.com/mike88992/p/3274497.html 相关文章 1.一个完整的汽车OBD仪器的源码,每个模块的代码都在里面----http:// ...

  2. c语言如何编程硬件,很多硬件开发都用C语言编程.PPT

    很多硬件开发都用C语言编程 单片机的C语言编程称为C51编程,应用C51编程具有以下优点: (1)C51编译器管理内部寄存器和存贮器的分配,编程时,无需考虑不同存储器的寻址和数据类型等细节问题: (2 ...

  3. c语言蜂窝编程问题,【iOS开发】判断蜂窝网络类型及系统bug

    判断蜂窝网络类型 最近项目需求要判断当前蜂窝网络类型,查了一些资料,进行一个总结. 首先导入框架 #import 主要使用currentRadioAccessTechnology属性进行判断 CTTe ...

  4. 融云开发漫谈:你是否了解Go语言并发编程的第一要义?

    2007年诞生的Go语言,凭借其近C的执行性能和近解析型语言的开发效率,以及近乎完美的编译速度,席卷全球.Go语言相关书籍也如雨后春笋般涌现,前不久,一本名为<Go语言并发之道>的书籍被翻 ...

  5. Go语言开发(九)、Go语言并发编程

    Go语言开发(九).Go语言并发编程 一.goroutine简介 1.并发与并行简介 并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行. 并发(concurrency):指在同 ...

  6. 北京linux嵌入式培训,北京嵌入式培训上嵌Linux开发基础和嵌入式C语言初级编程总结...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 说到学习Linux开发基础,有一样是不得不说,而且Llinux系统中最常用也最有用的东西,那就是各种命令.虽然Linux桌面应用发展很快,但是命 令在Li ...

  7. Computer:少儿编程—每个人都应该学习编程,它能教你如何思考—编程入门的简介(编程语言的特点种类开发工具对比人类语言)、编程应用、编程意义之详细攻略

    Computer:少儿编程-每个人都应该学习编程,它能教你如何思考-编程入门的简介(编程语言的特点&种类&开发工具&对比人类语言).编程应用.编程意义之详细攻略 导读:乔布斯说 ...

  8. linux c 蓝牙开发环境,基于BlueZ的C语言蓝牙编程

    原文出处: 第四章 基于BlueZ的C语言蓝牙编程 有很多理由促使我们选用C替代其他高级语言来例如Python来开发蓝牙应用程序.Python环境可能并不适合于嵌入式系统.因为嵌入式系统对程序的大 小 ...

  9. c语言编程抢30,C语言编写抢三十游戏——开发笔记(总结).doc

    C语言编写抢三十游戏--开发笔记(总结) 课程设计题目:抢三十游戏 学号:XXX 姓名:XXX 组员:XXX(组长).XXX.XXX.XXX.XXX.XXX 设计时间:2009-12-19 相关背景: ...

  10. Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)

    Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...

最新文章

  1. 多个SSH Key自动化配置
  2. Postgresql 物理热备份 -- 快照备份
  3. python生成器推导式的结果是一个什么类似于对象_python 生成器和推导式
  4. 飞利浦dicom_如何按计划打开或关闭飞利浦色相灯
  5. 终于有人把安卓程序员必学知识点全整理出来了,BAT大厂面试总结
  6. 前端学习(701):循环小总结
  7. oracle binary_integer pls_integer,oracle中binaryinteger与plsinteger的区别
  8. PHP错误类型及屏蔽方法
  9. Java 单例模式详解(转)
  10. 7. 从数据库获取数据- 从零开始学Laravel
  11. 递归实现排列型枚举(搜索)
  12. Windows on Device 项目实践 1 - PWM调光灯制作
  13. 硬件入门之PCB设计注意事项
  14. 山东法律学校97级二班计算机班,关于表彰全国三好学生、全国优秀学生干部和全国先进班集体及其标兵的决定...
  15. 老人拿家谱自称傅友德后代,学者:朱元璋诛九族却放过了六岁小孩
  16. CDH踩坑记录之:熵不足
  17. 【代码写春联】新年新祝福,算算你的运势,教你如何用MATLAB以烟花、对联的形式打开2022年,爱满人间(附MATLAB和Python代码实现)
  18. 计算机磁盘文件怎么加密,win10怎样对电脑硬盘文件进行加密 windows10给电脑硬盘文件加密教程...
  19. 织梦后台图片预览功能跳到顶部怎么修改
  20. StreamX 在 Joyme 的生产实践,从遇见到相爱一气呵成

热门文章

  1. nginx 安装到Java代码上传图片利用ftp过程遇到的问题总结
  2. 第一次在csdn写博客!
  3. 利用C语言写一个等额本息的还款计算器。
  4. 环境保护概论课程作业
  5. 正则校验18位身份证号,拿走即用!
  6. docker安装solr搜索引擎
  7. export default function和export function的区别
  8. SSL证书中DV证书、OV证书和EV证书的区别
  9. java从文本中提取姓名、身份证、电话、地址
  10. Android 消息通知栏用法详解(一)