在矢量硬件上使用 python-can 库在 CAN FD 上发送长消息

Sending long messages on CAN FD using python-can library on vector hardware

我正在尝试在 CAN FD 上发送一条很长的消息 (DLC=70),但没有成功。我已成功发送较短的消息 (DLC=8)

我使用 python-can 包按如下方式设置总线:

can.interface.Bus(bustype='vector', app_name='CANoe', channel=[0], bitrate=500000, data_bitrate=2000000, fd=True)

只要消息简短,一切正常。

CANoe 的日志文件显示除了前 8 位之外没有写入任何内容。我真的很感激在这件事上的任何帮助。如果问题更清楚更详细,请告诉我

这些是我要发送的消息


    msg6 = can.Message(arbitration_id=0x74A, dlc=64,   data=messagedata1,  
    extended_id=False)
    task6 = bus.send(msg6)
    time.sleep(5)
    msg7 = can.Message(arbitration_id=0x74A, dlc=9,  data=trailingbits,  
    extended_id=False)
    task7 = bus.send(msg7)
    time.sleep(5)

您已在 can-bus 的设置中指出它是 CAN-FD,但您还需要通过设置 is_fd=True 将其包含在您构造的消息中。

所以不用

msg6 = can.Message(arbitration_id=0x74A, dlc=15, data=messagedata1, extended_id=False)
task6 = bus.send(msg6)

time.sleep(5)

msg7 = can.Message(arbitration_id=0x74A, dlc=9, data=trailingbits, extended_id=False)
task7 = bus.send(msg7)

time.sleep(5)

你能试试吗

msg6 = can.Message(arbitration_id=0x74A, dlc=15, data=messagedata1, is_fd=True, extended_id=False)
task6 = bus.send(msg6)

time.sleep(5)

msg7 = can.Message(arbitration_id=0x74A, dlc=9, data=trailingbits, is_fd=True, extended_id=False)
task7 = bus.send(msg7)

time.sleep(5)

供您参考,请查看第 3.3 节。 python-can documentation.

我知道这是旧的,但事实证明在总线配置中设置 fd 标志也让我开始发送 CAN FD 消息。像这样将“fd=True”添加到总线

busA=can.interface.Bus(bustype='socketcan',channel='vcan0',bitrate=500000, fd=True)