我尝试从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)。
答案 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)
回答自己:
我本可以将.cdd文件转换为模板并编辑模板并使用更新的.cdd文件,但我选择使用新模板副本进行处理。