zl程序教程

您现在的位置是:首页 >  其他

当前栏目

【UDS统一诊断服务】四、诊断典型服务(5)— 功能/元件测试功能单元(例行程序功能单元0x31)

测试服务 功能 统一 诊断 典型 单元 元件
2023-09-11 14:15:48 时间

四、诊断典型服务(5)— 功能/元件测试功能单元(例行程序功能单元)

我自己汇总了一张表格,免积分下载,对应学习,效果更好!
链接:https://download.csdn.net/download/sinat_40003796/85031818

各功能单元诊断服务:

  • 诊断和通信管理功能单元
  • 数据传输功能单元
  • 读故障信息功能单元(存储数据传输功能单元)
  • 在线编程功能单元(上传下载功能单元)
  • 功能/元件测试功能单元(例行程序功能单元)
  • 输入输出控制单元(0x2F)

本文主要讲解“功能/元件测试功能单元(例行程序功能单元)”,其余的见其它文章。

————————————————————

“功能/元件测试功能单元(例行程序功能单元)”包括的服务:

在这里插入图片描述

(1)RoutineControl (0x31)服务

  • 用于远程请求启动、停止某个例程或请求例程的执行结果

请求报文:

在这里插入图片描述

子功能routineControlType:

在这里插入图片描述

肯定响应:

在这里插入图片描述

RoutineControl (0x31)-详细介绍

31服务是调用ECU内置的一些操作序列的接口,这个服务的应用很灵活,因为厂家可以根据自己的需要为ECU定义各种各样的内部操作,而要执行这些操作只需要调用31服务就好了。典型的用途包括检查边界条件、清除闪存对数据进行校验对软硬件依赖性进行校验等,甚至有需要的话可以进行恢复出厂设置的操作,还有很多与ECU自身逻辑功能相关的操作也可以定义。
在这里插入图片描述
31服务的request由4部分组成 :

  • SID, 服务ID
  • sub-function,用于标识要执行什么动作,启动(0x01)、停止(0x02)、查询结果(0x03)?
  • routineIdentifier,用于标识要执行的routine
  • routineControlOptionRecord,这是一个可选参数,用于标识routine执行时所需要的参数,由各家自定义它的内容

举例1:
假设用0x0809这个ID来代表检查ECU是否满足软件刷写条件(比如车速、转速为0,KL15接通等)的routine。

tester发送31 01 08 09来启动0x0809这个routine

如果所有条件都满足,则ECU返回71 01 08 09作为echo即可,如果条件不满足,则ECU返回71 01 08 09 XX YY ZZ,后边的XX YY ZZ则表明哪些条件不满足,具体的内容就由厂家自己定义了。

举例2:
假设用0xFF00这个ID来代表清除ECU闪存的的routine。

tester发送31 01 FF 00 80 00 00 00 00 00 FF FF来启动FF 00 这个routine
80 00 00 00代表起始地址,00 00 FF FF代表数据长度(65535个字节)

如果正确执行了上面的routine,擦除了对应区域的数据,则ECU返回71 01 FF 00。