快速开始.md 5.6 KB

CANopen从站 - 快速开始指南

🎯 5分钟快速上手

第一步:运行示例程序

cd d:\work\WindowsFormsTest\CanTest
# 使用Visual Studio打开项目并运行
# 或使用命令行编译运行

程序会自动:

  1. 创建节点ID为5的CANopen从站
  2. 初始化CAN通信(500kbps)
  3. 配置PDO映射
  4. 生成EDS文件
  5. 启动从站并开始通信

第二步:查看生成的EDS文件

运行后会在目录中生成 CanOpenSlave_Node5.eds 文件,这就是PLC需要的配置文件。

第三步:在PLC中导入EDS

西门子 TIA Portal

  1. 打开TIA Portal项目
  2. 进入"硬件配置"
  3. 右键"CANopen主站" → "导入GSD/EDS文件"
  4. 选择 CanOpenSlave_Node5.eds
  5. 将设备拖到网络拓扑
  6. 设置节点ID = 5
  7. 编译并下载到PLC

三菱 GX Works3

  1. 打开网络配置
  2. 导入EDS文件
  3. 配置主站参数
  4. 下载程序

倍福 TwinCAT

  1. 扫描设备
  2. 导入EDS
  3. 配置PDO映射
  4. 激活配置

第四步:验证通信

启动PLC后,观察:

  • ✅ 从站收到NMT Start命令
  • ✅ 从站发送心跳报文(0x705)
  • ✅ PDO数据周期性交换
  • ✅ 可以使用CAN分析仪抓包验证

💻 代码示例

最简示例(10行代码)

using CCDCount.DLL.CanBus;

using (var slave = new CanOpenSlave(5))
{
    slave.Initialize(CanBaudRate.BaudRate_500K);
    slave.ConfigureTpdo(1, true);
    slave.SetHeartbeatTime(1000);
    slave.Start();
    
    // 运行业务逻辑...
    
    slave.Stop();
}

完整示例

参见 Program.cs 中的 RunCanOpenSlave() 方法。

PDO映射示例

参见 PdoMappingExample.cs 文件。

📚 文档导航

文档 说明
README_CANopen_Slave.md 完整项目说明和技术细节
CANopen从站使用指南.md 详细使用手册和PLC配置
CANopen使用指南.md CANopen协议基础概念

🔍 核心API速查

初始化和启动

// 创建从站
CanOpenSlave slave = new CanOpenSlave(nodeId: 5);

// 初始化
slave.Initialize(CanBaudRate.BaudRate_500K);

// 启动
slave.Start();

// 停止
slave.Stop();

数据读写

// 写入对象字典
slave.SetObjectValue(0x6000, 0x01, (byte)0xAA);

// 读取对象字典
var value = slave.GetObjectValue(0x6200, 0x01);

PDO配置

// 配置TPDO(从站→PLC)
slave.ConfigureTpdo(pdoNumber: 1, enabled: true, transmissionType: 0xFF);

// 配置RPDO(PLC→从站)
slave.ConfigureRpdo(pdoNumber: 1, enabled: true);

// 发送TPDO
slave.SendTpdo(1);

EDS生成

// 生成EDS文件
slave.GenerateEdsFile("MyDevice.eds");

⚙️ 常见配置

配置1:数字IO从站

// TPDO1: 发送8位数字输入
slave.ConfigureTpdo(1, true, 0xFF);
slave.SetObjectValue(0x1A00, 0x00, (byte)1);
slave.SetObjectValue(0x1A00, 0x01, (uint)(0x6000U << 16 | 0x01U << 8 | 0x08U));

// RPDO1: 接收8位数字输出
slave.ConfigureRpdo(1, true);
slave.SetObjectValue(0x1600, 0x00, (byte)1);
slave.SetObjectValue(0x1600, 0x01, (uint)(0x6200U << 16 | 0x01U << 8 | 0x08U));

配置2:模拟量采集从站

// TPDO1: 发送4通道模拟输入(每通道16位)
slave.ConfigureTpdo(1, true, 10); // SYNC同步,每10个周期发送
slave.SetObjectValue(0x1A00, 0x00, (byte)4);
slave.SetObjectValue(0x1A00, 0x01, (uint)(0x6400U << 16 | 0x01U << 8 | 0x10U));
slave.SetObjectValue(0x1A00, 0x02, (uint)(0x6400U << 16 | 0x02U << 8 | 0x10U));
slave.SetObjectValue(0x1A00, 0x03, (uint)(0x6400U << 16 | 0x03U << 8 | 0x10U));
slave.SetObjectValue(0x1A00, 0x04, (uint)(0x6400U << 16 | 0x04U << 8 | 0x10U));

配置3:混合IO从站

// TPDO1: 数字输入 + 模拟输入
// RPDO1: 数字输出 + 模拟输出
// 参见 PdoMappingExample.cs

🐛 故障排除

问题1:无法打开CAN设备

症状: Initialize() 返回 false

解决:

  1. 确认CAN卡已正确插入USB口
  2. 检查驱动程序是否安装
  3. 确认 controlcan.dll 在程序目录
  4. 尝试更换USB端口

问题2:PLC找不到从站

症状: PLC报"从站离线"或"心跳超时"

解决:

  1. 检查CAN总线接线(CAN_H接CAN_H,CAN_L接CAN_L)
  2. 确认波特率一致(都是500kbps)
  3. 验证节点ID配置正确
  4. 检查终端电阻(总线两端各120Ω)
  5. 使用CAN分析仪抓包验证

问题3:PDO无数据

症状: PLC收不到PDO数据

解决:

  1. 确认从站处于Operational状态(收到NMT Start)
  2. 检查PDO是否已启用:ConfigureTpdo(1, true)
  3. 验证PDO映射配置与PLC一致
  4. 检查COB-ID是否正确
  5. 对于SYNC触发的PDO,确认PLC发送了SYNC

问题4:SDO通信失败

症状: PLC读写对象字典超时

解决:

  1. 验证对象索引和子索引是否正确
  2. 检查数据类型是否匹配
  3. 确认对象存在且可访问
  4. 查看SDO响应报文

📞 获取帮助

  1. 查看详细文档:README_CANopen_Slave.md
  2. 参考示例代码:PdoMappingExample.cs
  3. 查阅CANopen标准:CiA 301协议文档
  4. 使用CAN分析仪调试

✅ 检查清单

在部署前确认:

  • CAN卡驱动已安装
  • controlcan.dll 在程序目录
  • CAN总线接线正确
  • 终端电阻已安装(120Ω)
  • 波特率与PLC一致
  • 节点ID唯一(不冲突)
  • EDS文件已导入PLC
  • PDO映射配置一致
  • 从站能收到NMT Start命令
  • 心跳报文正常发送
  • PDO数据正常交换

准备好了吗?开始编码吧! 🚀