基于python-can实现的can收发案例(纯手工)

基于python-can实现的can收发案例(纯手工)



注意下面
如果有车载讨论需要的小伙伴,可以私信加我微信,拉你进群,和同行业大佬交流
注意上面

前言

车载相关的大佬可以作为参考,有疑问可以留言交流


一、python-can是什么?

目前发现的是Python-can是一个支持多种can总线工具can总线程序库,目前已知可以正常调用的包含
kvaser、PCAN、英特佩斯等相关can设备

二、具体代码实现参考

import can
from typing import Optional

class CanTool():
    def __init__(self,device: Optional[str], channel: Optional[str], bitrate: Optional[int]):
        """
        初始化类时即创建总线对象
        param1:设备名
        param2:通道名
        param3:波特率
        """
        self.__bus = can.interface.Bus(bustype=device, channel=channel, bitrate=bitrate)#是否在初始化时创建对象基于项目而定
        logger = can.Logger("logfile.asc")  #创建一个log文件
        listeners = [
            self.put_mq,  #回调函数
            logger,  # 保存报文的对象
        ]
        self.notifier = can.Notifier(self.__bus, listeners) #设置一个监听

    def __put_mq(self,msg):
        """
        功能:通过队列实现数据的写入和读取
        :param msg: 回调返回的对象
        """
        if not self.mq.full():
            self.mq.put_nowait(msg)


    def send_data(self,id: Optional[int],listdata: Optional[list[int]]):
        msg = can.Message(arbitration_id=id,#此处传入整形
                          is_extended_id=False, #此处参数判断是否是扩展帧
                          data=listdata #此处参数传入一个纯整形的列表
                          )
        self.__bus.send(msg)

    def set_filters(self,id: Optional[int]):
        """
        功能:设置一个筛选器
        para1:报文id
        """
        if filter_id < 2147483648:#判断是否为标准帧
            self.__bus.set_filters([{"can_id": filter_id, "can_mask": 0x7FF, "extended": False}])
        else:
            self.__bus.set_filters([{"can_id": filter_id, "can_mask": 0x1FFFFFFF, "extended": True}])



    def can_recv(self,filter_id: Optional[int]):
        """
        循环检测接收到的报文中是否有需要的id
        para1:报文id
        """
        while True:
            if not self.mq.empty():
                frame = self.mq.get_nowait()
                if filter_id == frame.arbitration_id:
                    print(frame.data)
                    break
            time.sleep(0.1)



写在结尾

我是一名车载集成测试开发工程师,希望能和志同道合的朋友一起相互学习进步

  • 8
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值