跳到主要内容

PLC 诊断

DarraRT PLC 提供一页式诊断仪表板, 集中展示运行时的健康状态: 任务扫描 / 内存使用 / 堆栈深度 / IO 映像表 / 通讯质量 / 驱动状态 / 持久化校验。不需要打开多个窗口, 一眼看完 PLC 整体状态。

截图: EtherCAT 拓扑图

仪表板概览

Ribbon → 诊断PLC 健康仪表板, 布局如下:

┌─ PLC 健康 ─────────────────────────────────────────────────┐
│ │
│ [任务扫描] [内存使用] [通讯质量] [驱动状态] │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ OB1 7ms │ │ M: 15% │ │ 正常 │ │ 运行中 │ │
│ │ OB30 0.9│ │ RET: 3% │ │ WKC=24 │ │ ISO=OK │ │
│ │ OB35 85μ│ │ PER: 1% │ │ Jitter 1│ │ SMI=OK │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ [IO 映像表] [堆栈深度] [持久化校验] [系统信息] │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ I: 420B │ │ 65% │ │ CRC=OK │ │ 温度 52 │ │
│ │ Q: 320B │ │ 最大 8层│ │ 电池 OK │ │ 电压 24 │ │
│ │ D: 32KB │ │ 0 溢出 │ │ 上次成功│ │ 风扇 OK │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ [趋势: CPU 与内存 (最近 1 小时)] │
│ 100% ┤ │
│ 80% ┤ ╱‾‾‾╲ │
│ 60% ┤╱ ‾─╲ │
│ 40% ┤ ‾‾‾‾‾─── CPU │
│ 20% ┤━━━━━━━━━━━━━━━━━━── MEM │
│ └────────────────────────────────────────── │
└────────────────────────────────────────────────────────────┘

截图: PLC 诊断仪表板

面板 1: 任务扫描健康

显示每个 OB 的实时统计:

说明
OB组织块编号 (OB1, OB30, OB35 ...)
Name绑定的 POU 名
Period配置周期
Curr最近一次执行耗时
Min历史最短
Avg滑动平均 (1000 周期)
Max历史最长
Jitter抖动 (Max - Min)
WD %看门狗使用率 (Curr / MaxCycleTime)
Overrun累计超时次数
Priority优先级
State运行 / 暂停 / 错误

颜色编码:

值域颜色
WD% < 30%绿 (健康)
WD% 30% ~ 70%黄 (注意)
WD% 70% ~ 100%橙 (警告)
WD% ≥ 100%红 (超时已触发 OB80)

任务抖动分析

双击任意 OB → 弹出抖动直方图:

μs
40┤ ▁
30┤ ▂▄
20┤ ▁▆█▆▂
10┤ ▂▃█████▇▃▁
0┤ ▁▂▄▆▇████████████▇▆▄▂▁
└──────────────────────
-20 -10 0 +10 +20
偏离平均 (μs)

正态分布 = 健康, 长尾 / 双峰 = 存在干扰源 (如 SMI / DPC)。

面板 2: 内存使用

所有内存区占用:

已用总量占比峰值
I 区420 B8 KB5.1%420 B
Q 区320 B8 KB3.9%320 B
M 区9.8 KB64 KB15.3%12.4 KB
D 区32 KB1 MB3.2%45 KB
V 区 (自动)128 KB156 KB
RETAIN128 B16 KB0.8%128 B
PERSISTENT32 B4 KB0.8%32 B
堆栈6.5 KB64 KB10.1%8.2 KB
代码段512 KB4 MB12.5%

趋势子图显示过去 1 小时的内存变化, 发现内存泄漏 (持续增长)。

面板 3: 通讯质量

每个通讯接口的指标:

EtherCAT

指标健康
主站状态OP绿
从站数量24 (24 OP)绿
WKC 期望48
WKC 实际48绿
周期丢帧0 / 10000绿
周期抖动±1μs绿
冗余链路主 OK, 备 OK绿
最后错误(无)

Modbus TCP

从站 IP状态响应时间成功率
192.168.1.10在线2.5ms100.0%
192.168.1.11在线3.1ms99.8%
192.168.1.12离线

OPC UA

会话客户端订阅数数据率
1HMI_SCADA1521.2 KB/s
2MES_Client480.3 KB/s

