linux - 发送和接收 CAN 消息的简单消费者生产者示例不接收消息
问题描述
我只是想在linux下使用虚拟can设备vcan0和python-can模块来熟悉CAN总线上的编程和调试。
我设计了一个看起来很简单的程序,它有两个线程,一个线程应该产生罐头消息,另一个线程应该消费。不幸的是,消费者线程没有消费一条消息,我对这个原因有点困惑。
import can
import time
import threading
bus=can.interface.Bus(bustype='socketcan', channel='vcan0')
def producer():
for i in range(10):
msgProduced=can.Message(0., 20, data=[0,1,2,3])
bus.send(msgProduced)
def consumer():
for i in range(10):
msgRecv=bus.recv(timeout=0.1)
print(msgRecv)
producerThread=threading.Thread(target=producer)
consumerThread=threading.Thread(target=consumer)
producerThread.start()
consumerThread.start()
producerThread.join()
consumerThread.join()
bus.shutdown()
安装 virtual can 设备驱动程序后,设置 vcan0 接口很容易:
sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0
解决方案
默认情况下,由 SocketCAN 总线发送的 CAN 帧不会被该总线接收。要使其工作,请在创建总线时将receive_own_messages
参数设置为。True
请参阅https://python-can.readthedocs.io/en/master/interfaces/socketcan.html#can.interfaces.socketcan.SocketcanBus。
推荐阅读
- node.js - 防止通过ip地址访问
- r - 我无法添加此字体,我不明白是什么导致了我遇到的问题
- powershell - powershell 使用正则表达式过滤文件名
- javascript - 使用 React 和 Typescript 创建可重用的按钮组件,但出现不可分配的类型错误
- typescript - 如何在 Typescript 中测试泛型类型?不是泛型类型的实现,而是作为类型保护?
- reactjs - 为什么 react-native Animated View 不渲染?
- android - 在 Android Studio 中将音频字节 [] 数组编码为 Mp3
- typescript - 打字稿:另一个参数的键?
- vb.net - 使用 ForeignKeyConstraint 根据父数据表过滤子数据表
- c# - 如何将 json 解析为 C# 对象(类)?