python - 如何接收使用 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)
解决方案
默认情况下,CAN 套接字不接收它们自己发送的帧。无论如何,这没什么意义。有两种情况是有意义的:
您拥有的代码,但是总线上连接的另一个设备/进程将对您发送的消息做出反应
dev.recv()
,因此接收该反应。有两个进程,一个在做
dev.send()
,另一个在做dev.recv()
。后者应该首先开始,因此它在发送帧时已经在监听(进程确实会看到从它们运行的同一设备发送的帧,而不是它们自己发送的那些)。
推荐阅读
- android - 从 Android 中的 Gmail(或其他本机应用程序)WebView 浏览器返回本机应用程序
- c# - SignalR 不是异步的?
- r - 找不到函数“read_shape”
- javascript - React DnD:动态接受类型:删除类型时,将目标限制为该类型
- json - 不知道为什么我收到“属性 VPCSecurityGroups 的值必须是字符串列表类型”的错误
- r-exams - Sweave 文件的 R 环境中的警告消息
- reactjs - 使用存储作为跨兄弟姐妹、孩子等的单一数据源的正确方法
- clickhouse - clickhouse:如何避免 DB::Exception:除以零
- sql - 如何检查 SQL 自定义函数返回的结果中是否存在 id(返回 SETOF 表)
- ios - 如何将 Codable 编码与对象内的对象一起使用