在我的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()
i我假设您正在使用
python-can