张宁的个人博客

莫道君行早,更有早行人。

Python-can库 ②接收/发送CANFD报文(PCAN)

张宁的个人博客/发布时间:2023-05-20/分类:软件&硬件/ 浏览量:12500

我们可以使用Python-can库直接接收或者发送报文信息,下面以实车报文信息为例。通过此代码,可以实时接收整车CAN上的报文信息,用于其他需求。

1. 不使用DBC文件

import time
import can
from can.bit_timing import BitTimingFd

def send_fd_test():
    #首先基于CAN协议设置波特率,此处设置的为CANFD数据的波特率参数
    timingFD = BitTimingFd(
        f_clock=24000000,  #时钟频率
        nom_brp=3,         #仲裁场分频系数
        nom_tseg1=13,      #仲裁场TSeg1
        nom_tseg2=2,       #仲裁场TSeg2
        nom_sjw=1,         #仲裁场同步跳变宽度
        data_brp=2,        #数据场分频系数
        data_tseg1=4,     #数据场TSeg1
        data_tseg2=1,      #数据场TSeg2
        data_sjw=1         #数据场同步跳变宽度
    )
    #实例化CAN总线bus1,使用PCAN接收和发送CANFD数据
    bus1 = can.interface.Bus(channel='PCAN_USBBUS1',interface='pcan',fd=True,timing=timingFD)
    #实例化发送的报文消息
    msg1 = can.Message(timestamp=0,arbitration_id=0x124,data=[1,0,15,0,1,3,1,4,9,8,8,9,10,11,12,12,15],is_extended_id=False, is_fd=True)

    for i in range(5):
        print(msg1)          #打印接收的硬件报文消息
        bus1.send(msg1)      #发送报文消息
        time.sleep(0.1)

但是因为获取到的数据没有和DBC文件相结合,所以获取到的数据是原始的十六进制数据,无法直接使用,后续可以使用cantools库解析DBC文件,以有针对性的读取和筛选自己需要的数据。

2. 使用DBC文件

待完善


文章关键词
Python
Python-can
CAN
CANFD
发表评论