【问题标题】:what is an appropriate way to detect errors in CAN-Bus?什么是检测 CAN 总线错误的合适方法?
【发布时间】:2019-02-13 05:53:23
【问题描述】:

我正在与使用 CAN 总线协议 (J1939) 发送数据的电池通信。我使用 PIC 18F26K83。我的目标是在显示屏上显示剩余的充电状态。例如,我在 60 个数组中有值 %99,在其中 40 个数组中有 %1,然后我将显示 %99)。但是,它看起来不像是一个可靠的解决方案,因为我不知道我收到了多少垃圾数据。请注意,我不能使用一些错误检测算法,例如校验和,因为我无法访问面糊中的微控制器,我只能使用接收端(显示器)。 编辑:我知道 CAN 总线中的 CRC,但有时它似乎不起作用,因为有时我会得到垃圾。

【问题讨论】:

  • " 对于 99 60 个数组中的 %1 和 40 个数组中的 %1,我将显示 99)" 嗯?我不明白你在做什么。
  • 我不知道您如何以编程方式执行此操作,也不知道您究竟想以编程方式执行什么操作,但通过使用 CANalyzer(无意推广)工具,您可以分析任何内容你正在上你的 CAN 总线。
  • @Lundin 例如,我以 100 的数组大小收集接收到的数据。假设我在 400 毫秒内收到数据 99,这使得数组 99 的前 40 个元素成为数组 [1],....array[40] =99,并且在 600 毫秒内我收到的所有数据都是 1:数组 [41 ],....数组[100] =1。在这种情况下,我会认为数据是 1,我会显示它。
  • @JoeyMallone 显然你应该使用 CANanalyser 而不是 CANalyser :) 这些工具的名称如此富有想象力。除非您为 Ixxat 或 Vector 工作,否则只需调用他们的 CAN 侦听器 :)
  • @Lundin,我不知道。 :),除了我对其他非Vector CAN 分析器的了解有限。

标签: c algorithm embedded pic can-bus


【解决方案1】:

是的,您可以使用 CRC 计算,因为 CRC 也是由通信控制器在接收端计算的。例如,这就是检测 CRC 错误的方式。详细说明:

电池发送完成消息;消息在物理层受到干扰;接收器(您的 PIC)接收消息并计算其上的 CRC; 与消息中包含的 CRC 标签不匹配; PIC CC 将有一个 REC 错误 +1,并且不会向电池确认消息。

您将在接收方检测到所有类型的 CAN 消息错误,除了 bit Error,它也无关紧要,因为它会导致消息不完整。

基本上,如果消息已损坏(垃圾),您不应依赖收到的 CAN 消息内容来推断电池电量。它在到达 PIC 的应用层之前被简单地丢弃。

【讨论】:

  • 据我了解,CAN 协议本身会执行此错误检测。当我收到一条消息时,它已经成功通过了 CRC 计算,对吗?
  • 正确,CAN协议内置了错误检测和错误处理机制。如果您在 Application 中读取消息负载,则意味着它通过了较低层没有问题。
  • 所以我没有收到垃圾,它们是实际数据。是发送器发送了错误的数据。这意味着电池有时会发送错误的数据。
  • 是的。也许它是另一个消息 ID。或者它是一个多路复用的 PDU,你只有一种解释。或者只是电池发送一个循环消息,是否有信息可以填充。
猜你喜欢
  • 2019-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 2018-12-29
  • 2019-11-07
  • 1970-01-01
相关资源
最近更新 更多