Я просто пытался использовать виртуальное устройство can vcan0 под linux и модуль 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()
Настройка интерфейса vcan0 выполняется легко после установки драйверов виртуального устройства can:
sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0