跳到主要内容

系统健康监控

概述

DarraRT 运行在 Windows 工控机上, 依赖 CPU、内存、磁盘 IO、网卡、温度、电源六大基础资源。 任何一个资源趋向饱和都会间接影响 PLC 扫描抖动、EtherCAT 帧率稳定性、IDE 响应速度。

本文档阐述如何建立基线 → 告警 → 一键健康报告的完整监控链路, 并给出每项指标的推荐阈值。 DarraRT Service 内置 HealthMonitor 服务, 默认每 10 秒采样一次, 超过阈值写入 service_*.log 并触发报警。

适用场景

  • 新产线上线前的基准健康体检(建立 baseline)
  • 产线运行中的实时告警(阈值突破时弹窗/邮件)
  • 故障后的事后健康报告导出(PDF, 用于售后支持)
  • 跨机型对比(工控机 A vs 工控机 B)

前置条件与工具

工具用途安装位置
DarraRT Service内置健康采样产品自带
Windows 性能监视器手工交叉验证perfmon.msc
HWiNFO 64硬件传感器 (温度/电压)免费版即可
OpenHardwareMonitor开源替代可选
PowerShell 5.1+脚本化采集Windows 自带
Process Explorer进程句柄/线程SysInternals

六大资源基线与阈值

1. CPU

指标基线告警阈值说明
整体占用率< 30%> 70% 持续 10s超出应检查是否有后台任务
Service 进程< 5%> 20%Service 本身应极轻
IDE 进程< 15%> 50%操作时允许短暂突刺
内核态占用< 5%> 15%内核态高=驱动异常
隔离核占用100% 忙等n/a隔离核是有意独占

DarraRT 使用核心隔离 (Core Isolation), 由 DarraRT.sys 将指定核独占给 EtherCAT PDO 线程。 任务管理器上显示的"100%"是正确状态, 不是异常。请用 Process Explorer → CPU Graph 过滤非隔离核查看真实占用。

2. 内存

指标基线告警阈值说明
系统可用> 4GB< 1GB剩余不足影响缓存
Service 工作集< 200MB> 800MB 持续增长线性上涨=内存泄漏
IDE 工作集< 500MB> 2GB大工程允许 1-2GB
分页文件< 50%> 80%过度分页=实时性杀手
非分页池< 500MB> 1.5GB驱动泄漏信号

内核驱动用非分页池 (ExAllocatePoolWithTag) 分配内存。若非分页池持续增长, 多半是 DarraRT_Eth.sys 的 NDIS 帧缓冲未正确回收。用 poolmon.exe -p -i 按 Tag 查看。 DarraRT 的 Pool Tag 约定:

  • DRRC — Global 驱动
  • DREC — Eth 驱动
  • DRPC — PLC 驱动

3. 磁盘 IO

指标基线告警阈值说明
日志盘写入< 10 MB/s> 50 MB/s 持续日志洪水 = 代码 bug
日志盘空闲空间> 20%< 5%日志轮转必需
队列深度< 2> 10HDD 工控机高风险
响应时间 (ms)< 20ms> 100ms机械盘应换 SSD

强烈建议: 工控机必须用 SSD, 并将 %AppData%/DarraPLC/logs/ 所在盘单独规划至少 20GB。 DarraRT 默认开启日志轮转 (每文件 100MB, 保留 20 份), 若占用盘量超过基线, 说明某模块日志等级设错 (Trace/Debug 在生产环境打开)。

4. 网卡

指标基线告警阈值说明
EtherCAT 网卡带宽< 10%> 80%PDO 不应饱和
发送错误0任意 > 0物理层异常
接收错误 (CRC)0任意 > 0线缆/端接不良
丢弃计数0> 100/min缓冲区溢出
PDO 帧率= 配置值偏差 > 1%DC 同步异常

DarraRT EtherCAT 网卡应专用, 不参与 TCP/UDP 业务流量。用 netsh interface show interface 查看绑定状态, DarraRT_Eth 只绑定 DarraRT_Eth 协议, 不绑定 TCP/IPv4/v6。

5. 温度

部件正常告警关键
CPU Package< 65°C> 85°C> 95°C 降频
CPU 核 (p95)< 70°C> 90°C接近 Tjmax
主板芯片组< 60°C> 80°C散热片松动
内存< 60°C> 85°C频率不稳
SSD< 55°C> 70°C性能下降

