跳到主要内容

网络诊断

概述

DarraRT 在网络层面涉及四种协议:

  • EtherCAT (实时, Layer 2 Raw Ethernet, 强时序要求)
  • TCP (SDK / IDE ↔ Service 管理通道)
  • UDP / KCP (自研轻量远程控制)
  • Modbus TCP (第三方互通)

每种协议的故障特征不同, 排查工具和判定准则也不同。本文档按协议逐一展开, 重点在 EtherCAT — 因为 PLC + 机器人产品完全依赖 EtherCAT 实时总线, 一条链路异常就会导致整条产线停机。

适用场景

  • 主站从 Init 无法迁移到 OP
  • OP 状态下 WKC (Working Counter) 错误
  • DC (Distributed Clock) 同步抖动
  • PDO 丢帧 / 帧率偏离
  • TCP 超时 / Modbus 连接被拒
  • NDIS 网卡绑定异常

前置条件与工具

工具用途
Darra_EtherCAT_Master/debug_info.txt主站调试日志
Wireshark + Npcap/WinPcap抓包 (ECAT 解析器)
netstat -e / Get-NetAdapterStatisticsNIC 统计
netsh interface show interface绑定状态
Test-NetConnection (PowerShell)TCP 连通性
ping / pathping / tracert基础连通
EtherCAT 拓扑视图 (IDE 内置)物理拓扑

EtherCAT 诊断

协议栈特性

EtherCAT 使用 EtherType 0x88A4 直接在 Layer 2 运行, 不使用 IP。 这意味着:

  • ping 无效 (没有 IP)
  • 路由器/交换机透传不保证时序 (应使用 EtherCAT 专用交换或直连)
  • 抓包需要 Wireshark 安装 ECAT 解析插件

总线状态机

状态名称典型停留时间说明
Init初始化启动后 <1s主站发现从站, 加载身份
PreOP预运行<2s邮箱通信 (SDO) 可用, PDO 不通
SafeOP安全运行<2sPDO 输入可读, 输出冻结为安全值
OP运行稳定态完整 PDO 交换, 正常生产

步骤 1: 查看 debug_info.txt

Get-Content "Darra_EtherCAT_Master\debug_info.txt" -Tail 500 |
Select-String -Pattern "\[ECAT\]"

预期输出 (正常):

[ECAT] EnumSlaves = 32
[ECAT] SII check OK, 32/32
[ECAT] FMMU/SM config OK
[ECAT] State Init -> PreOP : 980 ms, WKC=32
[ECAT] State PreOP -> SafeOP : 1240 ms, WKC=32
[ECAT] State SafeOP -> OP : 350 ms, WKC=32
[ECAT] OP stable, cycle=1ms, jitter p99=12μs

异常输出:

[ECAT] EnumSlaves = 31  <-- 实际少了一个从站
[ECAT] SII check FAIL at slave index 17, VendorID mismatch
[ECAT] State Init -> PreOP : TIMEOUT after 3000 ms, WKC=30

判定规则: EnumSlaves 实际值与 ENI 配置不一致 → 有从站掉线 or 被上一台站吃掉数据帧 → 进入步骤 2 物理排查。

步骤 2: 物理拓扑检查

IDE 中打开 拓扑视图:

IDE → EtherCAT → 拓扑视图

每个从站的端口用颜色标示:

  • 绿色 = Open (有帧经过)
  • 黄色 = Closed (端口未使能)
  • 红色 = LinkLost (线缆异常)

判定规则:

  • 末站出现红色端口是正常 (不接东西就是红)
  • 中间站出现红色端口 → 物理断链, 该站之后的从站全部掉线
  • 末站 前一段红色 → 该站是"末尾", 前面线缆 OK

步骤 3: Wireshark 抓包

1. 打开 Wireshark, 选 EtherCAT 专用网卡
2. 过滤表达式: ecat
3. 复现故障, 抓 10~30 秒
4. 统计 → Protocol Hierarchy → 看 EtherCAT 占比

关键观察:

字段正常异常判定
帧率1000 帧/s (1ms 周期)< 999 或 > 1001调度异常
WKC配置值偏小有从站未应答
LRW / LRD / LWR按 ENI 配置类型错主站 bug
帧长PDO Size ± 14 头过短被截断

步骤 4: WKC 深度分析

WKC (Working Counter) = 从站读或写 PDO 的累计计数, 主站每周期验证。

现象根因
WKC 恒小于配置值 1某从站永不应答 (掉线)
WKC 偶发小于配置值线缆 CRC 错误, 帧被丢
WKC 大于配置值主站 ENI 错误, 少算了一个从站
WKC = 0主站帧从未离开网卡

步骤 5: DC 同步检查

Distributed Clock (分布式时钟) 保证所有从站 SYNC0 中断同时触发, 精度要求 < 1μs。

IDE → EtherCAT → DC 同步监视
· 参考时钟从站: Slave[0] (ET1100)
· 补偿偏移: ±XX ns
· 漂移率: ±X ppm

判定规则:

  • 偏移在 ±100ns 内 → DC 锁定良好
  • 偏移持续 > 500ns → 参考从站时钟不稳, 或温度剧烈变化
  • 漂移率 > 50 ppm → 换参考从站 (优先选温度稳定的)

TCP 诊断

常见场景

IDE ↔ Service 通讯、SDK 客户端 ↔ Service、Modbus TCP 客户端 ↔ Service。

