# EL6695 端到端 500µs 延迟优化 — 计划文档 > **版本**: 1.0 > **日期**: 2026-07-27 > **状态**: 待执行 > **前置文档**: `8b-bridge-design.md`、`8b-verification-methodology.md`、`8b-test-report.md` --- ## 1. 目标 | 目标 | 定义 | 优先级 | |---|---|---| | G1(主目标) | **单向**端到端延迟 ≤ 500µs(TwinCAT 写出 → J1900 可读,或 J1900 写出 → TwinCAT 可读) | 必须 | | G2(Stretch) | **往返**延迟(aOut1 变化 → aIn1 可见对应回传)≤ 500µs | 力争 | 验收方式与 8B 验证体系一致:逐字节图案 + 历史环匹配测延迟(`nMatchLag` 换算为 µs)+ J1900 周期统计 + 连续 10 分钟零错误。 --- ## 2. 现状基线(实测) 当前两侧均为 1kHz 自由运行(未同步),RTT 恒为 4 个 PLC 周期(≈4ms),单向 ≈2ms。 | 构成 | 实测值 | 性质 | 可压缩性 | |---|---|---|---| | TwinCAT 任务量化(PLC 写 → 帧发出) | ≤1000µs | 调度 | 提频 / DC 锁相 | | EtherCAT 帧传输(9 端子, 8B) | ~15µs | 硬件 | 不可压缩(下限) | | EL6695 桥内部转发 | 微秒级(推定) | 固件 | 待实测确认 | | J1900 采样量化(自由 ticker) | ≤1000µs | 调度 | 提频 / DC 锁相 | | J1900 处理(exec) | 313µs 均值 / 359µs 峰值 | 软件+事务 | 优化写路径 | | ├ FPRD(读 SM) | 71µs 均值 / 84µs p99 | | | | └ FPWR(写 SM) | **242µs 均值 / 246µs p99** | | **主要瓶颈** | | 返回路径量化 | ≤1000µs | 调度 | 提频 / DC 锁相 | **关键结论**: 4ms 中约 3ms 是两侧 1kHz 自由运行的相位量化,~0.3ms 是 J1900 写事务,硬件传输仅 ~15µs 级。延迟优化的本质是**消除量化 + 压缩 J1900 写耗时**。 --- ## 3. 阶段计划 ### 阶段 0:精确测量现状分解(0.5 天) | # | 任务 | 方法 | 产出 | |---|---|---|---| | 0.1 | 测量桥纯转发延迟 | J1900 侧环回测试(`ecat_el6695_loopback_test` 已有)或对同一字节做"写后立即读"测 DPRAM 镜像时间 | 桥转发延迟(预期 <50µs) | | 0.2 | 定位 FPWR 242µs 根因 | 对比 FPRD/FPWR 在不同 payload(8B/64B/1KB)下的耗时;检查 ethercrab PDU 等待逻辑;逻辑分析仪或帧时间戳 | 结论:固件写处理慢 vs 软件等待方式 | | 0.3 | J1900 高频空跑 | ticker 以 2kHz/4kHz/10kHz 空跑(不读写),测周期抖动与 CPU 占用 | J1900 可达到的稳定频率上限 | **决策点 D0**: 若 FPWR 是固件特性(写路径必慢),则单向 J1900→TwinCAT 方向延迟受此下限约束,G1 双向需重新评估;若可用 LRW 合并读写(exec → ~100µs),进入阶段 1。 ### 阶段 1:J1900 写路径优化(1 天) | # | 任务 | 预期收益 | |---|---|---| | 1.1 | 试验 LRW(单帧逻辑读写)替代 FPRD+FPWR,利用已有 `ecat_el6695_mem_reflect_lrw` 程序验证 | exec 313µs → ~150µs | | 1.2 | 若 LRW 不可用:FPWR 异步化(发出不等响应,下周期校验 WKC) | exec → ~120µs | | 1.3 | RT 调优复核:核隔离、IRQ 亲和、禁用 eth1 节能 | 抖动 7µs → <5µs | **验收**: 1kHz 下 exec p99 < 200µs,10 分钟零错误。 ### 阶段 2:双侧提频(0.5 天) | # | 任务 | 备注 | |---|---|---| | 2.1 | TwinCAT PlcTask 周期 1000µs → 500µs(2kHz) | XAE 直接改;确认 TcRTime 在该硬件支持 500µs 基频 | | 2.2 | J1900 ticker `--cycle 250`(4kHz) | 需阶段 1 完成(exec < 250µs) | | 2.3 | PLC 历史环匹配窗口适配新周期(16 槽仍覆盖 4ms) | 仅改注释/常量 | **预期延迟**: RTT 4 阶段 × 250µs = 1ms;单向 ≈ 500µs(G1 达标,余量小)。 **风险**: 自由运行相位最差时单向可能到 750µs → 需要阶段 3。 ### 阶段 3:DC 分布式时钟同步(1–2 天) | # | 任务 | 备注 | |---|---|---| | 3.1 | TwinCAT 侧启用 EL6695 DC(SYNC0),设为参考时钟或跟随现有 DC 主 | 参考工程 `TwinCATProject1_DC_Reference` 已有 DC 配置可借用 | | 3.2 | J1900 读取 EL6695 DC 系统时间,ticker 锁相 SYNC0(ethercrab 支持 DC 读;或轮询 0x0910 寄存器对齐) | 消除 J1900 采样量化 | | 3.3 | 相位标定:调整 J1900 唤醒相位,使"帧到达 → 立即处理 → 帧返回前写回"在单周期内完成 | 目标:单向 = 帧传输 + 桥转发 + exec ≈ 200–300µs | **预期延迟(2kHz + DC)**: - 单向: ~200–350µs ✅ G1 有余量 - 往返: ~500–700µs,G2 边缘 ### 阶段 4:G2 冲刺(可选,视阶段 3 结果) 仅当 G2 明确需要时:两侧 4kHz(250µs 周期)+ DC + exec < 150µs。往返 = 帧 + 桥 + exec + 帧 ≈ 400–500µs。余量极小,需 EL6695 固件最小周期(待阶段 0 实测)允许 250µs。 ### 阶段 5:验证与文档(0.5 天) - 按 `8b-verification-methodology.md` 体系做 10 分钟连续验证(逐字节图案 + lag 测量); - 更新设计/验证/测试三份文档,新增延迟分解表; - git 提交。 --- ## 4. 里程碑与决策点 | 里程碑 | 判据 | 决策 | |---|---|---| | D0(阶段 0 末) | FPWR 根因明确 | 固件瓶颈→重谈目标;软件可优化→继续 | | M1(阶段 1 末) | exec p99 < 200µs | 不达标→LRW/异步化二选一深挖 | | M2(阶段 2 末) | 2kHz 稳定,单向 ≈500µs | G1 名义达标 | | M3(阶段 3 末) | DC 锁相,单向 <350µs | G1 稳妥达标;评估是否冲 G2 | | M4(阶段 5 末) | 10 分钟零错误 + 文档提交 | 收尾 | --- ## 5. 风险登记 | # | 风险 | 概率 | 影响 | 缓解 | |---|---|---|---|---| | R1 | EL6695 固件最小周期 > 250µs,无法 4kHz | 中 | G2 不可达 | 阶段 0 实测;G1 不受影响 | | R2 | FPWR 慢是固件特性 | 中 | J1900→TwinCAT 方向下限 ~250µs | LRW 合并;或接受单向非对称 | | R3 | TcRTime 在 500µs 基频下抖动大 | 低 | 量化消除不彻底 | 实测 TwinCAT 任务抖动;必要时 1kHz+DC | | R4 | ethercrab 不支持 DC 时间读取/锁相 | 低 | 阶段 3 受阻 | 轮询 DC 寄存器 0x0910 软件锁相 | | R5 | 提频后 E-bus 上其他端子(EL6851/EL6022 串口模块)不支持 | 中 | 2kHz 激活失败 | 串口模块 PDO 移出高速任务或降低其更新率 | --- ## 6. 资源与依赖 - 硬件现状即可,无需新增; - 依赖阶段 0 的三个测量结论再细化后续工时; - J1900 已有实验程序可复用:`ecat_el6695_loopback_test`、`ecat_el6695_mem_reflect_lrw`、`ecat_el6695_mem_reflect_dc`; - TwinCAT 侧 DC 配置参考: `C:\Users\tonycao\work\free\TwinCATProject1_DC_Reference`。 ## 7. 修订历史 | 日期 | 内容 | |---|---| | 2026-07-27 | 初版计划 |