温度超限会触发 CPU 降频 (Thermal Throttling), 进而导致扫描周期抖动飙升。 排查顺序: 温度 → 频率 → 周期抖动。如果只看抖动表象, 会误以为是软件问题。

6. 电源

指标基线告警说明
电源方案高性能非"高性能"省电模式=抖动
C-State禁用启用BIOS 层面
P-State / SpeedStep禁用启用动态调频=抖动
UPS 电量> 80%< 20%断电保护

以上 BIOS 设置是 DarraRT 实时性的强制前提。未关闭 C-State 的系统, 1ms 周期抖动 会从 20μs 恶化到 500μs 以上。详见 实时抖动分析

诊断步骤

步骤 1: 查看 Service 健康日志

打开 Service 日志目录, 搜索 [HealthMonitor] 标签:

# 进入日志目录 (默认路径)
cd "C:\Program Files\DarraRT\Service\logs"

# 查看最近 1000 行健康监控日志
Select-String -Path "service_*.log" -Pattern "\[HealthMonitor\]" | Select-Object -Last 1000

预期输出:

2026-04-18 09:00:00 [Info] [HealthMonitor] CPU=18% Mem=2.3GB Disk=3MB/s Net=1.2MB/s Temp=62C
2026-04-18 09:00:10 [Info] [HealthMonitor] CPU=22% Mem=2.3GB Disk=3MB/s Net=1.2MB/s Temp=63C

判定规则: 连续 10 条都在阈值内 → 健康。出现 [Warn][Error] 条目 → 进入步骤 2。

步骤 2: 交叉验证 (Performance Monitor)

# 启动 perfmon
perfmon.msc

添加计数器:

  • Processor(_Total)\% Processor Time
  • Memory\Available MBytes
  • PhysicalDisk(_Total)\Avg. Disk Queue Length
  • Network Interface(<EtherCAT 网卡>)\Bytes Total/sec
  • Process(Darra.PLC.Service)\Working Set
  • Process(Darra.PLC.IDE)\Private Bytes

判定规则: perfmon 数据与 HealthMonitor 一致 → 采样正常; 不一致 → Service 计数器损坏, 重启 Service (先停 PLC → 再重启)。

步骤 3: 硬件传感器 (HWiNFO)

1. 打开 HWiNFO64 → Sensors
2. 关注: CPU Package Temperature / CPU Core Voltage / DIMM Temperature
3. 记录 Min / Avg / Max
4. 对比 BIOS 设置 (Tjmax / VID / TDP)

判定规则: 任何 Max 超过表格告警阈值 → 先解决硬件问题再看软件。

步骤 4: 一键健康报告

IDE 菜单:

诊断 → 健康报告 → 导出 PDF

报告包含:

  • 最近 24h CPU/内存/磁盘/网卡曲线
  • 温度极值表
  • 驱动状态 (DarraRT/Eth/PLC 三项)
  • 日志等级统计 (Error/Warn 次数)
  • BIOS 关键项 (C-State/SpeedStep)
  • 系统事件关键条目

判定规则: 报告首页"综合评分"≥ 85 → 可投入生产; 60~85 → 警告级, 限期优化; < 60 → 禁止投产。

异常模式速查表

现象原因定位方法解决
Service 工作集持续增长日志/事件订阅未释放Process Explorer → .NET AppDomains检查 using / Dispose
CPU 非隔离核 > 80%后台 Windows Update / 杀软services.msc关闭/设置到非 PLC 核
网卡错误计数 > 0线缆 / 端接 / 驱动Get-NetAdapterStatistics换线 / 重装驱动
磁盘延迟 > 100msHDD / 大量日志resmon.exe 磁盘页升级 SSD / 降日志级
温度 > 85°C散热不足 / 风扇故障HWiNFO 风扇转速清灰 / 换风扇
非分页池持续增长驱动泄漏poolmon -p -i -bDREC定位 Tag → 查代码

高级技巧

  • 多机型基线库: 在首次部署时导出健康报告存档 (baseline_<SN>_<日期>.pdf), 故障时可与当前报告逐项差分, 快速发现"哪项恶化了"。
  • 远程采集: Service 支持 HealthMonitor.ExportEndpoint = http://<server>/health 推送 JSON, 在中控屏 HMI 上实时看板。
  • 异常即刻快照: 当 CPU > 90% 持续 3 秒, Service 自动 ProcDump -ma Darra.PLC.Service.exelogs/dumps/, 用 WinDbg/VS 打开可以看到完整线程栈。

相关文档

健康报告样例