步骤 1: 连通性

# 测试 Service 管理端口
Test-NetConnection -ComputerName 127.0.0.1 -Port 8848

# 输出示例
# TcpTestSucceeded : True
# PingSucceeded : True
# Latency (ms) : 1

步骤 2: 端口占用

# 谁在占 8848
Get-NetTCPConnection -LocalPort 8848 | Select-Object State, OwningProcess
Get-Process -Id <pid>

判定规则: 若非 Darra.PLC.Service.exe 占用 → 有冲突, 杀占用者或改端口。

步骤 3: 延迟/丢包

pathping -q 10 -n 192.168.1.10

判定规则: 工控内网任意两点延迟应 < 1ms, 丢包率 = 0%。若异常, 走 L1/L2 排查 (交换机链路灯 / 线缆)。

UDP / KCP 诊断

步骤 1: 端口与 MTU

# 查看网卡 MTU
Get-NetAdapterAdvancedProperty -Name "以太网" -DisplayName "*Jumbo*"

KCP 默认使用 1400 字节包, 大于 MTU 会被分片, 建议配置交换机 MTU = 9000 (Jumbo Frame)。

步骤 2: 丢包率

KCP 层面内置丢包重传统计:

IDE → 诊断 → 网络 → KCP 连接 → 详细
· 发送: 1 234 567 包
· 重传: 123 包 (0.01%)
· RTT: 平均 2ms / 最大 15ms

判定规则: 重传率 > 1% → 排查物理链路或主机负载。

Modbus TCP 诊断

步骤 1: Function Code 支持

Modbus 设备常用 FC:

  • 0x03 Read Holding Register
  • 0x04 Read Input Register
  • 0x06 Write Single Register
  • 0x10 Write Multiple Register

常见错误:

  • Exception 0x01 Illegal Function → 设备不支持该 FC
  • Exception 0x02 Illegal Address → 地址越界
  • Exception 0x03 Illegal Data → 数据范围错
  • Exception 0x04 Slave Device Failure → 设备内部错误
  • Timeout → 网络或设备未响应

步骤 2: 抓包验证

Wireshark 过滤 tcp.port == 502, 观察请求/响应:

Client  -> Server  : Transaction=0001 Unit=01 FC=03 Addr=0000 Qty=0010
Server -> Client : Transaction=0001 Unit=01 FC=03 ByteCount=20 Data=...

NDIS 绑定核查

DarraRT EtherCAT 网卡上应只绑定 DarraRT_Eth 协议, 其他协议全部解绑。

步骤 1: 查看绑定

# 查看指定网卡的绑定
Get-NetAdapterBinding -Name "EtherCAT"

# 预期
# DisplayName Enabled
# --------- -------
# DarraRT_Eth Protocol True
# Internet Protocol Version 4 (TCP/IPv4) False
# Internet Protocol Version 6 (TCP/IPv6) False
# Link-Layer Topology Discovery Mapper I/O Driver False
# ...

步骤 2: 关闭多余协议

Disable-NetAdapterBinding -Name "EtherCAT" -ComponentID ms_tcpip
Disable-NetAdapterBinding -Name "EtherCAT" -ComponentID ms_tcpip6
Disable-NetAdapterBinding -Name "EtherCAT" -ComponentID ms_lltdio
Disable-NetAdapterBinding -Name "EtherCAT" -ComponentID ms_rspndr

判定规则: 绑定项越少 → 实时性越好, ECAT 帧处理路径越短。

异常模式速查表

现象根因定位方法解决
Init 无法到 PreOP从站数量不匹配 / ENI 错debug_info.txt EnumSlaves重新生成 ENI
PreOP 无法到 SafeOPSM/FMMU 配置错看 SDO 返回的 AbortCode对照 ESI 修正
SafeOP 无法到 OPDC 未锁定 / PDO 长度不符DC 偏移 / PDO 映射调整周期或 PDO 映射
OP 后 WKC 偶尔少 1线缆 CRCWireshark 看 CRC 错误帧换线 / 端接
OP 后 WKC 恒少 1某从站掉线拓扑视图找红色端口检查物理
周期抖动 > 100μsNDIS 中断亲和错看 ISR 核绑定到隔离核
TCP 超时防火墙 / 端口错Test-NetConnection开白名单
Modbus Exception 02寄存器越界Wireshark Modbus 解析对照设备手册
UDP 分片MTU 不匹配ping -f -l 1472开 Jumbo 或降 KCP 包
网卡错误计数 > 0物理层Get-NetAdapterStatistics换线/换网卡

高级技巧

  • ECAT Capture Filter: Wireshark 用 ether proto 0x88a4 降到网卡层直接过滤, CPU 占用远低于全量抓包。
  • 双网卡冗余: DarraRT 支持 Main + Redundant 双网卡, 一条断线 ≤ 250μs 切换, 抓包时注意分别抓两张网卡。
  • 从站一致性校验: IDE 每次连接时自动对比 SII (EEPROM) 与 ENI 的 VendorID/ProductCode, 不一致会在 debug_info.txtSII check FAIL
  • NDIS 版本定位: DarraRT_Eth.sys 使用 NDIS 6.50, 在 Windows 10 之前版本 OS 上会 加载失败, 看驱动层日志 NDIS_VERSION_MISMATCH

相关文档

EtherCAT 拓扑视图