CAN集成说明.md 4.6 KB

CAN API 集成说明

✅ 已完成的工作

1. 库文件准备

  • ✅ 复制CAN API头文件到 libs/can_api/include/lib_emuc_2.h
  • ✅ 复制CAN API库文件到 libs/can_api/lib/lib_emuc2_64.a

2. 核心类实现

  • CanManager (src/can_manager/can_manager.h/cpp)
    • 参考 SerialManager 的设计模式
    • 支持设备发现、打开/关闭、配置管理
    • 支持CAN数据发送和接收(使用独立线程)
    • 集成 SoftBusCore 进行数据存储和消息路由

3. UI组件实现

  • CanDataWidget (src/view_can/can_data_widget.h/cpp/ui)
    • 参考 SerialDataWidget 的设计
    • 支持CAN数据收发显示
    • 支持HEX/ASCII显示模式切换
    • 支持CAN ID输入、扩展ID选择、CAN端口选择

4. 视图实现

  • ViewCan (src/view_can/viewcan.h/cpp/ui)
    • 参考 ViewSerial 的设计
    • 集成设备树、CAN数据组件、原始数据表格、总线数据表格
    • 支持设备自动发现和注册

5. 构建配置

  • ✅ 更新 CMakeLists.txt
    • 添加CAN相关源文件
    • 添加CAN API库链接(lib_emuc2_64.a
    • 添加pthread库链接(CAN接收线程需要)
    • 添加CAN API头文件路径

📁 文件结构

soft_bus/
├── libs/
│   └── can_api/
│       ├── include/
│       │   └── lib_emuc_2.h          # CAN API头文件
│       └── lib/
│           └── lib_emuc2_64.a         # CAN API静态库
│
├── src/
│   ├── can_manager/
│   │   ├── can_manager.h              # CAN管理器头文件
│   │   └── can_manager.cpp            # CAN管理器实现
│   │
│   └── view_can/
│       ├── viewcan.h                  # CAN视图头文件
│       ├── viewcan.cpp                 # CAN视图实现
│       ├── viewcan.ui                  # CAN视图UI
│       ├── can_data_widget.h          # CAN数据组件头文件
│       ├── can_data_widget.cpp        # CAN数据组件实现
│       └── can_data_widget.ui         # CAN数据组件UI
│
└── CMakeLists.txt                     # 已更新,包含CAN相关配置

🔧 使用方法

1. 编译项目

cd /home/dt/myCode/bus/soft_bus/soft_bus
mkdir -p build && cd build
cmake ..
make

2. 在主窗口中添加CAN视图

需要在 mainwindow.cpp 中添加CAN视图的创建和切换逻辑,参考串口视图的实现。

3. 基本使用流程

  1. 设备发现CanManager 会自动发现可用的EMUC设备
  2. 打开设备:在设备树中选择CAN设备,自动打开
  3. 配置CAN参数:可以通过 CanManager::setCanConfig() 设置波特率、模式等
  4. 发送数据:在CAN数据组件中输入CAN ID和数据,点击发送
  5. 接收数据:接收到的数据会自动显示在接收区

🎯 主要功能

CanManager 功能

  • ✅ 设备自动发现(定时扫描)
  • ✅ 设备打开/关闭管理
  • ✅ CAN配置管理(波特率、模式、过滤器等)
  • ✅ CAN数据发送
  • ✅ CAN数据接收(独立线程,非阻塞)
  • ✅ 数据解析和存储(集成SoftBusCore)

CanDataWidget 功能

  • ✅ CAN数据收发显示
  • ✅ HEX/ASCII显示模式
  • ✅ CAN ID输入(支持扩展ID)
  • ✅ CAN端口选择(CAN1/CAN2)
  • ✅ 设备检测功能
  • ✅ 响应超时检测

📝 注意事项

  1. 线程安全CanManager 使用互斥锁保护共享数据
  2. 资源管理:设备关闭时会自动停止接收线程
  3. 错误处理:所有API调用都有错误检查
  4. 数据格式:CAN数据最多8字节
  5. ID格式:CAN ID支持标准ID(11位)和扩展ID(29位)

🔄 与串口模块的对比

特性 SerialManager CanManager
设备发现 串口扫描 EMUC设备扫描
数据格式 任意长度 最多8字节
标识符 端口名 CAN ID + 端口名
接收方式 Qt信号槽 独立线程
配置项 波特率、校验位等 波特率、模式、过滤器等

🚀 后续改进建议

  1. CAN配置界面:创建类似 SerialSettingsWidget 的CAN配置界面
  2. 过滤器配置:添加图形化过滤器配置界面
  3. 数据统计:添加发送/接收数据统计功能
  4. 错误监控:添加CAN总线错误监控和显示
  5. 回环测试:添加CAN回环测试功能

📚 参考文档

  • CAN API使用指南:/home/dt/EMUC2_CAN_API_V2.0.0_Linux/EMUC2_CAN_API_V2.0.0_Linux/CAN_API_使用指南.md
  • 示例代码:/home/dt/EMUC2_CAN_API_V2.0.0_Linux/EMUC2_CAN_API_V2.0.0_Linux/Sample_EMUC2/main.c