测试前先识别同一条 CAN 报文流
先写清楚筛选条件
同时存在两条总线、多个方向或不同帧格式时,“检查 ID 0x200”并没有定义完整的检查对象。测周期或判断响应成功之前,先明确统计哪些事件。本页使用一个受控的经典 CAN 示例:CAN1、标准标识符 0x200、接收方向的数据帧、一段连续记录。载荷约定为恰好两个字节,byte 0 是标记 0xAA,byte 1 是每发送一次就递增的计数器,取值从 0 到 15,再回到 0。这是为分析构造的协议,不是车辆信号定义,也不是 CANoe 实测结果。
| 筛选维度 | 为什么需要它 | 省略后的反例 |
|---|---|---|
| 采集位置与 CAN 通道 | 确定在哪里观察 | 将 CAN2 的同 ID 报文当成 CAN1 的第二个发送者 |
| ID 数值与标准/扩展格式 | 数值不能完整表示帧的身份 | 合并标准 0x200 与扩展 0x200 |
| 该观察位置记录的方向 | 区分问题涉及的事件 | 把发送请求与接收事件计成两次到达 |
| 数据/远程帧及经典 CAN/FD 格式 | 确定载荷解释是否适用 | 把不适用的帧纳入经典 CAN 数据帧检查 |
| 记录分段 | 确定哪些时间戳及计数器历史可以比较 | 把重启误判成丢帧或时间倒退 |
CAPL 的 isStdId、isExtId 可以接收消息对象或标识符;授权参考资料规定,符合相应格式时返回 1。源代码声明扩展标识符时使用 x 后缀。导出 ID 列时若抹掉帧格式,只保留数字,不能再假设它能唯一识别报文流。
本页要求先配置并核实经典 CAN 测试流。在含 FD 流量的总线上,应查阅当前工具版本支持的帧格式筛选与长度访问方法,再调整例子。不能因为载荷很短就认定它是经典帧,也不能把经典 CAN 中按 DLC 判断字节数的用法当成通用 FD 规则。本页不编造跨版本通用的 FD 选择器。
对于实际载荷长度,授权参考资料给出了 long canGetDataLength(message msg),返回 0 到 64 个有效载荷字节。使用前应核实当前版本是否支持。长度结果回答的是有多少个有效字节,不能代替“哪些帧格式属于目标流”的判断。
报文筛选和载荷验收分开记录
先按通道、格式、ID、方向和帧类型选择目标数据帧,保留其中长度错误、标记错误的帧,再逐个检查载荷。如果直接删掉不合格载荷,真实到达的目标帧会从数据集中消失,看起来像少发或漏收了一帧。
每条原始记录都应保留时间戳、筛选结果和排除原因。报文收发教程展示了先检查方向和 RTR,再读取字节的顺序。只有采用本页示例协议时,才应把长度条件收紧为恰好两个字节;实际 ECU 定义可能不同。CAN 帧合法,不等于应用消息符合要求。
用计数器检验假设,不直接宣布根因
下表是完成报文流筛选和载荷检查后的人造数据:
| 时间戳(ms) | 计数器 | 观察结论 |
|---|---|---|
| 0 | 14 | 建立基线 |
| 100 | 15 | 符合预期的下一值 |
| 200 | 0 | 符合预期的回绕,单凭此处不能说发生重启 |
| 400 | 2 | 没有观察到中间一个计数值 |
| 400 | 2 | 相同时间戳与计数值,需要继续核查 |
在这份特定协议下,可计算 d =(当前值 − 前值 + 16)对 16 取模。d 为 1 是预期递增,为 0 表示计数值重复,为 2 提示中间一个值没有被观察到。这个解释要求记录有序、期间没有重置,且相邻观测之间递增次数少于 16。如果已经走完一个完整计数周期,相同公式就有歧义。若实际协议只在数据改变时递增,必须另定判断规则。
200 到 400 ms 的长间隔与 0 到 2 的计数变化,都符合“可能少了一次观测”的假设。但它们不能证明发送者确实发过计数值 1,不能证明物理总线丢帧,也无法定位遗漏发生在哪一层。最后一行可能是导出时重复的行、应用重复发送的值,也可能是显示精度舍入后时间相同的另一帧。在原始证据区分这些解释之前,不要先删掉它。
找到证据最先不一致的位置
依次比较发送端预期序列、原始采集记录、CAPL 观察输出和导出文件。匹配时同时核对帧身份与计数器,不能只比较显示出来的时间字符串。如果原始记录含计数值 1,而 CSV 没有,先查导出筛选条件。如果原始记录也没有,应结合另一个配置正确的观察点与发送端状态继续检查;单列 CSV 无法判定物理原因。
| 单独进行的检查 | 预期分类 | 应保留的依据 |
|---|---|---|
| 一帧匹配的两字节数据 | 属于目标流,载荷通过 | 原始行及两个字节 |
| CAN2 的同数值 ID,或扩展格式同数值 ID | 不属于本页目标流 | 排除原因 |
| 匹配的数据帧只有一个字节 | 属于目标流,载荷不通过 | 长度不符,不能记作“没有帧” |
| 计数值 15 后接 0 | 在本页协议下正常回绕 | 连续记录分段及两条原始行 |
| 计数器归零前发生重启 | 新建比较分段 | 重启依据与新基线 |
| 同一帧被导出两次 | 核对是否为重复行 | 去重前的原始采集行 |
确认报文流之后,再按时间戳教程导出到报文间隔分析工具。计算器看不到 ID、计数器和载荷,不能代替上述分类。如果要判断命令执行成功,还需按测试模块教程加入应用响应和有界等待;匹配报文到达只是一部分证据。
资料依据与验证边界
API 细节核对了授权的 Vector on message、消息声明、DIR、RTR、isStdId/isExtId、canGetDataLength 参考资料。筛选约定、人造数据及检查矩阵是本站独立分析,没有声明经过编译、硬件采集或 CANoe 运行。复现时请记录工具版本、节点位置、通道映射和实际协议定义。更多边界见关于本站。