- twin_layout_blob_sized generalized: multi-entry TwinCAT line format (1 real @240bit + N continuation + remainder entry); 1024B path kept byte-identical; 800B = 27 entries verified on hardware - 800B constants (PAYLOAD/SM 800), deployed as el6695_rt_800b - 10-min + 5h stability runs: 18M cycles, zero errors, zero mismatches, PLC nMismatch frozen over the whole run (monitor_5h.csv evidence) - docs: 800B plan/design/verification/test-report chapters, jitter analysis (NFS rootfs stall primary cause), D2000 dev plan - scripts: 800B deploy/relink/verify, mismatch-delta, 5h monitor
123 lines
5.6 KiB
Markdown
123 lines
5.6 KiB
Markdown
# 飞腾 D2000 ↔ EL6695 ↔ TwinCAT 通讯链路 — 开发计划
|
||
|
||
> **版本**: 1.0
|
||
> **日期**: 2026-07-28
|
||
> **状态**: 待启动
|
||
> **前置成果**: J1900 链路全部方法论(8B/800B 设计、验证体系、脚本集、Rust 代码库)
|
||
|
||
---
|
||
|
||
## 1. 目标与拓扑
|
||
|
||
在现有 J1900 链路之外,新增一条**并列**通讯链路:飞腾 D2000(ARM64)经 EL6695#2 与 TwinCAT PC 实时数据交换,复用已验证的配置方法与验证体系。
|
||
|
||
```
|
||
TwinCAT PC (169.254.176.217)
|
||
│
|
||
├─ [现有链路] EK1100 → ... → EL6695#1 → J1900 (x86_64, Debian13+RT) ✅ 已验收
|
||
│
|
||
└─ [新增链路] E-bus 扩展或独立网口 → EL6695#2 → 飞腾 D2000 (aarch64) 🆕
|
||
▲
|
||
跳板机#2 网口 (SSH 管理通道)
|
||
```
|
||
|
||
### 待确认事项(启动前)
|
||
|
||
| # | 问题 | 影响 |
|
||
|---|---|---|
|
||
| Q1 | EL6695#2 挂在哪里?(现有 E-bus 末端 EL9011 前扩展,还是 TwinCAT 第二网口独立段?) | TwinCAT 工程拓扑/网卡规划 |
|
||
| Q2 | D2000 的 OS 与内核(麒麟 V10? UOS? Ubuntu? 内核版本? 是否有 PREEMPT_RT?) | RT 性能预期、移植工作量 |
|
||
| Q3 | D2000 管理通道:跳板机#2 的地址、SSH 凭据、能否免密 | 自动化部署方式 |
|
||
| Q4 | D2000 接 EL6695 的网口(板载 GbE? 独立网卡? 驱动?) | ethercrab 裸 socket 可用性 |
|
||
|
||
---
|
||
|
||
## 2. 阶段计划
|
||
|
||
### 阶段 1:环境与可达性(0.5 天)
|
||
|
||
| # | 任务 | 产出 |
|
||
|---|---|---|
|
||
| 1.1 | 经跳板机#2 SSH 到 D2000,采集:`uname -a`、`/etc/os-release`、`/proc/version`、CPU/核数、网口列表(`ip link`)、中断分布(`/proc/interrupts`) | 环境档案 |
|
||
| 1.2 | 确认 PREEMPT_RT(`uname -v` 含 rt?)、`chrt`/`mlockall` 可用性 | RT 基线判定 |
|
||
| 1.3 | 网络打通:D2000 → EL6695#2 网线;D2000 → 跳板机 管理网 | 拓扑照片/记录 |
|
||
| 1.4 | 空口探测:tcpdump/裸 socket 读 ethX,确认能收发二层帧 | 网卡可用性 |
|
||
|
||
### 阶段 2:Rust 交叉编译 aarch64(0.5 天)
|
||
|
||
| # | 任务 | 备注 |
|
||
|---|---|---|
|
||
| 2.1 | `rustup target add aarch64-unknown-linux-musl`;`cargo build --target aarch64-unknown-linux-musl --release` | ethercrab 为纯 Rust,理论上零改动;libc 裸 socket(AF_PACKET)在 aarch64 内核同样支持 |
|
||
| 2.2 | 链接器:沿用 `RUSTFLAGS="-C linker=rust-lld"`(musl 静态,免去 D2000 上 glibc 版本问题) | musl 静态二进制通吃 Kylin/UOS/Debian |
|
||
| 2.3 | 部署 scp → D2000,跑 `--mode probe`(只读扫描) | 首次上机验证 |
|
||
| 2.4 | 若 AF_PACKET 在目标内核异常,备选 `aarch64-unknown-linux-gnu` + 检查目标 glibc | 风险预案 |
|
||
|
||
### 阶段 3:EL6695 链路开通(0.5–1 天,方法全部现成)
|
||
|
||
| # | 任务 | 复用资产 |
|
||
|---|---|---|
|
||
| 3.1 | TwinCAT 侧:复制 8B 工程为 `TwinCAT_EL6695_Primary_D2000`(或在 EL6695#2 所在段新建拓扑),激活确认 SM2/SM3 | `tc-deploy-retry.ps1` 模式 |
|
||
| 3.2 | D2000 侧:`el6695_rt ethX --mode verify` CoE 审计 → ConfigOwner 到 OP | 与 J1900 完全相同的流程 |
|
||
| 3.3 | **严格遵守顺序:TwinCAT 激活时 D2000 侧空闲;先激活,后启 ticker**(800B 踩坑 F1) | 教训文档化 |
|
||
| 3.4 | ticker 8B XOR 模式联通,PLC bSync=True | `GVL_Sync` 验证体系 |
|
||
|
||
### 阶段 4:数据验证与实时性测量(0.5 天)
|
||
|
||
| # | 任务 | 判据 |
|
||
|---|---|---|
|
||
| 4.1 | 8B 逐字节验证(图案+XOR+历史环) | bSync=True,lag 稳定 |
|
||
| 4.2 | 10 分钟稳定性 | 60 万周期零错误,nMismatch 零增长 |
|
||
| 4.3 | D2000 实时性基线:周期抖动/exec/FPRD/FPWR 统计 | 与 J1900 对照(7µs 抖动基准) |
|
||
| 4.4 | 如需 800B:换 `el6695_rt_800b` 对应构建(同源码,常量切换) | 800B 工程现成 |
|
||
|
||
### 阶段 5:D2000 RT 调优(按需,0.5–1 天)
|
||
|
||
| # | 措施 | 场景 |
|
||
|---|---|---|
|
||
| 5.1 | IRQ 亲和:管理网口 IRQ 钉到非 RT 核 | 必做 |
|
||
| 5.2 | 核隔离 `isolcpus` + ticker 绑核(程序已支持 `--core`) | 推荐 |
|
||
| 5.3 | 若无 RT 补丁且抖动不可接受:评估编译 aarch64 PREEMPT_RT 内核(源码 kernel.org + rt patch,交叉编译) | 兜底 |
|
||
| 5.4 | 抖动向因分析:hwlatdetect/cyclictest 对照 | 诊断工具 |
|
||
|
||
### 阶段 6:文档与归档(0.5 天)
|
||
|
||
- 新增 `docs/d2000-bringup.md`(环境档案、移植记录、与 J1900 的性能对照)
|
||
- 更新三份主文档的适用范围章节;git 提交
|
||
|
||
---
|
||
|
||
## 3. 复用率评估
|
||
|
||
| 资产 | 复用程度 |
|
||
|---|---|
|
||
| el6695_rt 源码(main.rs/bridge.rs) | ~100%(唯一改动:默认网口名/可能的字节序检查——ARM 与 x86 同小端,无影响) |
|
||
| TwinCAT 工程与 PLC 验证程序 | 100%(复制副本改拓扑) |
|
||
| 部署/诊断/监视脚本(20+ 个) | ~90%(J1900 地址替换为 D2000 地址) |
|
||
| 配置方法论(SM/PDO/blob/链接/激活顺序) | 100% |
|
||
|
||
## 4. 风险登记
|
||
|
||
| # | 风险 | 概率 | 缓解 |
|
||
|---|---|---|---|
|
||
| R1 | D2000 OS 无 PREEMPT_RT,抖动大(几十~几百 µs) | 高 | 阶段 5.3 自编译 RT 内核;或先测后判,1kHz 场景通常可接受 |
|
||
| R2 | 麒麟/UOS 老内核(4.19)与 ethercrab 兼容性 | 低 | musl 静态;AF_PACKET 自 2.2 内核即有 |
|
||
| R3 | D2000 网口驱动不支持混杂/裸包或性能差 | 低 | 阶段 1.4 提前探测;备 USB 网卡 |
|
||
| R4 | 跳板机#2 到 D2000 的 SSH 不稳定 | 中 | 串口兜底;长会话用 nohup+日志(既有模式) |
|
||
| R5 | 双链路并存时 TwinCAT 两张网卡/两段总线资源冲突 | 低 | Q1 拓扑确认后评审 |
|
||
|
||
## 5. 里程碑
|
||
|
||
| 里程碑 | 判据 |
|
||
|---|---|
|
||
| M1 | D2000 SSH 通,环境档案完成(Q1–Q4 全部答案) |
|
||
| M2 | aarch64 二进制在 D2000 上 `--mode probe` 发现 EL6695 |
|
||
| M3 | 链路 OP,8B bSync=True |
|
||
| M4 | 10 分钟零错误 + 抖动基线报告 |
|
||
| M5 | 文档归档 + git 提交 |
|
||
|
||
## 6. 修订历史
|
||
|
||
| 日期 | 内容 |
|
||
|---|---|
|
||
| 2026-07-28 | 初版计划 |
|