面板 4: 驱动状态

DarraRT.sys / DarraRT_Eth.sys / DarraRT_PLC.sys 三个内核驱动:

驱动状态版本核心隔离SMI 干扰
DarraRT.sys运行1.2.3核 4,5 已隔离0 次
DarraRT_Eth.sys运行1.2.3
DarraRT_PLC.sys运行1.2.3

故障诊断:

  • 核心隔离失效: 隔离的核被 Windows 占用 → BIOS 设置有问题
  • SMI 干扰 > 0: BIOS 产生了 System Management Interrupt → 禁用 BIOS 电源管理
  • 驱动版本不一致: 三个驱动版本号必须完全一致

面板 5: IO 映像表状态

实时显示 IO 映像表的完整性时效性:

指标
I 区最后刷新0.123 ms 前
Q 区最后下发0.087 ms 前
I 区 CRC0x8F3A (每周期变化)
Q 区 CRC0x2B6E
未映射字节0 (所有配置的 IO 都有数据)
强制数量3

未映射字节 > 0 = 配置了 IO 模块但物理上未连接 → IO 组态错误。

面板 6: 堆栈深度

监控每个任务的调用堆栈深度, 防止栈溢出:

OB当前深度最大深度上限使用率
OB1383225%
OB30253215.6%
OB3512326.3%

栈溢出 = OB121 触发, 日志记录触发 POU。建议保持使用率 < 50%。

面板 7: 持久化校验

RETAIN / PERSISTENT 区的完整性:

指标
RETAIN CRC正确
RETAIN 上次写入2026-04-18 14:32:05
PERSISTENT CRC正确
PERSISTENT 上次写入2026-04-17 09:15:42
NVRAM 电池3.02V (标准 3.0V, 健康)
NVRAM 写入次数15234 / 100000 (寿命 85%)

CRC 不匹配 → 非正常断电导致数据损坏 → 自动触发冷启动 OB100, 部分变量丢失。

面板 8: 系统信息

PLC 硬件状态:

主板温度52 °C
CPU 温度58 °C
供电电压24.12 V
风扇 1 转速3600 rpm
风扇 2 转速3550 rpm
运行时间162 天 14 小时
重启次数3 (本月)
最近重启原因计划维护

历史趋势

仪表板底部是 1 小时滚动趋势:

  • CPU 占用率
  • 内存占用率
  • 任务平均扫描时间
  • 通讯丢帧率
  • 主板温度

点击图例可切换显示/隐藏曲线, 光标显示具体时刻值。

告警集成

诊断面板的指标自动转化为报警:

指标阈值等级
CPU 占用 > 85% 持续 1 分钟WarnA900
扫描超时 OB80 触发ErrorA901
内存占用 > 90%ErrorA902
通讯丢帧率 > 1%WarnA903
主板温度 > 75°CErrorA904
NVRAM 电池 < 2.5VWarnA905
驱动核心隔离失效FatalA910

导出诊断报告

点击 诊断 → 导出报告, 一键打包:

  • 当前所有面板截图
  • 最近 24 小时的完整历史
  • 系统日志
  • 编译信息 + 固件版本
  • 配置文件

生成 DarraPLC_Diagnostic_YYYYMMDD_HHMMSS.zip, 用于:

  • 报请厂家支持
  • 长期问题归档
  • 跨团队协作

排错表

指标异常可能原因解决
CPU 占用高OB1 负载重 / 有死循环Performance 分析找热点
内存持续增长泄漏 (字符串累积等)审查代码 FOR 循环中的字符串操作
抖动大核心未隔离 / SMI 干扰检查 BIOS 与核心隔离
WKC 异常EtherCAT 从站掉线看 EtherCAT 诊断
NVRAM CRC 错非正常断电加 UPS / 电容保持
堆栈溢出递归或深度调用重构代码减少嵌套

最佳实践

  • 上线前走一遍仪表板: 所有指标绿色, 才允许投产
  • 关键指标上 HMI: 运行期间操作员实时看到 PLC 健康
  • 每日导出报告: 归档 30 天, 用于回溯
  • 设置告警阈值保守: 早报警早处理, 别等 Fatal
  • 定期巡检: 每班次看仪表板 1 分钟, 积累经验
  • 对比基线: 新项目上线时保存一份"健康基线", 日后对比

相关文档