打造专业工控系统
本文介绍如何将一台标准 PC 配置为专业级 EtherCAT 工控系统。 通过硬件层和应用层的逐步优化,可在普通硬件上实现接近专用控制卡的实时性能。
诊断指标说明
优化前后,通过诊断面板验证效果:
| 指标 | 含义 |
|---|---|
| 抖动 (均/峰) | 平均抖动 / 峰值抖动。平均反映常态性能,峰值包含硬件干扰 |
| 干净最大抖动 | 排除硬件干扰 (SMI) 后的最大抖动,反映系统真实实时性能 |
| 往返延迟 (RTT) | EtherCAT 帧从发送到接收的往返时间 |
| 应用抖动 | PDO 数据到达用户程序的时序偏差 |
| SMI 次数 | 受硬件中断干扰的周期累计数 |
| 发送频率 | 实际 PDO 帧发送频率 |
| 离线从站 | 当前掉线的从站数量 |
| 丢包率 | 帧丢失比例 |
如何判断抖动来源
- 平均抖动低 (< 10μs)、峰值高 (> 100μs) → 硬件层干扰 (SMI),需要 BIOS 优化
- 平均和峰值都高 → 系统负载过重,需要应用层优化
- 总线抖动低、应用抖动高 → 用户进程调度问题,需要提升进程优先级
硬件层优化
硬件层优化在 BIOS 中完成,一次设置、永久生效,对 Windows 和 Linux 通用。 这是实时性改善最显著的一步。
必须禁用
| BIOS 选项 | 为什么影响实时性 | 预期改善 |
|---|---|---|
| USB Legacy Support | BIOS 周期性中断 CPU 模拟传统键鼠,每次 50~200μs | 抖动尖峰大幅减少 |
| C-States (C1E, C3, C6 等) | CPU 休眠/唤醒产生额外延迟 50~200μs | 消除电源状态切换抖动 |
| Intel SpeedStep / AMD Cool'n'Quiet | 动态调频过程中断 CPU | 消除调频相关抖动 |
| Intel Turbo Boost / AMD PBO | 睿频切换过程中断 CPU | 消除频率切换瞬变 |
建议禁用
| BIOS 选项 | 原因 |
|---|---|
| IPMI/BMC 轮询 | 服务器主板的管理芯片周期性中断 CPU |
| Serial Port (COM) Legacy | 串口模拟可能产生额外中断 |
| BIOS 温控 (Hardware Monitor) | 部分 BIOS 周期性中断 CPU 读取温度传感器,可改为 OS 层温控 |
建议开启
| BIOS 选项 | 原因 |
|---|---|
| Performance Mode | 固定 CPU 最高频率,避免任何调频行为 |
| Hyper-Threading (视情况) | 关闭可减少核心间干扰,但总核心数减半 |
应用层优化
Windows
1. 安装驱动
随驱动附带安装脚本,以管理员身份运行即可完成驱动部署、系统时钟优化和中断亲和性配置。首次安装需重启。
2. 电源计划
将 Windows 电源计划切换为高性能或终极性能,并在高级设置中确认:
| 设置 | 推荐值 |
|---|---|
| 处理器最小/最大状态 | 100% |
| 关闭硬盘 | 从不 |
| USB 选择性暂停 | 已禁用 |
| PCI Express 链路状态电源管理 | 关闭 |
3. 网卡驱动
EtherCAT 专用网卡建议在 设备管理器 → 网络适配器 → 属性 → 高级 中关闭以下功能:
| 设置 | 推荐值 | 说明 |
|---|---|---|
| Interrupt Moderation | 禁用 | 减少帧接收延迟 |
| Receive Side Coalescing | 禁用 | 避免帧被合并延迟交付 |
| Energy Efficient Ethernet | 禁用 | 避免链路层休眠唤醒延迟 |
| Flow Control | 禁用 | EtherCAT 不需要流控 |
4. 精简系统
| 操作 | 说明 |
|---|---|
| 禁用 Windows Search 服务 | 消除索引磁盘/CPU 活动 |
| 禁用 SysMain 服务 | 消除预读磁盘活动 |
| 暂停 Windows Update | 避免后台更新占用 CPU |
| Defender 添加排除目录 | 避免实时扫描干扰 |
| 退出 OneDrive / 云同步 | 避免后台文件同步 |
| 使用 IoT Enterprise LTSC | 最精简的 Windows 版本 |
极致精简
最终系统只保留运行时环境 + 网卡驱动 + 应用程序,启动时直接运行应用,不启动资源管理器。
Linux
1. 内核参数
# /etc/default/grub
GRUB_CMDLINE_LINUX="idle=poll processor.max_cstate=0 intel_idle.max_cstate=0"
| 参数 | 说明 |
|---|---|
| idle=poll | 禁用 CPU 空闲休眠 |
| processor.max_cstate=0 | 禁用 C-States |
2. 实时内核
# Ubuntu/Debian
sudo apt install linux-image-rt-amd64
# 或手动编译 PREEMPT_RT 补丁内核
3. 进程优先级
# 使用实时调度策略
sudo chrt -f 80 ./your-application
# 绑定到指定核心
sudo taskset -c 1 ./your-application
4. 精简系统
# 禁用不必要的服务
sudo systemctl disable NetworkManager bluetooth cups avahi-daemon snapd
# 最小化安装,不安装桌面环境
优化效果参考
实时性指标
| 指标 | 未优化 | 硬件层优化 | 全部优化 |
|---|---|---|---|
| 平均抖动 | 5~30μs | 3~10μs | 1~5μs |
| 峰值抖动 | 100~300μs | 5~50μs | < 10μs |
| 干净最大抖动 | 10~50μs | 3~10μs | 1~5μs |
| 应用抖动 | 50~1000μs | 50~500μs | < 50μs |
| SMI 次数/秒 | 10~300 | 0~5 | 0~2 |
系统健康指标
下表对比了普通系统 与 深度优化后的工控系统 的典型表现:
| 指标 | 普通系统 | 工控系统 (目标) |
|---|---|---|
| 开机到应用就绪 | 30~60 秒 | < 12 秒 |
| 后台进程数 | 150~300 | < 50 |
| 后台线程数 | 1500~3000 | < 600 |
| CPU 空闲占用 | 3~10% | < 1% |
| 内存占用 (空闲) | 3~5 GB | < 1.5 GB |
| 磁盘活动 (空闲) | 持续读写 | 接近 0 |
业务执行指标
| 指标 | 目标值 | 说明 |
|---|---|---|
| PDO 回调执行时间 | < 周期的 50% | 用户业务逻辑不应超过半个周期 |
| 控制算法单次耗时 | < 100μs | 运动插补、PID 计算等核心算法 |
| GC 暂停 (.NET/Java) | < 1ms | 托管语言的垃圾回收暂停会阻塞回调 |
内存与资源
| 指标 | 目标值 | 说明 |
|---|---|---|
| 应用内存占用 | 稳定不增长 | 持续运行数小时后内存不应持续上涨,否则存在泄漏 |
| 页面错误/秒 | < 10 | 大量页面错误说明内存不足,触发磁盘交换导致卡顿 |
| 句柄数 | 稳定不增长 | 文件/Socket/事件句柄持续增长 = 资源泄漏 |
| 虚拟内存 (Commit) | < 物理内存 80% | 超过后系统开始使用交换文件,实时性急剧下降 |
| 内核池占用 | < 200 MB | 非分页池过大说明驱动存在内存泄漏 |
内存泄漏检测
工控系统通常需要 7×24 小时连续运行。建议在部署前执行 24 小时压力测试,每小时记录内存占用,确认无持续增长趋势。
可靠性
| 指标 | 目标值 | 说明 |
|---|---|---|
| 连续运行时间 | > 7 天 | 不重启、不崩溃、不卡死 |
| WKC 匹配率 | 100% | 任何 WKC 不匹配都意味着总线通信异常 |
| 从站掉线次数 | 0 | 正常运行期间不应有从站掉线 |
| 丢包率 | 0% | EtherCAT 基于以太网,物理层问题会导致丢包 |
| 应用异常捕获 | 全覆盖 | 所有 PDO 回调中的异常必须捕获,未捕获异常可能导致总线停止 |
| 看门狗触发 | 0 次 | 用户程序卡死时内核看门狗会停止发送,需排查卡死原因 |
| 蓝屏/死机 | 0 次 | 排查驱动兼容性、内存硬件、电源稳定性 |
| 线缆/接头质量 | 工业级 | 使用屏蔽网线、工业级 RJ45 接头,避免接触不良 |
长期运行建议
- 启用 从站看门狗 (Slave Watchdog),主站异常时从站自动进入安全状态
- 启用 主站看门狗 (Master Watchdog),用户程序卡死时自动停止发送过期数据
- 记录 诊断日志,定期检查 WKC 不匹配、端口错误计数等趋势
- 使用 UPS 不间断电源,避免突然断电导致数据丢失或从站状态异常
- 关闭 Windows 自动更新重启,或使用 组策略/注册表 禁止自动重启
如何检查系统状态
Windows: 任务管理器 → 性能 → 打开资源监视器,观察 CPU/磁盘/网络/内存活动
Linux: htop 查看进程/线程/内存,iostat 查看磁盘活动,vmstat 查看页面错误
大多数场景
只需完成 BIOS 电源管理 + 系统电源计划两步,即可满足包括人形机器人、CNC 在内的 99% 项目需求。
全部优化后,可在标准硬件上实现 < 5μs 帧发送抖动,接近专用 EtherCAT 主站卡的性能水平。
需要更高实时性?
如需业务逻辑层的硬实时执行(微秒级运动插补、确定性控制周期),标准 Windows/Linux 用户态无法满足。
我们提供类 TwinCAT 软PLC 完整内核硬实时方案,请联系我们。