EL6695 双向 1KB 实时通讯验证 — 进度跟踪
更新时间: 2026-07-24 12:20
硬件状态: 全部重启,EL6695 EEPROM 加载默认值
目标: 从零配置 TwinCAT + J1900,验证双向 1KB 实时数据通讯
当前阻塞: TwinCAT AmsNetId 与 EtherCAT 网卡 IP 不匹配,需要管理员权限修改
总体状态
| 阶段 |
状态 |
开始时间 |
完成时间 |
| 1. 环境检查 |
✅ 完成 |
22:47 |
12:20 |
| 2. TwinCAT 激活 |
🔶 阻塞 |
12:20 |
— |
| 3. J1900 ConfigOwner |
⬜ 未开始 |
— |
— |
| 4. Consumer 模式 |
⬜ 未开始 |
— |
— |
| 5. 1KB 数据完整性 |
⬜ 未开始 |
— |
— |
阶段 1:环境检查
| # |
步骤 |
状态 |
结果 |
| 1.1 |
检查 TwinCAT 安装 + TcSysManCmdHelper.exe |
✅ |
TcSysManCmdHelper OK (4026.0), DTE .Object 返回 null |
| 1.2 |
检查 .sln/.tsproj 完整性(PDO 已配 1024B) |
✅ |
初始空 PDO,已通过 Edit-EL6695-PdoXml.py 注入 1KB Entry |
| 1.3 |
检查 J1900 连通性(通过跳板机) |
✅ |
J1900 实际 IP 为 192.168.68.100(非 102),串口可达,el6695_rt 可运行 |
| 1.4 |
检查 EL6695 桥接器物理连接 |
✅ |
J1900 eth1 可发现 EL6695 station 0x1000,SM0/SM1 1024 字节 OK |
验证方法
# 1.1 TcSysManCmdHelper
Test-Path "C:\Program Files (x86)\Beckhoff\TwinCAT\3.1\Components\Base\TcSysManCmdHelper.exe"
# 1.2 项目文件
Test-Path "C:\Users\tonycao\work\twincat3-auto-cli\TwinCAT_EL6695_Secondary\TwinCAT_EL6695_Secondary.sln"
# 1.3 J1900 串口访问(跳板机 ttyUSB0, 115200)
# J1900 IP: 192.168.68.100, MAC: 00:e2:69:34:71:2c
# 1.4 EL6695 物理连接
/root/gateway/el6695_rt eth1 --mode probe --duration 3
# 期望: [0] Found EL6695, station 0x1000, SM0/SM1 len=1024
新发现
- J1900 实际 IP 是
192.168.68.100(DHCP 范围第一个),不是 102
- J1900 已运行
Linux 6.6.135-rt74, el6695_rt 位于 /root/gateway/el6695_rt
rustbootd 没有 DHCP 租约日志;HTTP boot 也没有访问日志
- J1900 串口(ttyUSB0)是带外访问最可靠的方式
阶段 2:TwinCAT 激活配置
| # |
步骤 |
状态 |
结果 |
| 2.1 |
通过 TcSysManCmdHelper 注入 1KB PDO Entry |
✅ |
0x1608/0x1A08 现在包含 1KB ARRAY[0..1023] OF BYTE |
| 2.2 |
TcSysManCmdHelper 激活 + 重启 (-c ActivateConfiguration,StartRestartTwinCAT) |
✅ |
Exit 0 |
| 2.3 |
确认 TwinCAT 进 OP / EL6695 在线 |
❌ |
J1900 侧仍见 0x6000[0]=1, 0x7000[0]=1,PDO assign 为空 |
阻塞根因
TwinCAT 本机 AmsNetId 与 EtherCAT 网卡 IP 不匹配:
- 注册表 AmsNetId:
169.254.176.217.1.1
- tsproj 中 Device AmsNetId:
169.254.176.217.2.1
- 实际 TwinCAT-Intel 网卡 IP:
169.254.70.104/16
TwinCAT 激活命令虽然返回 0,但无法通过错误的 AmsNetId 绑定到实际 EtherCAT 网卡,导致 EL6695 未被真正配置。J1900 侧看到的 EL6695 仍处于未配置状态(PDO assign 空,0x6000/0x7000 仅 1 字节)。
解堵方案(需要管理员权限)
运行脚本 ethercat-linux/scripts/tc-set-ethercat-ip.ps1(以管理员身份):
powershell -ExecutionPolicy Bypass -File "C:\Users\tonycao\work\ethercat-linux\scripts\tc-set-ethercat-ip.ps1"
该脚本会把 TwinCAT-Intel 网卡设为 169.254.176.217/16,与注册表 AmsNetId 匹配。然后再重新运行 tc-build-activate-local.ps1。
命令
# 1) 管理员身份设置 IP
powershell -ExecutionPolicy Bypass -File "C:\Users\tonycao\work\ethercat-linux\scripts\tc-set-ethercat-ip.ps1"
# 2) 激活 TwinCAT(已修正 target 为 169.254.176.217.1.1)
powershell -ExecutionPolicy Bypass -File "C:\Users\tonycao\work\ethercat-linux\scripts\tc-build-activate-local.ps1"
下一步(IP 修正后)
- 在 J1900 上执行
/root/gateway/el6695_rt eth1 --mode verify,确认 0x6000/0x7000 展开为 1024 字节
- 如果仍只有 1 字节,需要检查 E-bus 物理连接(EK1100 供电、TwinCAT 网卡到 EK1100 的网线)
阶段 3:J1900 ConfigOwner 验证
| # |
步骤 |
状态 |
结果 |
| 3.1 |
编译 el6695-rt (cargo build --release) |
⬜ |
|
| 3.2 |
部署到 J1900 (scp) |
⬜ |
|
| 3.3 |
运行 --mode verify(CoE 审计) |
⬜ |
|
| 3.4 |
运行 ConfigOwner ticker 30s |
⬜ |
|
| 3.5 |
检查 SAFEOP/OP + 数据循环 |
⬜ |
|
关键指标
- SAFEOP/OP 成功
- layout hash =
0xEA8257F1(35 entries × 8192 bits)
- tc_seq 单调递增
- tx_err=0, rx_err=0
- 非零字节数(目标 > 1,验证 1KB 扩展是否生效)
阶段 4:Consumer 模式验证
| # |
步骤 |
状态 |
结果 |
| 4.1 |
运行 Consumer ticker(无 INIT→PREOP) |
⬜ |
|
| 4.2 |
Consumer hash == ConfigOwner hash |
⬜ |
|
| 4.3 |
连续运行 5 分钟无错误 |
⬜ |
|
阶段 5:1KB 数据完整性验证
| # |
步骤 |
状态 |
结果 |
| 5.1 |
TwinCAT PLC 写 walking-ones pattern |
⬜ |
|
| 5.2 |
J1900 读取 + 比对全 1024 字节 |
⬜ |
|
| 5.3 |
J1900 回写 transformed pattern |
⬜ |
|
| 5.4 |
TwinCAT 验证回写数据正确 |
⬜ |
|
关键路径
TwinCAT PC (Windows)
└─ twincat3-auto-cli/TwinCAT_EL6695_Secondary/
├─ .sln / .tsproj (PDO 已配 ARRAY[0..1023] OF BYTE)
└─ Scripts/ (100+ 实验脚本)
scripts/ (新整理的基础脚本)
├─ tc-common.ps1 共享函数
├─ tc-activate.ps1 激活配置
├─ tc-configure-pdo.ps1 PDO 配置
├─ tc-verify.ps1 验证
├─ tc-scan.ps1 扫描
└─ tc-deploy.ps1 全流程
J1900 (192.168.68.102, via 192.168.58.8)
└─ /root/gateway/el6695_rt
├─ --mode verify CoE 审计
├─ --mode ticker 数据循环
├─ --consumer 消费者模式
└─ ConfigOwner 配置者模式(默认)
已知问题
| # |
问题 |
影响 |
规避方案 |
| 1 |
DTE .Object 返回 null |
无法通过 DTE 获取 SysManager |
用 TcSysManCmdHelper CLI |
| 2 |
DTE ExecuteCommand 中文命令名编码错误 |
激活配置命令无法执行 |
用 TcSysManCmdHelper CLI |
| 3 |
扫描 INIT→PREOP 擦除 PDO assign/map |
Consumer 模式 hash 总不匹配 |
Consumer 做幂等写入 |
| 4 |
0x6000:01 只有 1 字节(除非 TwinCAT 扩展) |
只有 1 字节数据转发 |
需 TwinCAT 激活后不断电 |
| 5 |
0x1C10/0x1C11 写入损坏 CoE |
0x7000 对象消失 |
SDO 白名单已实施 |
修订历史