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

文章介绍了使用Python的python-can库构建CANFD报文并利用PCAN-USBPRO接口进行发送的过程。作者在创建BUS对象和message对象时遇到挑战,通过研究源码找到了解决方案。文中提供了一段发送CANFD测试报文的代码示例,并提及CANFD数据域长度限制及其波特率计算公式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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

前言

最近大佬要求我这边写一个针对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()

在这里插入图片描述
由于CANFD数据域长度只能用4bit来表示,当数据场长度大于8byte后就会采用以上的补全方式显示

CANFD的波特率计算公式,仅供参考:
在这里插入图片描述


评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值