记录 DTC 以供日后分析

Logging DTCs for later analysis

我是 CAPL 的新手,正在尝试使用 CAPL 脚本定期读取 DTC,并将它们记录到 .blf 文件中,以便稍后进行分析。

经过一些研究,我决定将所有读取和识别的 DTC 存储到系统变量(我将其定义为整数数组 dtcArr,固定大小为 500)作为输出读取 DTC 的一种方式,因为系统变量是日志记录开始时也会记录,稍后可以从日志中显示。简单地使用 write 命令将其输出到文件并没有太大帮助,因为如果我做对了,以后在 CANalyzer/CANoe 中分析时不会显示它。基本上我用所有读取的 DTC 值填充 dtcArr,以便我读取它们。

似乎无法为系统变量使用关联数组(例如,使用 DTC 名称文本作为键),是否有更好的方法来做到这一点?

很容易实现。在输出循环中需要一个脚本,它向目标模块发出 DTC 读取请求。它还必须处理任何需要发送的延续帧:

variables
{
  msTimer         can1_ms_timer;
  long            ms_interval = 1000; /* Request rate */
  message CAN1.*  can1_dtc_req_frame = {id=???, dir=tx, byte(0)=0x??, byte(1)=0x??, byte(2)=0x??, etc.};
}

on key ctrlF1
{
  write("Starting Read DTC Information from module ???");
  setTimer(can1_ms_timer, ms_interval);
}

on timer can1_ms_timer
{
  output(can1_dtc_req_frame);
  setTimer(can1_ms_timer, ms_interval);
}

on message CAN1.ResponseModule???
{
  /* Handle sending continuation frame */

  output(this);
}

现在模块响应将存储在日志文件中,您可以选择任何方式处理它们。对于我的设置,我有第二个 CAPL 脚本,它将故障代码转换为我自己的自定义 CAN 信号,因此我可以在图形视图中绘制它们的状态值。

on message CAN1.ResponseModule???
{
  /* Process trouble code response */
}