在之前发布的文章中,我们介绍了CAN错误和错误处理的理论基础,而在本篇文章中,我们将在实践中生成和记录错误。测试过程中将使用到虹科的CANedge数据记录仪和PCAN-USB设备。
1. 在实践中生成和记录CAN错误
测试1:没有CAN总线错误
为了便于对照,我们设置了没有CAN总线错误的测试:一个 CANedge2 的"发送器"将数据发送到另一个 CANedge2 的"接收器",并且两者都能够记录CAN总线错误。
测试2:移除CAN总线终端电阻
在这个测试中,我们在日志会话过程中移除了 CAN 终端电阻。这可以有效地将位电平设置为显性。同时,CANedge2发送器立即开始记录位错误(当它尝试发送隐性位但读取显性位时会发生这种情况)。CANedge2 接收器在检测到 6 个连续显性位时记录位填充错误。记录这些错误,直到再次添加终止。
在记录来自车辆、机器等的数据时,缺少终端电阻似乎并没有影响,但是,在使用"测试台"设置时,这个问题非常常见,并可能导致混淆,因为它难以与非活动CAN总线区分开来。因此,在CANedge数据记录仪上启用错误帧记录帧对于故障排除而言是十分有效的。
发送器位错误
接收器位填充错误
测试3:设置错误的波特率
在这个测试中,我们将CANedge接收器节点配置为具有492.872K波特率,而发送器的波特率为500K,这是一个相当大的差异,并导致发送器的ACK错误和接收器的位填充错误。在更现实的场景中,各个节点的波特率配置的较小差异可能会导致间歇性错误帧,从而导致消息丢失。
这个例子比较极端,然而,在实践中,我们有时会看到使用标准比特率(250K、500K、……)的CAN总线,但其特定的位时序设置与通常推荐的设置不同。这不会导致通信完全关闭,但会导致几个百分比的周期性帧丢失。为了解决这个问题,可以在CANedge配置中构建一个"预定义比特率",本质上是设置位时序以更好地匹配正在记录的CAN总线。
发送器ACK错误
接收器位填充错误
测试4:移除应答CAN节点
在本次测试中,我们使用了三个配置如下的 CANedge 单元:
CANedge1:配置为应答数据
CANedge2 A:配置为"静默模式"(无确认)
CANedge2 B:配置为每 500 ms 传输一个 CAN 帧
在默认设置中,数据由 CANedge2 B 传输到 CAN 总线上并无错误记录。但是,如果我们从总线上移除 CANedge1,则不再有任何 CAN 节点来确认发送器发送的帧。结果,发送器检测到ACK 错误。作为响应,它增加其发送错误计数器并在 CAN 总线上产生活动错误标志。这些又由 CANedge2 A(它静默监控总线)记录为格式错误。
CANedge之所以会记录格式错误,是因为发送器在识别出ACK时隙中缺少显性位时将其提高,一旦接收器在随后的EOF字段中观察到显性位(本该是隐性的),就会检测到格式错误。
很明显,当TEC从0增加到16x8=128时,发送器会广播16个主动错误标志。发送器现在已超过TEC的阈值127并进入被动错误模式。因此,发送器仍然会遇到ACK错误,但现在只会引发被动错误标志(接收器不可见)。在这一点上,发送器不断尝试发送相同的帧,并且接收器不断记录这个重传序列。
这种类型的错误是我们在技术支持中经常遇到的错误。具体来说,用户会尝试使用我们的CAN记录器来记录来自单个CAN节点的数据(例如从CANmod传感器到CAN模块),如果他们决定在这样的安装中启用CANedge上的"静默模式",则没有CAN节点将确认单个CAN节点广播数据,这样得到的结果大概率将是空日志文件,或充满相同CAN帧重传的日志文件。
发送器ACK错误
接收器格式错误
测试5:CAN帧冲突(无重传)
设置CAN总线时,避免CAN ID重复是关键,否则可能会导致帧冲突,因为两个CAN节点可能都认为他们已经赢得了仲裁,并同时开始传输它们的帧。
为了模拟这一点,我们使用与测试4相同的设置。此外,我们连接了一个PCAN-USB设备作为辅助发送器。CANedge2发送器现在配置为每10ms输出一个CAN ID为1且有效负载为8个0xFF字节的CAN帧。此外,我们将CANedge2配置为禁用因错误中断的帧的重新传输。PCAN-USB每2ms输出一个相同的CAN帧,有效载荷的第一个字节更改为0xFE。PCAN设备已启用重传。
这种设置会迅速产生帧冲突,从而导致CANedge和PCAN发送器检测到位错误。作为对此的响应,两者都会引发一个活动错误标志,CANedge接收器将其检测为位填充错误。PCAN设备立即尝试重新传输并成功,而CANedge等待进一步传输,直到要发送下一个消息。
这种类型的错误当然不应该发生在例如汽车中,因为设计和测试过程将确保所有 CAN 节点通过全球唯一的 CAN 标识符进行通信。但是,如果您安装第 3 方设备(例如传感器到 CAN 模块)以将数据注入现有 CAN 总线,则很容易出现此问题。如果您不确保外部 CAN 节点的 CAN ID 的全局唯一性,您可能会导致帧冲突,从而导致 CAN 总线上的错误。如果您的外部 CAN 节点广播具有高优先级 CAN ID 的数据,这一点尤其重要,因为您可能会影响安全关键 CAN 节点。
PCAN发送器位错误
CANedge发送器位错误
CANedge接收器位填充错误
测试6:CAN帧冲突(包括重传)
在这个测试中,我们使用与之前相同的设置,但在CANedge2发送器上启用重传。在这种情况下,帧冲突会导致一系列后续帧冲突,因为CANedge2和PCAN-USB设备都试图重新传输其中断的消息。
由于产生的位错误,两者都会引发总共16个活动错误标志,它们被静默CANedge2接收器检测为位填充错误。然后两个发送器进入错误被动模式并停止产生主动错误标志,这意味着它们都不能破坏总线上的CAN帧。结果,其中一个发送器将成功传输完整的消息,从而结束重传,并使两个设备都能恢复传输。但是,这仅持续几秒钟,然后发生另一次碰撞。
冲突处理是一个很好的例子,说明CAN错误处理在"关闭"潜在有问题的序列和使CAN节点能够恢复通信方面很有效。如果发生帧冲突,很可能两个CAN节点都将设置为尝试重传,如果不是错误处理和限制,则将导致阻塞。
虹科CAN/LIN数据与错误记录器
虹科CANedge1让您可以轻松地将数据从2xCAN/LIN总线记录到8-32GB的SD卡中,并支持记录CAN/LIN错误。只需将其连接到汽车或卡车即可开始记录-并通过免费软件/API解码数据。此外,升级版CANedge2添加了WiFi功能,让您可以将数据自动传输到您自己的服务器,并通过无线方式更新设备。
2.CAN错误帧记录的示例
1. OEM原型车中的CAN总线诊断
汽车OEM可能需要在后期原型测试期间在现场记录CAN错误帧。通过部署CANedge,OEM工程团队将能够根据实际CAN信号(速度、RPM、温度)以及与原型系统中较低层CAN通信相关的问题进行故障排除。如果感兴趣的问题是间歇性的,例如每月只发生一次或两次,这一点尤其重要。在这种情况下,CAN总线接口不太适合,因为拥有成本效益高的设备以实现可扩展部署以更快地进行故障排除变得越来越重要。虹科车辆网络团队在车用CAN总线方面有着十分丰富的技术积累,欢迎通过hongchesys@hkaco.com联系虹科车辆网络团队。
2. 远程排除机器中的CAN错误
OEM或售后市场用户可能需要在他们的机器中捕获罕见的CAN错误事件。为此,他们部署了一个CANedge2来记录CAN数据和相关的错误帧,并通过WiFi自动将数据上传到他们自己的云服务器。在这里,错误会被自动识别,并向工程团队发送警报,以便立即诊断和解决问题。虹科工业控制团队在CAN总线等工业通讯协议方面有着十分丰富的技术积累,欢迎通过hongconsys@hkaco.com联系虹科工业控制团队。
虹科工业控制团队在工业通讯总线行业深耕十余年,为客户提供CAN卡、CAN数据记录仪、数据采集模块、CAN网关和转换器等硬件设备,以及PCAN-Explore 6等软件。