CAN总线是一种高可靠性的网络总线标准,主要用于汽车和工业环境的控制器通信。那不知道大家有没有遇见过这种工况:当做总线测试时,会断开某一控制器与总线的连接,之后再重连,导致原本应该以10ms为周期外发的报文,实际上总线上会再10ms内捕获到相同ID的报文两次或两次以上,此时就导致测试不通过。相信汽车行业的朋友大多都遇见过或者经历过,如果没有遇见,那就是平台已经规避这类问题了,但是啊,总归要实际遇见并处理才有意思。下面就此问题,咱就来将其展开,给大家分享这个经验。
目录
1、消息缓存与重发
当控制器断开连接时,可能会由缓存的消息在重连后立即发送,同事新的周期消息也在发送。
2、重连初始化
控制器在重连时可能会发送初始化消息,这些消息可能与周期性消息具有相同的ID。
3、网络同步问题
控制器在重连后可能需要时间重新同步到总线时钟,这可能导致消息发送时间上的重叠。
4、软件逻辑问题
控制器的软件逻辑可能没有正确处理重连事件,导致消息被重复发送
5、解决措施
解决方案 | 名称 | 描述 |
短期解决 | 延迟发送 | 在控制器重连后,可以设置一个短暂的延迟时间,然后再开始发送周期性消息。 |
清除缓存 | 确保在断开连接时,控制器的消息缓存被清除,以避免重连后发送旧消息。 | |
消息过滤 | 在接收端实现消息过滤机制,忽略在短时间内重复出现的相同ID消息。 | |
长期解决 | 优化重连逻辑 | 修改控制器的软件,使其在重连后不会立即发送周期性消息。在重连过程中加入状态检查,确保控制器完全准备好后再开始正常通信。 |
改进消息管理 | 实现消息列号或时间戳,使得每个消息都有唯一标识,接收端可以根据这些信息来识别和忽略重复消息。 | |
增强网络管理 | 使用网络管理协议来监控和控制节点的状态,确保节点在重连后能够正确地同步到网络状态。 |
6、测试与验证
对重连逻辑进行充分的测试,确保在各种情况下都不会出现重复消息。
使用模拟工具或测试脚本模拟断开和重连操作,验证解决方案的有效性。
7、结论
通过以上措施,可以确保在进行总线测试时,即使控制器断开重连,也不会导致此类测试不通过的情况发生。这个过程处理是很有趣的,感兴趣的可以自测一下。
标签:控制器,重连后,两包,总线,发送,消息,重连 From: https://blog.csdn.net/qq_40939768/article/details/144842773