PCAN-USB PRO通过python-can实现CANFD的报文的发送

文章目录

  • 前言
  • 一、构建BUS对象
  • 二、构建message对象
  • 三、一个简单的案例
  • 写在结尾


前言

最近大佬要求我这边写一个针对ECU的负载测试工具,我这边用python写了一个生成CAPL负载测试代码工具,但是用CAPL测试发现报文通过定时器执行周期发送非常不稳,咨询大佬说capl本身就是这样的,准备另换方案,准备用python-can调用PCAN-USB PRO实现(python-can调用CANoe发送FD报文没找到解决方案,凄凉),今天简单记录下实践过程中的坑


提示:以下是本篇文章正文内容,下面案例可供参考

一、构建BUS对象

就这步难了我许久,查了很多资料,然后查看了python-can源码,最后才知道怎么设置的

具体源码如下:

timingFD = BitTimingFd(f_clock=24000000, nom_brp=1, nom_tseg1=17, nom_tseg2=6, nom_sjw=1, data_brp=1, data_tseg1=16, data_tseg2=7, data_sjw=1)
bus = can.interface.Bus(bustype='pcan',channel='PCAN_USBBUS1',fd=True,timing=timingFD)

二、构建message对象

代码如下(示例):

i msg = can.Message(arbitration_id=0x124, dlc=17, data=[0, 25, 0, 1, 3, 1, 4, 9, 8,8,9,9,10,11,13,14,15], is_extended_id=False, is_fd=True)

三、一个简单的案例

代码如下(示例):

import time
import can
from can.bit_timing import BitTimingFd


def send_fd_test():
    timingFD = BitTimingFd(
        f_clock=24000000,   # 时钟频率,有MHz和Hz,注意区分
        nom_brp=1,  # 仲裁场分频系数
        nom_tseg1=17,   # 仲裁场TSeg1
        nom_tseg2=6,    # 仲裁场TSeg2
        nom_sjw=1,  # 仲裁场同步跳变宽度
        data_brp=1, # 数据场分频系数
        data_tseg1=16,  # 数据场TSeg1
        data_tseg2=7,   # 数据场TSeg2
        data_sjw=1)    # 数据场分频系数
    bus = can.interface.Bus(bustype='pcan',channel='PCAN_USBBUS1',fd=True,timing=timingFD)
    msg = can.Message(arbitration_id=0x124, dlc=17, data=[0, 25, 0, 1, 3, 1, 4, 9, 8,8,9,9,10,11,13,14,15], is_extended_id=False, is_fd=True)
    while True:
        bus.send(msg)
        time.sleep(0.1)

send_fd_test()

PCAN-USB PRO通过python-can实现CANFD的报文的发送_第1张图片
由于CANFD数据域长度只能用4bit来表示,当数据场长度大于8byte后就会采用以上的补全方式显示


写在结尾

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

你可能感兴趣的:(python,python)