linux - 使用 SocketCAN 发送一次性消息

标签 linux can-bus socketcan

是否可以使用 SocketCAN 发送“一次性”CAN 消息?这基本上是一条不期望接收方返回确认的消息。协议(protocol)允许不设置此 ACK 位。

最佳答案

我不确定你所说的“一次性”是什么意思,但我一直使用 can-utils 中的 cansend 实用程序发送单个 CAN 帧。 ,像这样:

$ cansend can0 135#02080426A10D112A

我还编写了使用 AF_CAN 套接字执行相同操作的 C 程序。 (你基本上可以从 cansend.c 中抄袭来弄清楚如何做。)

关于消息的重传,cansend 不会发生这种情况:

$ timeout 20s tcpdump -i can0 -w out.pcap &                                                                                                                                               
[1] 16509
tcpdump: listening on can0, link-type CAN_SOCKETCAN (CAN-bus with SocketCAN headers), capture size 262144 bytes

$ cansend can0 135#02080426A10D112A

$ 1 packet captured
0 packets received by filter
0 packets dropped by kernel

[1]  + 16509 exit 124   timeout 20s tcpdump -i can0 -w out.pcap

在上面的序列中,没有消费者在线,所以没有人确认消息,但我仍然只在 can0 上捕获一个数据包。似乎可以肯定地得出结论,在 cansend 退出后,SocketCAN 堆栈不会“自动”尝试在后台重新发送消息。

关于linux - 使用 SocketCAN 发送一次性消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46310248/

相关文章:

python - CAN模块python 3

c - 通过 CAN 总线(CANopen?)广播文件传输

c - 通过 socketCAN 发送 EFF 29 位 ID 消息的问题

python - 实时获取 shell 输出并将所有输出存储在变量中

linux - Bash 脚本 : Restore specific text in a file after some file editing

python - 如何通过 xl-driver 库实现 UDS 协议(protocol)来发送诊断?

linux - 使用 SocketCAN 编写自定义 CAN 协议(protocol)

linux - Linux 中的 ARP 创建失败条目

c - 使用 C 在 Linux COM 上进行 XBee 串行通信