使用Python玩转CAN通讯

上一篇文章中介绍了如何使用NXP生产的S32K118单片机实现CAN通讯。本文将在这个基础上使用Python实现对上文所述开发板的控制

1. 所用软件插件介绍

Python可以通过集成“Python-CAN”插件实现常见USB转CAN设备的驱动。如:Kvaser,SLCAN,PCAN, Vector等。本文使用的USB转CAN工具是在某宝上淘的SLCAN接口硬件。本文将以此展开介绍。

为了使用Python-CAN插件,首先需要通过如下命令安装:

pip install python-can

2. Python—can基本收发语法

2.1 定义总线接口

Python-can总线接口类型通过如下语句定义。

总线名=can.interface.bus(channel=端口号, bustype=接口类型,bitrate=波特率)

其中:
端口号:为计算机上使用的USB端口号。可以通过“计算机管理”窗口中查找到:
端口号从上图中可以看到此处使用的USB端口为COM6.

接口类型:指的是使用何种USB转CAN口设备。Python-CAN中接口类型与对应硬件关系如下:
接口类型 由于此处我们使用的是SLCAN所以接口类型就用slcan。

波特率:为以每秒传输位为单位的CAN速率设置。此处选用500Kbps,对应500000。

2.2 定义发送报文

Python上发送的报文采用如下格式定义:

报文名=can.Message(arbitration_id=帧ID,data=发送数据,is_extended_id=False/True)

其中is_extended_id表示是否使用了大于11位的扩展帧ID。本文中的ID都没有超过11位,因此选择False。

2.3 收发报文

Python-CAN收发报文十分简单。

  • 发送报文用:send
总线名.send(报文名)
  • 接收报文用:recv
总线名.recv()

3. 实例

3.1 CAN协议:

500Kbps 通信速率。
开发板接到 ID=2的帧开灯。 接到ID=4的帧关灯。
开发板上按下按键后向Python发送ID=1的内容为:0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8的帧。

3.2 程序

import can

#定义总线
cantype='slcan'
ComNo='COM6'
bus=can.interface.Bus(channel=ComNo,bustype=cantype,bitrate=500000)

CANOrder=0
CANOrder=input("请输入指令,1:开灯,2:关灯,3 接收报文,0:退出")
while (CANOrder != "0"):
    if (CANOrder == "1"):
        TurnOnMsg=can.Message(arbitration_id=0x2,data=[0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0],is_extended_id=False)
        bus.send(TurnOnMsg)
        print(TurnOnMsg)
        CANOrder = input("请输入指令,1:开灯,2:关灯,3 接收报文,0:退出")
    if (CANOrder =="2"):
        TurnOffMsg=can.Message(arbitration_id=0x4,data=[0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0],is_extended_id=False)
        bus.send(TurnOffMsg)
        print(TurnOffMsg)
        CANOrder = input("请输入指令,1:开灯,2:关灯,3 接收报文,0:退出")
    if (CANOrder == "3"):
        while True:
            print( (bus.recv()))

3. 执行结果

运行结果# 后记
本文于2024.1.27日首发于“车灯电子扫地僧”。 如果你喜欢我的文章,也可以“车灯电子扫地僧”搜索微信订阅号。更多文章等待您的发掘

  • 22
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值