cd d:\work\WindowsFormsTest\CanTest
# 使用Visual Studio打开项目并运行
# 或使用命令行编译运行
程序会自动:
运行后会在目录中生成 CanOpenSlave_Node5.eds 文件,这就是PLC需要的配置文件。
CanOpenSlave_Node5.eds启动PLC后,观察:
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() 方法。
参见 PdoMappingExample.cs 文件。
| 文档 | 说明 |
|---|---|
| README_CANopen_Slave.md | 完整项目说明和技术细节 |
| CANopen从站使用指南.md | 详细使用手册和PLC配置 |
| CANopen使用指南.md | CANopen协议基础概念 |
// 创建从站
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);
// 配置TPDO(从站→PLC)
slave.ConfigureTpdo(pdoNumber: 1, enabled: true, transmissionType: 0xFF);
// 配置RPDO(PLC→从站)
slave.ConfigureRpdo(pdoNumber: 1, enabled: true);
// 发送TPDO
slave.SendTpdo(1);
// 生成EDS文件
slave.GenerateEdsFile("MyDevice.eds");
// 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));
// 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));
// TPDO1: 数字输入 + 模拟输入
// RPDO1: 数字输出 + 模拟输出
// 参见 PdoMappingExample.cs
症状: Initialize() 返回 false
解决:
controlcan.dll 在程序目录症状: PLC报"从站离线"或"心跳超时"
解决:
症状: PLC收不到PDO数据
解决:
ConfigureTpdo(1, true)症状: PLC读写对象字典超时
解决:
PdoMappingExample.cs在部署前确认:
controlcan.dll 在程序目录准备好了吗?开始编码吧! 🚀