You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

python-can-isotp库接收流控制帧后无法发送连续帧的问题求助

python-can-isotp库接收流控制帧后无法发送连续帧的问题求助

大家好,我目前遇到了一个CAN ISO-TP通信的问题,想请教下各位开发者。先说明下我的环境:

  • Python 3.13.1
  • can-isotp 2.0.6
  • python-can 4.5.0
  • 硬件使用Robotell的USB-CAN适配器

我编写了一个发送ISO-TP数据的函数,代码如下:

def send_msg(data):
    channel = find_Robotell_port()
    paramsdata = load_setup("setup.json")
    bus = can.interface.Bus(interface='robotell', channel=channel, bitrate=500000)
    data_byte = bytes([int(x,16) for x in data])
    addr = isotp.Address(isotp.AddressingMode.Normal_11bits, rxid=0x62C, txid=0x6AC)
    params = paramsdata["Parameters"]
    stack = isotp.CanStack(bus, address=addr, error_handler=my_error_handler, params=params)
 
    try:
        stack.start()
        stack.send(data = data_byte, send_timeout= 5)
    except isotp.BlockingSendFailure:  
        print('failure to send')
    finally:
        stack.stop()
        bus.shutdown()

(注:代码里的Print我改成了小写print,应该是笔误)

我的setup.json中配置的ISO-TP参数如下:

"Parameters": {
        "stmin" : 10,
        "blocksize" : 0,
        "tx_data_length" : 8,
        "tx_data_min_length" : 8,
        "override_receiver_stmin" :1000,
        "rx_flowcontrol_timeout" : 10000,
        "rx_consecutive_frame_timeout" : 1000,
        "tx_padding": 255,
        "wftmax" : 0,
        "max_frame_size" : 4095,
        "can_fd" : false,
        "bitrate_switch" : false,
        "default_target_address_type": 0,
        "rate_limit_enable" : false,
        "rate_limit_max_bitrate"  : 10000000,
        "rate_limit_window_size" : 0.2,
        "listen_mode" : false,
        "blocking_send" :true,
        "logger_name" : "CAN_TP"
}

现在遇到的问题是:当发送8字节以下的单帧数据时,整个流程完全正常;但一旦发送超过8字节的多帧数据,就会出现异常:
我能成功发送第一帧(FF),也能收到对方返回的流控制帧(FC),但程序就是不会继续发送后续的连续帧(CF),最终会触发isotp.BlockingSendFailure异常。

举个具体的测试场景:
我使用的输入数据是:

input = ['0x67','0x03','0xec', '0x45', '0xf2', '0x63', '0xd0', '0xd8', '0xae', '0x9d', '0x2d', '0xb3', '0x23', '0x0', '0x30', '0x73', '0xc0', '0x89','0x73', '0xc0', '0x89']

对应的CAN帧交互情况是:

发送: 10 15 67 03 EC 45 F2 63 (第一帧FF)
接收: 30 08 14 00 00 00 00 00 (流控制帧FC)
结果: 没有发送任何连续帧,最终抛出BlockingSendFailure异常

我猜测问题可能出在ISO-TP的参数配置上,但自己排查了很久都没找到问题点。想请教下大家有没有遇到过类似的情况,或者能帮我看看参数哪里配置错了?非常感谢!

备注:内容来源于stack exchange,提问作者Hoangnguyen293

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 18:09:49