博文

当 Docker 下的实时性 vPLC 从实验室走进车间

实验室里 docker run 起来一个 OpenPLC V4、在仿真器跑通启保停,和车间里让它真正替你驱动一台设备,中间隔着确定性这道坎。本篇讲清容器化 vPLC 怎么从”能跑”走到”敢用”。

图:实时性 vPLC 的容器化栈

图:PREEMPT_RT + 隔离核 + SCHED_FIFO + 网卡直通,把”能跑”的容器变”敢用”的实时 vPLC。

一、实验室容忍抖动,车间要求有界时延

  • 实验室:扫描周期 10–100ms,偶尔抖一下无所谓,看的是趋势和逻辑对不对。
  • 车间:运动闭环、安全联锁要求的是最坏时延有界(worst-case bounded latency)。“平均 1ms”没意义,要的是”最差也不超过 X μs”。

标准 Linux 默认用 CFS 调度,容器默认没有任何实时保障。所以”在 Docker 里跑起来了”和”能进车间”是两件事——前者只是功能可用,后者是时序可证。

二、容器不是实时障碍,但默认不是实时

OpenPLC V4 的扫描任务走 SCHED_FIFO(见 STruC++ 与实时性)。要让它在容器里拿到实时优先级,需要一整套宿主机+容器配合:

  • 宿主机实时内核:打 PREEMPT_RT。它已在 2024 年合入 Linux 主线,意味着实时 Linux 现在有整个内核社区维护的底座,不再是边角项目。
  • CPU 隔离:isolcpus= 把控制核从通用调度器 fence 开,避免普通进程/内核线程抢占;配合 rcu_nocbs=、关超线程降低抖动。
  • 容器内提权:--cap-add=SYS_NICE --ulimit rtprio=99,否则容器里设不了 SCHED_FIFO。
  • 绑核专享:--cpuset-cpus 把 vPLC 绑到隔离核。
  • 禁 swap + 锁内存:--memory-swap=--memory 防换出,mlock 把关键代码/数据锁物理内存。
  • 实时带宽:cgroup v2 用 --cpu-rt-runtime 而非 --cpus 给实时带宽。

三、网络确定性:现场总线怎么进容器

  • EtherCAT 走 raw socket / L2 帧,需要专用网卡直通:用 --network host 或 macvlan / SR-IOV 直通物理网卡。否则容器网桥的 NAT/转发既引入抖动,又让 SOEM 拿不到 L2 帧(见 为什么选 SOEM)。
  • 出向整形:TSN 的 ETF / TAPRIO 队列规则 + NIC 硬件时间戳,让周期帧按调度发出,而不是”CPU 有空才发”。
  • 设备透传:串口/网卡用 --device 或 -v /dev/xxx 精确映射,别图省事挂全量 /dev。

四、一套可参考的部署骨架

# 宿主机(grub):隔离核 2,3,关 SMI 干扰
isolcpus=2,3 rcu_nocbs=2,3

# 容器:实时权限 + 绑核 + 禁 swap + 网卡直通
docker run -d --name openplc-rt \
  --cap-add=SYS_NICE --ulimit rtprio=99 \
  --cpuset-cpus=2,3 \
  --memory-swappiness=0 --memory-swap=--memory \
  --network host \
  ghcr.io/autonomy-logic/openplc-runtime:latest

这些数值是方向性的。最坏时延取决于硬件、BIOS SMI、负载,必须按部署实测验证,绝不能假设。

五、云 vPLC 的边界(呼应 vPLC 篇)

  • 跨网/云部署的 vPLC 受网络抖动影响,时延敏感的回路必须留在边缘/本地硬件;中心只做编排与下发(Autonomy Edge 的角色)。
  • 合并部署(一机多 vPLC)省控制柜、省备件、省电,但故障也集中——需要冗余与回滚。容器镜像版本化让 docker rollback 秒级恢复,这恰是 vPLC 相对物理 PLC 的弹性优势。

六、从实验室到车间的 checklist

  • 宿主机 PREEMPT_RT + isolcpus 隔离控制核
  • 容器 SYS_NICE / rtprio / cpuset / 禁 swap / mlock
  • 现场总线网卡直通(EtherCAT 要 raw socket)
  • 实测最坏时延并留余量(不是看平均)
  • 关键回路本地自治,云只做编排
  • 安全收口(见 安全设计)

七、小结

Docker 让 vPLC 的部署像软件一样灵活,但”灵活”和”确定”是两件事。把实时性当作一等约束来设计,vPLC 才敢走出实验室、走进车间。

→ 下一篇:为什么选 SOEM,看 V4 的 EtherCAT 主站驱动为什么是它。


配套代码与参考仓库

系列导航 · 双向链接(OpenPLC V4 系列 · 共 12 篇)

本系列当前均为草稿(draft: true)。建议发布序:① → ③ → ② → ④ → ⑧ 打头,⑩⑪⑫ 作深度延展按读者反馈穿插。

相关阅读

← 返回博文列表