赞
踩
上一篇文章中介绍了如何使用NXP生产的S32K118单片机实现CAN通讯。本文将在这个基础上使用Python实现对上文所述开发板的控制
Python可以通过集成“Python-CAN”插件实现常见USB转CAN设备的驱动。如:Kvaser,SLCAN,PCAN, Vector等。本文使用的USB转CAN工具是在某宝上淘的SLCAN接口硬件。本文将以此展开介绍。
为了使用Python-CAN插件,首先需要通过如下命令安装:
pip install python-can
Python-can总线接口类型通过如下语句定义。
总线名=can.interface.bus(channel=端口号, bustype=接口类型,bitrate=波特率)
其中:
端口号:为计算机上使用的USB端口号。可以通过“计算机管理”窗口中查找到:
从上图中可以看到此处使用的USB端口为COM6.
接口类型:指的是使用何种USB转CAN口设备。Python-CAN中接口类型与对应硬件关系如下:
由于此处我们使用的是SLCAN所以接口类型就用slcan。
波特率:为以每秒传输位为单位的CAN速率设置。此处选用500Kbps,对应500000。
Python上发送的报文采用如下格式定义:
报文名=can.Message(arbitration_id=帧ID,data=发送数据,is_extended_id=False/True)
其中is_extended_id表示是否使用了大于11位的扩展帧ID。本文中的ID都没有超过11位,因此选择False。
Python-CAN收发报文十分简单。
总线名.send(报文名)
总线名.recv()
500Kbps 通信速率。
开发板接到 ID=2的帧开灯。 接到ID=4的帧关灯。
开发板上按下按键后向Python发送ID=1的内容为:0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8的帧。
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()))
# 后记
本文于2024.1.27日首发于“车灯电子扫地僧”。 如果你喜欢我的文章,也可以“车灯电子扫地僧”搜索微信订阅号。更多文章等待您的发掘
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。