BUS0.RECV(超时= 1.0)无法处理CANFDmsg

问题描述 投票:0回答:1

在我的Ubuntu22.04中,我无法使用BUS0.RECV API获取CANFDmsg.

首先,我设置了两个虚拟CAN设备,名为“ CAN0”和“ CAN1”。 在终端“ A”中,我将名为can_bridge.py的Python程序运行到CAN0和CAN1之间的can can sg。 在终端'B'中,我运行“罐头罐罐CANSEND CAN0 CAN0 213 ## 4112233445566778899AA”,我发现can_bridge.py无法转发此消息,并且没有printf信息。但是我运行“ Cansend Can0 123#deadbeef”,can_bridge.py可以转发此消息并具有下面的printf信息:

在CAN0上的接种:时间戳:1742197953.015760 ID:111 S TX DL:8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00频道:CAN0 转发经典CAN从CAN0到CAN1

如果我在我的ubuntu22.04中使用Cansend和Candump发送或接收CANFD MSG,则可以排除硬件和配置问题。

can_bridge.py的代码:

#!/usr/bin/env python3 import can # CAN interface names CAN0 = 'can0' CAN1 = 'can1' def main(): # Setup CAN interfaces using python-can bus0 = can.interface.Bus(channel=CAN0, interface='socketcan') bus1 = can.interface.Bus(channel=CAN1, interface='socketcan') while True: # Receive a message from can0 msg = bus0.recv(timeout=1.0) if msg is not None: print(f"Received on {CAN0}: {msg}") # Forward the message to can1 if msg.is_fd: print(f"Forwarding CAN FD message from {CAN0} to {CAN1}") else: print(f"Forwarding classic CAN message from {CAN0} to {CAN1}") bus1.send(msg) # Receive a message from can1 msg = bus1.recv(timeout=1.0) if msg is not None: print(f"Received on {CAN1}: {msg}") # Forward the message to can0 if msg.is_fd: print(f"Forwarding CAN FD message from {CAN1} to {CAN0}") else: print(f"Forwarding classic CAN message from {CAN1} to {CAN0}") bus0.send(msg) if __name__ == "__main__": main()

我想使用Python程序来实现以下逻辑:
在Ubuntu主机中,编写一个可以实现以下伪代码逻辑的Python脚本。
在当时的无限循环中,使用轮询界面来收听虚拟节点CAN0和CAN1的花粉蛋白事件。收到花粉事件后,使用读取界面获取节点的消息信息,然后使用写入接口将框架消息信息发送到另一个节点。
    

i我假设您正在使用

python-can
python can-bus ubuntu-22.04 forwarding
1个回答
0
投票
https://python-can.readthedocs.io/en/stable/

)。尝试更改总线配置:

bus0 = can.interface.Bus(channel=CAN0, interface='socketcan', fd=True)
bus1 = can.interface.Bus(channel=CAN1, interface='socketcan', fd=True)

    
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.