926blink 2024-05-17 23:22 采纳率: 0%
浏览 3

Jetson nano CAN通信只能发送一条消息

参考这篇教程中的方法,实现了NANO的CAN通信

Jetson Nano配置MCP2515 CANBUS模块_jetson nano mcp2515-CSDN博客

参考官方的send()和receive()的.py文件后,实际使用的过程中,发现上位机只能收到一条消息,代码如下:


import os
import can
import time

os.system('sudo ip link set can0 type can bitrate 500000') # can0500K
os.system('sudo ifconfig can0 up') # can0 up

# can0 = can.interface.Bus(channel = 'can0', bustype = 'socketcan_ctypes')# socketcan_native

def send_message(bus, msg):
    try:
        bus.send(msg)
        print(f"Sent: {msg}")
    except can.CanError as e:
        print(f"Error sending message: {e}")

def receive_messages(bus):
    try:
        while True:
            msg = bus.recv(1.0)
            if msg is not None:
                print(f"Received: {msg}")
    except KeyboardInterrupt:
        pass


if __name__ == '__main__':
    try:
        can0 = can.interface.Bus(channel = 'can0', bustype = 'socketcan_ctypes')

        msg = can.Message(arbitration_id=0x123, data=[0x11, 0x22, 0x33, 0x44])
        msg1 = can.Message(arbitration_id=0x123, data=[0x55, 0x66, 0x77, 0x88])

        send_message(can0, msg)
        time.sleep(0.2)
        send_message(can0, msg1)

        receive_messages(can0)

    except can.CanError as e:
        print(f"Error accessing CAN bus: {e}")

    finally:
        os.system('sudo ifconfig can0 down')

img


上位机发送一条消息给NANO后,收到了第二条消息

img

但不可以让我的nano一直发送消息?一定要有应答了才能发送出第二条消息嘛?

  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-05-17 23:22
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    您想要解决的问题:

    您的问题是要解决Jetson Nano在CAN通信时只能发送一条消息的问题。您希望Nano能够连续发送多条CAN消息,而不是在收到应答后才发送第二条消息。

    图片内容:

    1. 第一张图片显示了深圳维特智能UART-CAN上位机的界面,其中包括设备选择、数据接收显示、发送设置等选项。图片中显示了接收到的数据帧,包括时间戳、ID和数据负载(DLC: 4 55 66 77)。
    2. 第二张图片同样显示了深圳维特智能UART-CAN上位机的界面,其中也显示了接收到的数据帧,包括时间戳、ID和数据负载(DLC: 1 2f)。

    问题出现原因:

    问题可能出现在您的CAN通信设置或代码逻辑上。根据您提供的代码和图片内容,可能的原因包括:

    • CAN通信的配置问题,比如波特率、通道设置等。
    • 代码中可能存在逻辑错误,导致只发送了一条消息。
    • 上位机的设置可能影响了通信流程,需要检查上位机的配置。

    问题解决方案:

    1. 确认CAN通信的配置是否正确,包括波特率和通道。
    2. 检查代码逻辑,确保没有逻辑错误导致只发送一条消息。
    3. 检查上位机的设置,确保没有设置成单次发送模式。

    提供代码:

    以下是修改后的代码示例,用于连续发送多条CAN消息:

    import os
    import can
    
    # 设置CAN接口参数
    os.system('sudo ip link set can0 type can bitrate 500000') # 设置波特率为500K
    os.system('sudo ifconfig can0 up') # 启用can0接口
    
    # 创建CAN总线对象
    can0 = can.interface.Bus(channel='can0', bustype='socketcan_ctypes')
    
    # 定义要发送的消息
    msg = can.Message(arbitration_id=0x123, data=[0x11, 0x22, 0x33, 0x44])
    msg1 = can.Message(arbitration_id=0x123, data=[0x55, 0x66, 0x77, 0x88])
    
    # 发送多条消息
    send_message(can0, msg)
    send_message(can0, msg1)
    
    # 接收消息
    receive_messages(can0)
    
    # 关闭CAN接口
    os.system('sudo ifconfig can0 down')
    
    # 定义发送和接收函数(与之前相同)
    

    代码运行方式:

    • 确保您的Jetson Nano已经安装了Python和python-can库。
    • 运行上述代码。

    代码预期运行结果:

    • 代码将连续发送两条CAN消息,并且能够接收到这些消息。

    推荐相关链接:

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 5月17日
  • 创建了问题 5月17日

悬赏问题

  • ¥15 python怎么在已有视频文件后添加新帧
  • ¥20 虚幻UE引擎如何让多个同一个蓝图的NPC执行一样的动画,
  • ¥15 fluent里模拟降膜反应的UDF编写
  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