历史车库

话题31228条    关注912人

+关注
话题

基于EST327芯片开发OBD读取和清除故障码

读故障码是诊断仪最常用的功能,这里只是简单的说明一下,详细内容请查阅ISO15031-5文本??一般情况下可直接用MODE03读取当前故障码,但这里我们先用MODE01PID01读取现在有多少个故障码存在ECU内????????>0101??????410181076504????>????4101前面已说明是对MODE01PID01的响应代码,????81?代表当前的故障码数,这个10进制数值是129,不是代表有129个故障码,????????81它的最高位MSB代表是否点亮故障指灯,低7位代表了故障码的数量????????16进制算法应是0x81&0x7F=0x01所以是一个故障码。也可是10进制数值直接减128????????即:129-128=1;????????所以81代表了,故障灯点亮,有一个故障码,81后面的数据请参考标准文本,和读故障码没有关系。在这个例子中,EST327只返回了一行数据,但是如果有另外的控制模块也附合响应条件,有可能返回多行信息。比喻常见的:发动机电脑和自动波箱控制电脑同时返回信息,就会有2行信息,要确认是哪一个电脑返回的是哪一行信息,必须设置返回OBD消息保的三字节头(ATH1内部命令打开),查看消息头字节中的第三个字节(源地址)确定是那个电脑模块返回的消息包。这里先不讨论,在另外章节来详细讨论,多消息包数据。现在已经读了有多少个故障码,下一步读实际的故障码是什么。??????用OBD2诊断模式MODE03读取:只要简单地向EST327发送03??????????????>03??????可能的返回信息数据如下:??????43013300000000????????????注:如果故障码数量多于3或多个电脑模块,会返回多行消息包,????????????43是对MODE03请求的响应(03+40),另外的6个字节是故障代码,2个字节代表一个故障码。????这里有3个代表故障码的数据:013300000000,“0000”是ISO15031在这个模式下返回的填充数据,不是实际的故障码。0133就代表是故障码P0133。同样如果收到的是D016则,“D”用U1代替,则故障代码就时U1016;如果收到是1131则代换后,故障代码是P1131。???注:ISO15765CAN故障码消息包和J11850、ISO9141ISO14230返回的信息有稍不同,编写程序时要注意,ISO15765返回的信息第二个数据代表的是电脑模块有多少个故障码(DTCs),详细看ISO15031-5内定义。清除故障代码OBD2诊断模式MODE04是复位ECU的一个功能,同时也清触故障代码;执行后ECU将:1、复位故障代码的数量为02、删除所有的故障代码3、删除存储的冻结桢数据4、删除所有O2传感器听测试数据5、删除模式MODE06和MODE07的数据信息复位后你的汽车由于复位了一些数据,短时间内可能会引起工作异常。为了防止不小心复位ECU,ISO15031-5要求所有的扫描工具(诊断仪)在发送MODE04指令前,必须加一个“确认信息”。??EST327不监视发送信息的内容是否是复位指令。??????>04??????44??????>????发送04指令后,车辆ECU接收成攻,将立即复位以上内容,????并发回一个MODE04的响应信息44(04+40)。ISO14230ISO9141要求通讯前的初始化过程、及连接后要求有一个周期性的握手信号,这些EST327都已经自动完成,OBD2标准的诊断程序都不用更改。怎样更改这些参数:看完这些内容,就可开始你的OBD2开发。实际上厂商专用的诊断功能程序差不多也是这么简单。为什么叫专用,是因为它没有公开应用层的协议。开发时比我们OBD2开发多少一个过程。就是怎样用EST327从专用的设备中读得专用的诊断指令(也就是应用层协议)。在开发专用功能的诊断仪中讨论这个问题。OBD2其他的诊断模式这里不再说明,诊断方法都是一样的。

收藏

2014-11-26

0

你轻轻一赞
是我大大的动力

我关注的部落

登录关注部落,才有更多签到。请先登录