发送和接收CAN消息的简单消费者生产者示例不接收消息
Simple consumer producer example for sending and receiving CAN messages does not receive messages
我只是想使用 linux 下的虚拟 can 设备 vcan0 和 python-can 模块来熟悉 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()
安装虚拟 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。
我只是想使用 linux 下的虚拟 can 设备 vcan0 和 python-can 模块来熟悉 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()
安装虚拟 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。