- Fix SM ctrl bytes for SM2 (0x64) and SM3 (0x20) per ESI - Add SM2/SM3 register config + FMMU + PDO assignment via SDO - Change SM_TX_ADDR/RX_ADDR to SM2(0x1C00)/SM3(0x8E00) - Add ensure_od_secondary for PDO assignment - Add secondary-side diagnostics (CoE object probe) - Update SM2/SM3 enable/disable sequence for clean config - Add full bring-up sequence: INIT->PREOP->SAFEOP->OP
133 lines
4.2 KiB
Markdown
133 lines
4.2 KiB
Markdown
# EL6695 1 kHz 通讯验证实施进度
|
||
|
||
- 创建日期:2026-07-22
|
||
- 当前状态:**TwinCAT 待切回 Run,PLC 波形逻辑已部署**
|
||
- 关联文档:`docs/scope-waveform-design.md`
|
||
|
||
---
|
||
|
||
## 1. 目标
|
||
|
||
在 TwinCAT Scope View 中直观观测 J1900 ↔ TwinCAT(经 EL6695 桥)1 kHz 通讯的周期与抖动,并验证其稳定性。
|
||
|
||
---
|
||
|
||
## 2. 已完成
|
||
|
||
### 2.1 J1900 侧(`src/main.rs`)
|
||
|
||
- 在回显帧 `tx_buf` 的 **[264..272]** 追加诊断字段:
|
||
- `tx_buf[264..268]`:`jitter_ns`(i32 LE)—— el6695_rt 内部 PLL/唤醒抖动
|
||
- `tx_buf[268..272]`:`last_phase_err_ns`(i32 LE)—— 与 TwinCAT DC 网格的相位误差
|
||
- 已在 J1900 上构建并部署到 `/root/gateway/el6695_rt`
|
||
- 协议兼容性:诊断区位于图案校验区 [16..255] 之后、时间戳 [256..263] 之后,不触发 PLC 的 `nMismatch`
|
||
|
||
### 2.2 TwinCAT PLC 侧(`free/TwinCATProject1/PlcSync`)
|
||
|
||
`GVL_Sync.TcGVL` 新增变量:
|
||
|
||
| 变量 | 类型 | 含义 |
|
||
|---|---|---|
|
||
| `nRttUs` | `DINT` | 端到端往返时间(µs) |
|
||
| `nInSeqDelta` | `DINT` | `nReturnedSeq` 周期差分 |
|
||
| `nJ1900Delta` | `DINT` | `nJ1900Cycle` 周期差分 |
|
||
| `nJ1900JitterNs` | `DINT` | J1900 自测抖动(ns) |
|
||
| `nJ1900PhaseErrNs` | `DINT` | J1900 相位误差(ns) |
|
||
| `nPrevRetSeq` | `ULINT` | 差分寄存器 |
|
||
| `nPrevJ1900` | `ULINT` | 差分寄存器 |
|
||
|
||
`MAIN.TcPOU` 末尾追加:
|
||
|
||
- 通道 1:`nRttUs = (nEchoTimestamp - nSendTimestamp) / 10`
|
||
- 通道 2/3:两个序列号的周期差分
|
||
- 通道 4/5:两条 `MEMCPY` 从 `aIn1[264..271]` 拷贝到 DINT
|
||
|
||
### 2.3 TwinCAT 工程激活
|
||
|
||
- 运行 `free/rt-activate2.ps1`
|
||
- `ActivateConfiguration()` 返回成功
|
||
- 但后续系统进入 **Config** 模式,未自动进入 Run
|
||
|
||
---
|
||
|
||
## 3. 当前阻塞
|
||
|
||
**TwinCAT 系统服务停留在 Config 模式,PLC 端口 851 未启动。**
|
||
|
||
验证命令:
|
||
|
||
```powershell
|
||
powershell -ExecutionPolicy Bypass -File C:\Users\tonycao\work\free\ads-state.ps1
|
||
```
|
||
|
||
输出:
|
||
|
||
```text
|
||
port10000: ads=Config device=1
|
||
port851 err: Target port could not be found. (AdsErrorCode: 6, 0x6)
|
||
```
|
||
|
||
已尝试但未成功的方法:
|
||
|
||
- `ads-set-run.ps1`:`WriteControl` 重载问题失败
|
||
- 直接 `TcAdsClient.WriteControl([AdsState]::Run)`:状态仍为 Config
|
||
- `rt-activate2.ps1` 中的 `StartRestartTwinCAT()`:进入 Config 后未切 Run
|
||
|
||
---
|
||
|
||
## 4. 下一步
|
||
|
||
1. **切 TwinCAT 到 Run 模式**
|
||
- 首选:`free/switch-to-run.ps1`(通过 DTE/COM 打开工程后调用 `StartRestartTwinCAT` 并轮询)
|
||
- 备选:`free/activate-and-run.ps1`(完整流程:ActivateConfiguration + StartRestartTwinCAT + 轮询)
|
||
- 最坏情况:若 ADS/DTE 均无法切 Run,考虑重启 Windows 后再试
|
||
|
||
2. **确认端口 851 可达**
|
||
- `ads-state.ps1` 应输出 `port10000: ads=Run` 且 `port851: ads=Run`
|
||
|
||
3. **启动 J1900 侧**
|
||
|
||
```bash
|
||
ssh root@<j1900-ip> /root/gateway/el6695_rt eth1 --mode follow --duration 120
|
||
```
|
||
|
||
4. **运行波形快照验证**
|
||
|
||
```powershell
|
||
powershell -ExecutionPolicy Bypass -File C:\Users\tonycao\work\free\ads-waveform-snapshot.ps1
|
||
```
|
||
|
||
预期值:
|
||
|
||
| 字段 | 预期 |
|
||
|---|---|
|
||
| `nRttUs` | ≈ 4000 µs |
|
||
| `nInSeqDelta` | 1 |
|
||
| `nJ1900Delta` | 1 |
|
||
| `nJ1900JitterNs` | < 1 µs(follow 模式锁定后) |
|
||
| `nJ1900PhaseErrNs` | 稳定在某一直流值(约 165 µs) |
|
||
|
||
5. **在 TwinCAT Scope View 中添加 YT Chart**
|
||
- 数据源:ADS 符号
|
||
- 通道:上述 5 个变量
|
||
- 采样率:挂到 PLC 任务 1 kHz
|
||
|
||
6. **提交 git**
|
||
- 当前 `src/main.rs` 有未提交修改
|
||
- 提交信息:`feat: add jitter/phase_err diagnostics for TwinCAT Scope waveform`
|
||
|
||
---
|
||
|
||
## 5. 相关文件
|
||
|
||
- `C:/Users/tonycao/work/ethercat-linux/src/main.rs`
|
||
- `C:/Users/tonycao/work/ethercat-linux/docs/scope-waveform-design.md`
|
||
- `C:/Users/tonycao/work/ethercat-linux/docs/verification-progress.md`
|
||
- `C:/Users/tonycao/work/free/TwinCATProject1/PlcSync/GVLs/GVL_Sync.TcGVL`
|
||
- `C:/Users/tonycao/work/free/TwinCATProject1/PlcSync/POUs/MAIN.TcPOU`
|
||
- `C:/Users/tonycao/work/free/rt-activate2.ps1`
|
||
- `C:/Users/tonycao/work/free/ads-state.ps1`
|
||
- `C:/Users/tonycao/work/free/ads-waveform-snapshot.ps1`
|
||
- `C:/Users/tonycao/work/free/switch-to-run.ps1`
|
||
- `C:/Users/tonycao/work/free/activate-and-run.ps1`
|