首页 > 其他分享 >CAN总线断开重连后为什么会连续发出两包数据?如何处理?

CAN总线断开重连后为什么会连续发出两包数据?如何处理?

时间:2024-12-31 10:25:37浏览次数:3  
标签:控制器 重连后 两包 总线 发送 消息 重连

        CAN总线是一种高可靠性的网络总线标准,主要用于汽车和工业环境的控制器通信。那不知道大家有没有遇见过这种工况:当做总线测试时,会断开某一控制器与总线的连接,之后再重连,导致原本应该以10ms为周期外发的报文,实际上总线上会再10ms内捕获到相同ID的报文两次或两次以上,此时就导致测试不通过。相信汽车行业的朋友大多都遇见过或者经历过,如果没有遇见,那就是平台已经规避这类问题了,但是啊,总归要实际遇见并处理才有意思。下面就此问题,咱就来将其展开,给大家分享这个经验。

目录

1、消息缓存与重发

2、重连初始化

3、网络同步问题

4、软件逻辑问题

5、解决措施

6、测试与验证

7、结论


1、消息缓存与重发

        当控制器断开连接时,可能会由缓存的消息在重连后立即发送,同事新的周期消息也在发送。

2、重连初始化

        控制器在重连时可能会发送初始化消息,这些消息可能与周期性消息具有相同的ID。

3、网络同步问题

        控制器在重连后可能需要时间重新同步到总线时钟,这可能导致消息发送时间上的重叠。

4、软件逻辑问题

        控制器的软件逻辑可能没有正确处理重连事件,导致消息被重复发送

5、解决措施

解决方案名称描述
短期解决延迟发送

在控制器重连后,可以设置一个短暂的延迟时间,然后再开始发送周期性消息。

清除缓存确保在断开连接时,控制器的消息缓存被清除,以避免重连后发送旧消息。
消息过滤

在接收端实现消息过滤机制,忽略在短时间内重复出现的相同ID消息。

长期解决优化重连逻辑

修改控制器的软件,使其在重连后不会立即发送周期性消息。在重连过程中加入状态检查,确保控制器完全准备好后再开始正常通信。

改进消息管理

实现消息列号或时间戳,使得每个消息都有唯一标识,接收端可以根据这些信息来识别和忽略重复消息。

增强网络管理

使用网络管理协议来监控和控制节点的状态,确保节点在重连后能够正确地同步到网络状态。

6、测试与验证

        对重连逻辑进行充分的测试,确保在各种情况下都不会出现重复消息。

        使用模拟工具或测试脚本模拟断开和重连操作,验证解决方案的有效性。

7、结论

        通过以上措施,可以确保在进行总线测试时,即使控制器断开重连,也不会导致此类测试不通过的情况发生。这个过程处理是很有趣的,感兴趣的可以自测一下。

标签:控制器,重连后,两包,总线,发送,消息,重连
From: https://blog.csdn.net/qq_40939768/article/details/144842773

相关文章

  • 为什么CAN总线终端电阻如此重要?
    在深入探讨CAN总线技术时,我们不得不关注一个看似微小却极为关键的部分 — 终端电阻。本文将简要阐释终端电阻对于CAN总线性能的重要性,以及它如何成为确保通信稳定和信号清晰不可或缺的因素。CAN总线终端电阻,顾名思义就是加在总线末端的电阻,它在CAN总线系统中扮演......
  • PCIe扫盲——PCIe总线物理层入门
    前面的文章简单的介绍了一些关于PCIe总线事务层(TransactionLayer)和数据链路层(DataLinkLayer)的一些基本概念。这篇文章来继续聊一聊PCIe总线的最底层——物理层(PhysicalLayer)。在PCIeSpec中,物理层是被分为两个部分单独介绍的,分别是物理层逻辑子层和物理层电气子层,其中后者一般......
  • PCIe扫盲——PCIe总线数据链路层入门
    前面的文章介绍过,数据链路层(DataLinkLayer)主要进行链路管理(LinkManagement)、TLP错误检测,FlowControl和Link功耗管理。数据链路层不仅可以转发来自事务层的包(TLP),还可以直接向另一个相邻设备的数据链路层直接发送DLLP,比如应用于FlowControl和Ack/Nak的DLLP。如下图所示:数据......
  • PCIe扫盲——PCIe总线事务层入门(二)
    前面的文章介绍了TLP的几种类型以及TLP的包结构。这篇文章来详细地聊一聊Non-PostedTransaction(包括OrdinaryRead、LockedRead和IO/ConfigurationWrites)与PostedWrites(包括MemoryWrites和MessageWrites)。TLP是由硬件产生的,不与上层软件有关系Non-PostedTransactionO......
  • PCIe扫盲——PCIe总线事务层入门(一)
    在介绍事务层之前,首先简单地了解一下PCIe总线的通信机制。假设某个设备要对另一个设备进行读取数据的操作,首先这个设备(称之为Requester)需要向另一个设备发送一个Request,然后另一个设备(称之为Completer)通过CompletionPacket返回数据或者错误信息。在PCIeSpec中,规定了四种类型的......
  • 小程序的全局事件总线太好用啦
    1.安装全局事件总线,找到main.jsVue.prototype.$eventBus=newVue()2.绑定事件mounted(){  this.$eventBus.$on('GetShareActivitys',this.GetShareActivitys);},beforeDestroy(){   this.$eventBus.$on('GetShareActivitys',this.GetShareActivitys)......
  • 为何总线“镰刀”波形频频发生?
    无论是CAN总线还是485总线,实际应用中经常会出现各种异常,常因总线组网后,波形边沿出现过缓、呈“镰刀”状的现象,导致数据丢失或出错,那么这现象前因后果大家是否真正的了解呢? 案例一1.CAN总线异常现象我司某工业机器人客户反馈,使用SM1500的机器人控制板卡,在传输数据过......
  • PCIe扫盲——PCIe总线体系结构入门
    和很多的串行传输协议一样,一个完整的PCIe体系结构包括应用层、事务层(TransactionLayer)、数据链路层(DataLinkLayer)和物理层(PhysicalLayer)。其中,应用层并不是PCIeSpec所规定的内容,完全由用户根据自己的需求进行设计,另外三层都是PCIeSpec明确规范的,并要求设计者严格遵循的。......
  • PCIe扫盲——PCIe总线基本概念
    PCIe总线的提出可以算是代表着传统并行总线向高速串行总线发展的时代的到来。实际上,不仅是PCI总线到PCIe总线,高速串行总线取代传统并行总线是一个大的趋势。如ATA到SATA,SCSI到USB等……不过,为了兼容之前的PCI总线设备,虽然PCIe是一种串行总线,无法再物理层上兼容PCI总线,但是在软件......
  • PCIe扫盲——PCIe总线怎样做到在软件上兼容PCI总线
    前面的文章中多次说道,PCIe总线在软件上是向前兼容PCI总线的。因此,PCIe总线完整的继承了PCI总线中的配置空间(ConfigurationHeader)的概念。在PCIe总线中也有两种Header,Header0和Header1,分别代表非桥和桥设备,这与PCI总线是完全一致的。在PCIe总线中,非桥设备也就是Endpoint。如下图所......