Linux CAN总线传输超时

问题描述 投票:1回答:2

场景

[有一个Linux供电的设备连接到CAN总线。设备会定期发送CAN消息。该消息携带的数据的性质就像测量而不是命令,即实际上只有最新消息才有效,并且如果丢失了某些消息,只要成功接收到最新消息就不会成为问题。

然后,所讨论的设备与CAN总线断开连接的时间长于后续消息传输之间的时间间隔。设备逻辑仍在尝试发送消息,但是由于总线已断开,因此CAN控制器无法发送任何消息,因此消息被累积在TX队列中。

一段时间后,CAN总线连接恢复,所有累积的消息都被逐一踢到总线上。


问题

  1. 当恢复CAN总线连接时,将从TX队列中发送未定义数量的过时消息。
  2. 虽然CAN总线连接仍然不可用,但TX队列已满,但是将丢弃某些最新消息(即唯一有效的消息)的传输。
  3. 一旦恢复CAN总线连接,将在刷新TX队列时出现短期流量突发。如果使用的话,这可以更改时间触发的总线调度(在我的情况下)。

  4. 问题

我的应用程序使用SocketCAN驱动程序,所以基本上该问题应该应用于SocketCAN,但是如果有其他选择,也要考虑其他选项。

我看到了两种可能的解决方案:定义消息传输超时(如果消息未在预定的时间内传输,如果时间到了,它将被自动丢弃),或者手动中止过时的消息传输(尽管我怀疑是否有可能这样做)使用套接字API)。

由于第一种选择对我来说似乎是最真实的,所以问题是:

  1. 如何定义Linux下CAN接口的TX超时?
  2. 除了发送超时以外,是否还有其他选项可以解决上述问题?

方案有一台Linux供电的设备连接到CAN总线。设备会定期发送CAN消息。该消息携带的数据的性质类似于度量,而不是...

linux sockets can-bus safety-critical
2个回答
0
投票

Linux-can邮件列表提供了一些好的答案:http://thread.gmane.org/gmane.linux.can/4167


0
投票

我不知道SocketCAN的内部原理,但我认为应该在更一般的逻辑层次上解决问题的大部分。

© www.soinside.com 2019 - 2024. All rights reserved.