【问题标题】:Simple consumer producer example for sending and receiving CAN messages does not receive messages发送和接收 CAN 消息的简单消费者生产者示例不接收消息
【发布时间】:2020-09-16 18:46:28
【问题描述】:

我只是尝试使用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

【问题讨论】:

    标签: linux multithreading python-multithreading can-bus python-can


    【解决方案1】:

    默认情况下,由 SocketCAN 总线发送的 CAN 帧不会被该总线接收。要完成这项工作,请在创建总线时将receive_own_messages 参数设置为True。见https://python-can.readthedocs.io/en/master/interfaces/socketcan.html#can.interfaces.socketcan.SocketcanBus

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多