远程 IO 系统
概述
远程 IO (Remote IO) 是将现场 IO 模块分散部署在设备附近, 通过工业以太网或现场总线与 PLC 控制柜通讯的架构。Darra PLC 支持三种远程 IO 接入方式:
| 方式 | 实时性 | 拓扑 | 典型场景 |
|---|---|---|---|
| EtherCAT 从站 IO | 硬实时 (≤ 1 ms) | 菊花链 / 星型 | 高速运动控制、伺服驱动 |
| Modbus 远程 IO | 软实时 (10~100 ms) | 星型 / 线型 | 仪表、阀门、温控器 |
| PROFINET IO | 准实时 (1~10 ms) | 星型 | 西门子生态、汽车产线 |
远程 IO 的核心价值: 减少长距离传感器电缆, 降低布线成本, 提高维护便捷性。
远程 IO 站配置
通用步骤
所有远程 IO 设备在 IDE 中的配置流程一致:
- 项目树 → IO 设备 → 添加远程站
- 选择协议类型 (EtherCAT / Modbus / PROFINET)
- 选择设备型号 (从厂商 ESI/GSDML 文件导入)
- 配置网络参数 (IP / 站号 / 总线位置)
- 映射 IO 数据到 PLC 地址空间
- 编译下载
设备模板
IDE 内置常见远程 IO 模块的配置模板, 缩短手动配置时间:
远程 IO 站模板:
├─ Beckhoff EK1100 + ELxxxx 系列
├─ Wago 750 系列 (EtherCAT 耦合器)
├─ Advantech ADAM-6000 系列 (Modbus TCP)
├─ Siemens ET 200SP (PROFINET)
├─ Rockwell 1734 Point I/O (EtherNet/IP)
└─ 定制: 从 ESI / GSDML 导入
远程站参数
| 参数 | EtherCAT | Modbus | PROFINET |
|---|---|---|---|
| 设备标识 | 从站号 (1~65535) | 从站 ID (1~247) | 设备名称 (IO 系统唯一) |
| 网络地址 | 总线位置 | IP:Port | IP + 设备名称 |
| 数据映射 | PDO 映射 | 寄存器映射 | 槽/子槽映射 |
| 周期同步 | DC (分布式时钟) | 轮询 | RT Class 1 |
| 诊断 | AL Status, 端口状态 | 超时计数 | 模块状态 |
| 断线行为 | 可配置 (Freeze/Safe) | 可配置 | IOPS 评价 |
三种远程 IO 的比较
EtherCAT 远程 IO
- 周期: 250 μs ~ 2 ms, 确定性最高
- 拓扑: 菊花链, 线缆节约, 无需交换机
- 适用: 伺服驱动、高速 IO、运动控制
- 从站: Beckhoff EL 系列、Wago 750、Panasonic MINAS 伺服
Modbus 远程 IO
- 周期: 10 ms ~ 100 ms, 取决于轮询节点数
- 拓扑: 星型通过交换机, 或 RS-485 总线
- 适用: 温控器、电磁阀、传感器
- 从站: ADVANTECH ADAM、Moxa ioLogik、EtherCAT 网关透传
PROFINET IO
- 周期: 1 ms ~ 10 ms, RT Class 1
- 拓扑: 星型, 需交换机
- 适用: 西门子生态、汽车产线
- 设备: ET 200SP、SINAMICS 驱动、第三方 GSDML 设备
与本地 IO 的混合使用
Darra PLC 的 IO 地址空间统一管理, 远程 IO 与本地 IO 共享同一地址空间:
IO 地址空间规划:
%IX0 ~ %IX31 —— 本地 EtherCAT 从站 DI
%IX32 ~ %IX63 —— 远程 EtherCAT 从站 DI
%IX64 ~ %IX95 —— Modbus 远程 IO DI
%IX96 ~ %IX127 —— PROFINET 远程 IO DI
%IW200 ~ %IW299 —— 模拟输入 (本地 + 远程混合)
%QX0 ~ %QX31 —— 本地 EtherCAT 从站 DO
%QX32 ~ %QX63 —— 远程 EtherCAT 从站 DO
...
混合使用的好处
- 统一编程: SCL 代码里
%IX100.0不管对应哪个协议, 直接使用 - 灵活扩展: 产线扩容时只需要加远程站, 不改 PLC 程序
- 故障隔离: 本地 IO 不受远程网络影响, 远程某站断线不影响其他站
- 分层响应: 急停类信号接本地 IO (硬实时), 监控类信号接远程 IO (非实时)
混合使用示例: 包装产线
描码站 (远程 Modbus IO):
- 光电传感器 × 4 → %IX32.0~%IX32.3
- 气缸电磁阀 × 2 → %QX32.0~%QX32.1
封箱站 (远程 EtherCAT IO):
- 热封温度 AI × 2 → %IW210, %IW212
- 热封加热器 AO → %QW210
输送带 (本地 EtherCAT IO):
- 急停按钮 × 2 → %IX0.0, %IX0.1
- 伺服驱动器 × 1 → EtherCAT PDO 映射
远程 IO 诊断
IDE 的远程 IO 诊断面板提供统一的设备状态视图:
诊断概览
| 指标 | 说明 |
|---|---|
| 在线状态 | 在线 / 离线 / 警告 |
| 通讯延迟 | 当前往返时间 (RTT) |
| 丢包率 | 通讯失败的比例 |
| 错误计数 | 自启动以来的通讯错误数 |
| 最后通讯 | 最后成功通讯的时间戳 |
按协议诊断
EtherCAT 远程 IO:
- AL Status 码 (从站当前状态: INIT/PREOP/SAFEOP/OP)
- 端口状态 (A 口/B 口/C 口/D 口, 链接质量)
- 工作计数器 WKC (确认期望 WKC 与实际 WKC 一致)
- DC 同步偏差 (各从站时钟偏移量)
Modbus 远程 IO:
- 响应时间直方图 (最近 100 次请求的响应时间分布)
- 功能码错误统计 (非法功能码 / 非法地址 / 设备故障)
- 轮询超时记录 (哪台设备、哪组寄存器经常超时)
PROFINET IO:
- 设备状态 (正常运行 / 故障 / 不可用)
- IOPS 评价 (Provider/Consumer 状态)
- 数据交换周期 (与设定周期对比偏差)
- 端口链路状态 (链路速度 / 双工模式)
断线保护策略
远程 IO 断线时, 每个 IO 设备可独立配置保护行为:
// 在 IDE 中配置 (属性面板)
remoteDevice.OnTimeout = IOTimeoutBehavior.FreezeLast; // 保持最后值
// 或
remoteDevice.OnTimeout = IOTimeoutBehavior.SetToSafe; // 设为安全值
// 或
remoteDevice.OnTimeout = IOTimeoutBehavior.Passthrough; // 不干预, 由程序处理
推荐做法:
- 安全相关输出 (急停、安全门) →
SetToSafe(输出 0) - 过程值输出 (温度、压力) →
FreezeLast(保持最后正常值) - 纯输入 (传感器状态) → 由 PLC 程序判断通讯状态后走安全分支
远程 IO 网络拓扑
星型拓扑 (Modbus / PROFINET)
┌─────────────┐
│ PLC 控制柜 │
│ Darra PLC │
└─────────────┘
│ 交换机
┌─────┼──┬─────┐
│ │ │ │
┌─┴─┐ ┌─┴─┐ ┌─┴─┐
│IO │ │IO │ │IO │
│站1│ │站2│ │站3│
└───┘ └───┘ └───┘
Modbus PROFINET
TCP RTU IO
菊花链拓扑 (EtherCAT)
┌─────────────┐
│ PLC 控制柜 │
│ DarraRT_Eth │
└──────┬──────┘
│ EtherCAT
┌────┴────┐
│ IO 站 1 │ ← 本地从站
└────┬────┘
┌────┴────┐
│ IO 站 2 │ ← 远程从站 1
└────┬────┘
┌────┴────┐
│ IO 站 3 │ ← 远程从站 2
└─────────┘
混合拓扑
┌─────────────┐
│ PLC 控制柜 │
│ Darra PLC │
└──────┬──────┘
│
┌──────┴──────┐
│ 交换机 │
└──┬──┬──┬───┘
│ │ │
┌──┴┐ │ │ ┌──────────────┐
│Mod│ │ └──│ PROFINET 网关 │
│bus│ │ └──────┬───────┘
│IO │ │ ┌──────┴───────┐
└───┘ │ │ ET 200SP 机架 │
│ │ DI×16 DO×8 │
┌─────┴┐ └──────────────┘
│EtherCAT │
│ 菊花链 │
│ IO 站 1~4 │
└────────────┘
带宽与延迟估算
大远程 IO 网络需关注通讯带宽:
EtherCAT
总线帧率 = 1000 Hz (1 ms 周期)
每帧长度 ≈ 44 + Σ(每站数据长度) 字节
所需带宽 ≈ 帧率 × 帧长度 × 8 × 1.2 (开销)
例: 20 站, 每站 32 字节 PDO 数据
每帧 = 44 + 20 × 32 = 684 字节
带宽 = 1000 × 684 × 8 × 1.2 ≈ 6.6 Mbps
100 Mbps 以太网绰绰有余 (< 10%)
Modbus TCP
轮询周期 = 10 ms / 站 (单站, 125 寄存器一次)
20 站轮流: 周期 = 20 × 10 = 200 ms
带宽 = 20 × (帧头 12 + 数据 250) × 8 / 0.2 ≈ 210 kbps
PROFINET IO
RT Class 1 周期 = 1 ms (典型)
每站每周期 128 字节 IO 数据
10 站: 带宽 = 1000 × 10 × 128 × 8 × 1.1 ≈ 11.3 Mbps
远程 IO 扩展建议
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| 新设备 10 m 内 | 本地 EtherCAT 菊花链 | 成本最低, 实时性最高 |
| 分散 > 50 m | 远程 EtherCAT 光纤扩展 | 距离远, 需实时 |
| 已经有 Modbus 仪表 | Modbus 远程 IO 网关 | 兼容现有设备 |
| 西门子 PLC 改造 | PROFINET 远程 IO | 兼容现有 IO 模块 |
| 纯 IO 监控, 无运动 | Modbus TCP 远程 IO | 成本低, 配置简单 |
远程 IO 配置流程 (IDE 操作)
1. 添加远程站
在项目树中右键 "IO 设备" → "添加远程站":
选择协议: [EtherCAT] [Modbus] [PROFINET]
选择设备: [从模板选择] [从 ESI 导入] [从 GSDML 导入]
网络参数: [按协议填写]
IO 映射: [自动分配 / 手动分配]
2. 自动地址分配
启用自动分配, IDE 按远程站添加顺序分配连续地址:
远程站 1 (EtherCAT, 16 DI + 8 DO):
→ %IX100.0~%IX115.7, %QX100.0~%QX107.7
远程站 2 (Modbus, 32 保持寄存器):
→ %MW200~%MW231
手动分配可在自动分配基础上微调。
3. 编译验证
IDE 编译时自动检查:
- 地址空间是否重叠
- 参数是否超出范围
- 驱动是否可用
- 远程站拓扑是否可达
限制
- 远程 IO 总延迟 = 网络延迟 + 设备处理时间 + 通讯周期, 不适合要求 < 1 ms 确定性响应的安全 IO
- 远程 IO 站的断线诊断依赖于心跳/超时, 心跳间隔影响检测速度 (通常 2~3 × 心跳间隔)
- 混合拓扑需要确保交换机 QoS 配置合理, 避免 EtherCAT 帧被非实时流量阻塞
- 远程 IO 站数量受协议限制 (EtherCAT 理论 65535, Modbus 247, PROFINET 约 256)