EtherCAT IO
EtherCAT 是 Darra PLC 的主要实时 IO 总线,支持 CiA 401 数字/模拟 IO 模块和 CiA 402 伺服驱动。通过 PDO 映射实现确定性数据交换,典型周期时间 1ms。
架构
PDO 映射
PDO (Process Data Object) 是 EtherCAT 实时数据交换的基本单元。每个从站通过 ESI 文件定义其 PDO 内容。
TxPDO (从站 → 主站)
| 典型内容 | CiA 索引 | 数据类型 | 说明 |
|---|---|---|---|
| 数字输入 | 0x6000 | BOOL/BYTE | DI 状态 |
| 模拟输入 | 0x6000 | INT16 | ADC 原始值 |
| 状态字 | 0x6041 | UINT16 | 伺服状态 (CiA 402) |
| 实际位置 | 0x6064 | INT32 | 编码器反馈 (counts) |
RxPDO (主站 → 从站)
| 典型内容 | CiA 索引 | 数据类型 | 说明 |
|---|---|---|---|
| 数字输出 | 0x7000 | BOOL/BYTE | DO 控制 |
| 模拟输出 | 0x7000 | INT16 | DAC 目标值 |
| 控制字 | 0x6040 | UINT16 | 伺服控制 (CiA 402) |
| 目标位置 | 0x607A | INT32 | 位置指令 (counts) |
ESI 导入
通过 ESI (EtherCAT Slave Information) XML 文件自动配置从站:
var esiParser = new ESIParser();
var slaveInfo = esiParser.Parse("Beckhoff_EL1008.xml");
// 自动生成 PDO 映射
foreach (var pdo in slaveInfo.TxPDOs)
{
Console.WriteLine($"TxPDO: 0x{pdo.Index:X4} - {pdo.Name}");
foreach (var entry in pdo.Entries)
{
Console.WriteLine($" 0x{entry.Index:X4}:{entry.SubIndex:X2} " +
$"{entry.DataType} {entry.BitLength}bit");
}
}
ESI 文件通常由从站厂商提供,也可从 ETG 官网下载。Darra PLC 安装目录的 ESI/ 文件夹包含常见从站的 ESI 文件。
CiA 401 — 数字/模拟 IO
CiA 401 设备配置文件定义了标准 IO 模块的对象字典:
| 对象 | 索引 | 说明 |
|---|---|---|
| 数字输入 | 0x6000-0x6007 | 最多 256 个 DI |
| 数字输出 | 0x7000-0x7007 | 最多 256 个 DO |
| 模拟输入 | 0x6000 | 16 位 ADC 值 |
| 模拟输出 | 0x7000 | 16 位 DAC 值 |
模拟量缩放
模拟输入/输出需要从原始值转换为工程单位:
// 原始值 (0-32767) → 工程值 (0-10V)
double voltage = rawValue * 10.0 / 32767.0;
// 或使用 IOMapping 的 ScaleFactor
mapping.Add(new IOPoint {
Address = "%IW100",
ScaleFactor = 10.0 / 32767.0,
Unit = "V"
});
CiA 402 — 伺服驱动
CiA 402 定义了伺服驱动的标准状态机和控制模式。Darra PLC 主要使用 CSP (Cyclic Synchronous Position) 模式。
伺服状态机
位置单位转换
伺服位置数据从 PDO 的脉冲计数自动转为 PLC 里的弧度/角度:
PDO (int32 counts) × 缩放因子 → 关节位置 (double rad)
缩放因子在添加伺服从站时由向导自动填好,常见型号预置,无需手工改。如需自定义,打开从站属性 → 轴参数 → 脉冲/圈 和 齿轮比。
IO 地址映射示例
将 EtherCAT 从站映射到 PLC 地址:
| PLC 地址 | EtherCAT 从站 | PDO | 说明 |
|---|---|---|---|
| %IX0.0~0.7 | Slave 1 (EL1008) | 0x6000:01 | 8 路 DI |
| %QX0.0~0.7 | Slave 2 (EL2008) | 0x7000:01 | 8 路 DO |
| %IW100~103 | Slave 3 (EL3064) | 0x6000:11~14 | 4 路 AI |
常见从站厂商
| 厂商 | 型号系列 | 产品定位 |
|---|---|---|
| Beckhoff | EL 系列 | 广泛, 生态完善 |
| Omron | NX 系列 | 与 NJ/NX PLC 搭配 |
| Yaskawa | Σ-7, JEPMC | 伺服 + IO |
| 汇川 | SV660N, IS800 | 国产高性价比 |
| 台达 | AS 系列 | 中小型机械 |
| 松下 | Minas A6 | 高端伺服 |
| 三菱 | MR-JEV | iQ-R 生态 |
| SMC | EX600 | 气动 |
| Wago 750-EC | 分布式 IO | 模块化 |
扫描后 IDE 会在 ESI 库里查型号信息, 找到对应 PDO 默认映射。
网卡选择
EtherCAT 主站必须用独立网卡, 避免业务流量干扰:
- 推荐 Intel I210 / I219 / I225 等成熟芯片
- Realtek 8111 系列能跑但偶发抖动
- USB 网卡不推荐 (延迟不可控)
- 双网卡冗余时两张卡最好同型号同版本驱动
IDE 里分配网卡:
- 项目树 → IO 设备 → 属性 → 网卡
- 下拉选择可用网卡
- 确认"独占模式"已勾选 (其他协议栈不能用这张卡)
从站地址
EtherCAT 从站有两种地址:
| 地址 | 如何定 | 用途 |
|---|---|---|
| 物理地址 | 链路拓扑自动分配, 从近到远 1 起始 | 主站初始化用 |
| 配置地址 | 项目里手动指定 | 应用层使用 |
配置地址稳定, 即使增删从站, 只要别的从站的配置地址不变, PLC 程序不受影响。推荐:
- 工程里一次性分配配置地址 (例如 Slave1 = 1001)
- 更换从站硬件后, 配置地址不变, PLC 代码不用改
PDO 配置变更
从站默认 PDO 映射可能不满足需求, 可手动修改:
- 打开从站节点 → PDO 映射页
- 查看可选 PDO (由 ESI 定义)
- 勾选要用的, 取消不用的
- 编辑 PDO 内 Entry (支持的 CoE 对象和子索引)
- 保存, 主站会在 SAFE-OP 切换前下发
有些从站要求在特定状态 (PRE-OP) 才能改映射, IDE 会自动处理。
邮箱设置
PDO 用于实时过程数据, 邮箱 (Mailbox) 用于非实时的 SDO / FoE / EoE:
| 邮箱协议 | 用途 |
|---|---|
| CoE (CAN over EtherCAT) | 最常用, SDO 参数读写 |
| EoE (Ethernet over EtherCAT) | 透传 Ethernet 帧 |
| FoE (File over EtherCAT) | 固件更新 |
| SoE (Servo over EtherCAT) | CiA 402 伺服 (较少, 多数用 CoE) |
| VoE (Vendor over EtherCAT) | 厂商特定 |
邮箱配置:
- 邮箱 Size: 默认 128 字节, 复杂参数可提到 512
- 邮箱 Tx/Rx 起始地址: ESI 定义, 通常不改
启动配置 (Startup SDO)
启动时需要下发给从站的 SDO 列表, 在 SAFE-OP 切换之前执行:
项目树 → 从站 → 启动配置 → 添加 SDO
Index 0x6098 SubIdx 0 Value 1 (Homing Method = 1)
Index 0x6099 SubIdx 1 Value 10000 (Homing Speed 1)
Index 0x6099 SubIdx 2 Value 1000 (Homing Speed 2)
...
IDE 会在每次启动 EtherCAT 时自动发这些 SDO, 保证从站参数一致。
故障诊断
WKC 监视
每个 PDO 帧返回时应该累加 Working Counter:
| WKC 值 | 含义 |
|---|---|
| 期望值 | 所有从站都成功处理 |
| 低于期望 | 某从站没处理 (掉线或状态错) |
| 0 | 主站没发出或全部从站离线 |
持续低 WKC → 报警 → PLC 进入安全模式
从站状态监控
每个从站都暴露:
- 当前 AL_STATUS (INIT/PRE-OP/SAFE-OP/OP)
- AL_STATUS_CODE (错误码)
- 端口链路状态 (0/1/2/3 端口上是否有线)
- RX/TX 错误计数
IDE 的拓扑视图把这些信息用图形展示, 红色图标 = 故障。
热插拔支持
EtherCAT 对热插拔的支持取决于从站:
| 支持等级 | 行为 |
|---|---|
| 不支持 | 拔任一从站 → 整个 EtherCAT 网停 |
| 部分支持 | 拔末端从站可恢复, 中间不行 |
| 完整支持 (Hot Connect Groups) | 任意从站热插拔, 其他保持运行 |
IDE 支持把从站分组为"热插拔组", 某组整体可插拔:
项目 → 从站 → 属性 → 热插拔 → 设为独立组
运行中插入该组会触发在线扫描和 PDO 重新分配。
诊断工具
IDE 内置 EtherCAT 诊断:
- 网络拓扑图: 可视化所有从站和连接
- 在线 PDO 查看: 看每个从站当前 PDO 数据
- CoE 浏览器: 像 OPC UA Browser 一样浏览 CoE 对象字典
- 错误计数器: 每端口的 CRC / Link Lost / Lost Link 统计
- 帧跟踪: 对某从站开启帧跟踪, 记录最近 1000 帧
排错
| 症状 | 处理 |
|---|---|
| 扫描不到任何从站 | 网卡未绑定 DarraRT_Eth; 从站未上电 |
| 扫到 N 个后断 | 第 N+1 个线缆或从站故障 |
| 卡在 SAFE-OP | PDO 映射有问题, 查 AL_STATUS_CODE |
| 进入 OP 瞬间掉回 | 周期时间对该从站太短, 加大 |
| DC 偏差持续增大 | 参考时钟选错, 重新指定 |
| WKC 偶发错 | 端口 RX 错误累加, 换网线 |
| 伺服报警 0x1F00 | 通讯中断, 检查从站供电 |