车载诊断协议UDS——DTC 判定机制以及DTC Status个人见解

         UDS协议是描述车载诊断内容的通用协议,诊断的功能伴随着ECU整个生命运行周期一直在运行。当控制器(ECU)运行过程中出现需求规范中所定义的故障类型,控制器通过相应的判定机制来判断这个故障是否达到一定阈值,满足产生DTC的条件(需要将DTC以及Status位存储在ECU内存中)。因此首先明白判定机制。老规矩,还是举一个例子辅助理解。

       对于具体一个控制器,定义诊断需求规范时,首先会定义它支持的DTC以及每个DTC名称、Enable Criteria、Test Frequency、Set condition、Correct Actions等等。比如控制器正常工作电压值是8-12 V,当控制器供电电压超过18 V为电压过载故障,并定义故障码为DTC1。众所周知,车载运行是一个非常复杂的运行状态,运行过程中不可避免会出现电涌等现象(电压出现峰值),当出现电涌,电压值大于18 V,又很快恢复正常电压,因此DTC不应该被记录。所以会有如下机制:

  1. 在规范中会定义检测频率,并设置一个Counter值;
  2. 每一个检测周期,通过采样模块,获取当前电压值;
  3. 若当前检测周期测出当前电压值大于18 V,Counter &
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这里是一个UDS诊断DTC服务的代码示例: ```c++ // 定义DTC结构体 typedef struct { uint16_t dtc_code; uint8_t dtc_status; uint8_t dtc_severity; uint8_t dtc_occurrence; } dtc_t; // DTC服务处理函数 void handle_dtc_service(uint8_t* data, uint16_t length) { // 读取DTC请求数据 uint8_t sub_function = data[1]; uint8_t dtc_status_mask = data[2]; uint8_t dtc_severity_mask = data[3]; uint8_t dtc_occurrence_mask = data[4]; // 模拟检测到的DTC列表 dtc_t dtc_list[] = { {0x1234, 0x01, 0x02, 0x01}, {0x5678, 0x01, 0x06, 0x01}, {0x9abc, 0x01, 0x04, 0x01} }; uint8_t num_dtcs = sizeof(dtc_list) / sizeof(dtc_t); // 构造DTC响应数据 uint8_t response_data[8 + num_dtcs * 4]; response_data[0] = 0x50; response_data[1] = sub_function; response_data[2] = num_dtcs; for (int i = 0; i < num_dtcs; i++) { dtc_t dtc = dtc_list[i]; if ((dtc_status_mask & dtc.dtc_status) && (dtc_severity_mask & dtc.dtc_severity) && (dtc_occurrence_mask & dtc.dtc_occurrence)) { response_data[3 + i * 4] = dtc.dtc_code >> 8; response_data[4 + i * 4] = dtc.dtc_code & 0xff; response_data[5 + i * 4] = dtc.dtc_status; response_data[6 + i * 4] = dtc.dtc_severity; response_data[7 + i * 4] = dtc.dtc_occurrence; } } // 发送DTC响应数据 send_can_message(0x7df, response_data, sizeof(response_data)); } ``` 这段代码演示了如何处理UDS诊断DTC服务请求。当收到该请求时,函数会模拟检测出几个DTC,并根据请求参数构造响应数据。最终,函数会通过CAN总线发送响应消息。请注意,这只是一个简单的示例,实际的代码可能要更加复杂和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

车载诊断技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值