首页 > 解决方案 > 如何接收使用 CANard 库的 python 发送的 CAN 帧?

问题描述

我正在使用 CANtact 工具包发送和接收 can 帧我使用了以下代码,该代码由 CANtact 工具包的创始人 Eric Evenchick 编写。所有代码行都在没有任何错误的情况下执行,但是当我frame=dev.recv()将光标移动到下一行并且没有显示任何结果时,我在哪里可以找到结果或者我犯了任何错误?我附上了我的终端的截图。

from canard import can
from canard.hw import socketcan
dev = socketcan.SocketCanDev("slcan0") #slcan0 refers to the CANtact kit i have connected
dev.start()
frame = can.Frame(id=0x100)
frame.dlc = 8
frame.data = [1,2,3,4,5,6,7,8]
dev.send(frame)
frame = dev.recv()
print(frame)

python3中执行的程序截图 使用两个设备

标签: python

解决方案


默认情况下,CAN 套接字不接收它们自己发送的帧。无论如何,这没什么意义。有两种情况是有意义的:

  • 您拥有的代码,但是总线上连接的另一个设备/进程将对您发送的消息做出反应dev.recv(),因此接收该反应。

  • 有两个进程,一个在做dev.send(),另一个在做dev.recv()。后者应该首先开始,因此它在发送帧时已经在监听(进程确实会看到从它们运行的​​同一设备发送的帧,而不是它们自己发送的那些)。


推荐阅读