QUICKSTART.md 6.9 KB

CANopen从站设备 - 快速开始指南

📋 前提条件

  1. 硬件要求

    • 创芯科技USBCAN2适配器
    • CAN总线连接线
    • Windows电脑
  2. 软件要求

    • Visual Studio 2019或更高版本
    • .NET Framework 4.7.2
    • controlcan.dll (CAN卡驱动)

🚀 5分钟快速上手

步骤1: 准备环境

  1. 确保controlcan.dllbin\Debug目录下
  2. 连接USBCAN2设备到USB端口
  3. 连接CAN总线

步骤2: 编译项目

# 方法1: 使用Visual Studio
打开 CanOpenSlaveTest.sln
按 Ctrl+Shift+B 编译

# 方法2: 使用MSBuild
msbuild CanOpenSlaveTest.csproj /p:Configuration=Debug

步骤3: 运行程序

cd bin\Debug
CanOpenSlaveTest.exe

步骤4: 启动从站

  1. 点击 "启动从站" 按钮
  2. 观察日志输出,确认启动成功
  3. 配置心跳时间(建议100ms)
  4. 点击 "配置心跳" 按钮

步骤5: 测试通信

发送TPDO

  • 点击 "发送TPDO1""发送TPDO2" 按钮
  • 或使用CAN分析仪监控总线上的数据

接收RPDO

  • 使用主站发送RPDO到从站
  • 观察日志窗口中的接收信息

📊 界面说明

┌─────────────────────────────────────────────┐
│ 设备信息                                     │
│ 节点ID: 1                                    │
│ 状态: PreOperational                         │
│ 运行状态: 运行中                              │
└─────────────────────────────────────────────┘

┌─────────────────────────────────────────────┐
│ 控制                                         │
│ [启动从站] [停止从站]                        │
│ [发送TPDO1] [发送TPDO2] [发送所有TPDO]       │
└─────────────────────────────────────────────┘

┌─────────────────────────────────────────────┐
│ 心跳配置                                     │
│ 心跳时间(ms): [100] [配置心跳]               │
└─────────────────────────────────────────────┘

┌─────────────────────────────────────────────┐
│ 日志                                         │
│ [15:30:45.123] CANopen从站测试程序已启动     │
│ [15:30:45.125] 节点ID: 1                     │
│ [15:30:50.456] ✓ 从站启动成功                │
│ [15:30:55.789] ← 收到RPDO1 [节点1]: 12 34    │
│ ...                                          │
└─────────────────────────────────────────────┘

🔧 常用操作

1. 修改节点ID

编辑代码:

// 在 SlaveTestForm.cs 的 InitializeComponent() 中
m_slaveDevice = new CanOpenSlaveDevice(nodeId: 5);  // 改为5

2. 更改波特率

// 在 BtnStart_Click 方法中
m_slaveDevice.Start(CanBaudRate.BaudRate_500K);  // 500kbps

3. 处理RPDO数据

private void SlaveDevice_OnRpdoReceived(byte nodeId, byte pdoNumber, byte[] data)
{
    // 解析数据
    if (pdoNumber == 1 && data.Length >= 2)
    {
        int value = data[0] | (data[1] << 8);
        Console.WriteLine($"RPDO1数据: {value}");
    }
}

4. 自定义TPDO数据

需要扩展CanOpenSlaveDevice类:

public void SendTpdoWithData(byte pdoNumber, byte[] customData)
{
    if (pdoNumber < 1 || pdoNumber > 4)
        throw new ArgumentException("PDO编号必须在1-4之间");
    
    uint cobId = m_tpdoConfigs[pdoNumber - 1].CobId;
    m_canManager.SendCanFrame(cobId, customData);
}

🎯 典型应用场景

场景1: 数据采集从站

// 定期采集传感器数据并通过TPDO发送
private Timer m_dataTimer;

private void StartDataCollection()
{
    m_dataTimer = new Timer(state => {
        if (m_slaveDevice.CurrentState == NmtState.Operational)
        {
            // 读取传感器数据
            byte[] sensorData = ReadSensorData();
            
            // 通过TPDO1发送
            m_slaveDevice.SendTpdo(1);  // 需要扩展支持自定义数据
        }
    }, null, 0, 100);  // 每100ms采集一次
}

场景2: 控制命令接收

// 接收主站的控制命令
m_slaveDevice.OnRpdoReceived += (nodeId, pdoNum, data) => {
    if (pdoNum == 1 && data.Length >= 2)
    {
        // 解析控制命令
        byte command = data[0];
        byte parameter = data[1];
        
        ExecuteCommand(command, parameter);
    }
};

场景3: 参数配置

// 通过SDO配置从站参数
m_slaveDevice.OnSdoWriteRequest += (nodeId, index, subIndex, value) => {
    if (index == 0x2000)  // 自定义参数索引
    {
        // 更新内部参数
        UpdateParameter(subIndex, value);
    }
};

🐛 故障排查

问题1: 启动失败

症状: 点击"启动从站"后显示失败

解决方案:

  1. 检查USBCAN2是否正确连接
  2. 确认controlcan.dll存在且版本正确
  3. 检查CAN总线终端电阻(120Ω)
  4. 验证波特率设置是否与主站一致

问题2: 收不到RPDO

症状: 主站发送RPDO,但从站没有反应

解决方案:

  1. 确认COB-ID配置正确(0x200+nodeId等)
  2. 检查从站是否处于Operational状态
  3. 使用CAN分析仪验证帧是否发送到总线
  4. 检查RPDO是否启用

问题3: TPDO发送失败

症状: 点击发送按钮无响应

解决方案:

  1. 确认从站已启动
  2. 检查TPDO配置是否启用
  3. 验证COB-ID是否正确(0x180+nodeId等)
  4. 查看日志是否有错误信息

问题4: 心跳不工作

症状: 配置心跳后没有心跳帧

解决方案:

  1. 确认心跳时间大于0
  2. 检查从站状态是否为PreOperational或Operational
  3. 验证定时器是否正常创建
  4. 查看控制台输出

📚 下一步学习

  1. 阅读完整文档: 查看 README.md
  2. 研究EDS文件: 理解 Nameless.eds 的配置
  3. 学习CANopen协议: 参考 CiA DS301 标准
  4. 扩展功能: 添加自定义对象字典条目

💡 提示

  • ✅ 始终在操作前检查从站状态
  • ✅ 使用日志输出来调试通信问题
  • ✅ 保持COB-ID配置与主站一致
  • ✅ 定期保存和备份配置
  • ✅ 在生产环境中添加异常处理

📞 获取帮助

遇到问题?

  1. 查看日志窗口的详细输出
  2. 使用CAN分析仪诊断总线通信
  3. 参考 README.md 中的常见问题
  4. 检查EDS文件配置是否正确

祝使用愉快! 🎉