如何在CAPL中的诊断请求中设置DTC状态位?

时间:2018-05-04 17:29:58

标签: capl canoe

我尝试从CAPL脚本中读取DTC。我正在使用“(0x19)ReadDtcInformation - 通过DTC号报告DTC快照记录”协议服务。我的DTC号码是0x062003。我能够正确设置DTC号码。但是,我无法设置DTC状态位。

1. diagRequest FR_Diagnostic.FaultMemory_ReadEnvironmentData PWM_Status; // 0x19 0x94
2. diagSetParameter(PWM_Status,"DTC",0x062003);  // 0x06 0x20 0x03
3. diagSetParameter(PWM_Status,"DtcSnapshotRecordNumber",0xFF); 
4. DiagSendRequest(PWM_Status);

第3行没有将DtcSnapshotRecordNumber设置为0xFF。我在跟踪中看到此字段为0x00。

问题: 1.我在第3行使用正确的API吗?如何设置DtcSnapshotRecordNumber以读取所有状态位? (有8个状态位需要监视,因此应设置为0xFF)。

2 个答案:

答案 0 :(得分:0)

Normaly你调用服务0x19(诊断)然后调用Subfunction然后你提供一个位掩码,其中包含你正在搜索的信息。

因此,您需要的一切都在ISO 14229 Road车辆中定义。

关于DTC和OBD的大多数服务在所有OEM中都是相同的。每个OEM规范都有一个诊断规范补充说明,它描述了OEM特定的诊断服务等。

在CAPL中,通常有一种简单的方法来读出DTC。您不需要手动执行它,因为CDD文件提供了它。您可以在右侧的CAPL Brower的对象浏览器中看到它。

所以对于你的鸡蛋案例。检索与您的面具匹配的DTC数量:

子功能报告DTCByStatusMask 0x02

0x1902

作为搜索过滤器的掩码将构建如下:

位#hex状态描述 0 0x01 testFailed DTC在请求时失败 1 0x02 testFailedThisOperationCycle DTC在当前操作周期中失败 2 0x04 pendingDTC DTC在当前或上一个操作周期中失败 3 0x08 confirmDTC DTC在请求时确认 4 0x10 testNotCompletedSinceLastClear自从DTC测试未完成 最后的代码清楚 5 0x20 testFailedSinceLastClear自上次代码清除后,DTC测试至少失败一次 6 0x40 testNotCompletedThisOperationCycle DTC测试未完成此操作循环 7 0x80 warningIndicatorRequested Server请求warningIndicator处于活动状态

因此,如果您只是想要读出已确认(存储)的DTC,而不是您发送的:

0x190208

如果您获得肯定响应,则将以十六进制格式检索DTC。您需要一个HEX-> SAE转换器,它将检索到的DTC转换为常规的已知格式。无论如何,你可以通过诊断控制台进行测试。

答案 1 :(得分:0)

回答自己:

  1. 是的,我使用的是正确的API。
  2. 由于数据库(.cdd)文件中使用的数据类型错误,因此未正确设置。
  3. 我本可以将.cdd文件转换为模板并编辑模板并使用更新的.cdd文件,但我选择使用新模板副本进行处理。