工业4.0与智能制造浪潮对生产的柔性、敏捷性和经济性提出了更高要求,传统PLC因其架构封闭、软硬件紧耦合的特性,在支持产线快速重构、实现弹性部署和全生命周期成本控制方面面临严峻挑战。虚拟PLC(vPLC)通过解耦控制软件与专有硬件,展现出部署灵活、易于扩展和维护的显著优势,已成为工业控制领域的研究热点,并加速向汽车制造、物流自动化、新能源等主流行业应用迈进。
随着vPLC使用场景越来越多,有许多客户与业内人士对vPLC的“实时性”提出了担心或质疑——虚拟PLC是否可以满足1ms及1ms以下的运动控制等高速硬实时需求?vPLC的实时性又到底如何呢?
本文将以实测数据为基础,为大家揭晓vPLC的实时性能指标,同时也分享一些实时性优化与测试的相关知识。这里是以菲尼克斯电气推出的vPLCnext为核心验证对象,围绕其实时性展开系统验证,重点测试vPLCnext在宿主机层面、容器隔离层面的实时响应能力,同时结合EtherCAT总线与运动控制场景,验证vPLCnext在500μs的高实时性需求场景下的适用性,为vPLC的工程化应用提供坚实的数据支撑与技术参考。
软硬件环境
本文只列出软硬件的重要关键信息。
• CPU型号:Intel(R) N97 @ 2.00GHz
• 核心数量:4核
• 内存大小:8GB
• 宿主机操作系统:Intel ECI Linux-RT(由英特尔®工业边缘控制技术提供支持)
实时性优化策略
宿主机的优化
宿主机采用了Intel ECI的实时内核6.6.23-rt28-intel-ese-standard-lts-rt,这是vPLCnext实时性的基础底座,需完成以下优化配置:
关闭无关服务
停止图形界面服务,避免GUI抢占CPU与内存资源;
禁用自动更新、日志收集等后台服务。
禁用CPU节能模式
配置CPU为performance模式,避免动态调频/休眠导致的调度延迟。
CPU核心隔离
通过内核参数isolcpus=1,3隔离core1和core3,避免其他进程/内核线程抢占这两个核心;
配置rcu_nocbs=1,3,将RCU回调任务从隔离核心剥离,进一步降低调度干扰。
禁用超线程(若CPU支持)
在BIOS/内核参数中关闭超线程,避免物理核心被逻辑线程共享,导致实时任务调度延迟波动。
实时内核参数调优
配置内核调度器为PREEMPT_RT模式,确保高优先级实时任务可抢占低优先级非实时任务;
调整sysctl参数:取消实时任务运行时间限制,并降低看门狗干扰。
中断亲和性优化
将非关键硬件中断(如网卡、存储)绑定到非隔离核心(如core0/core2),避免隔离核心被中断频繁打断;
仅保留与vPLCnext强相关的实时中断(如EtherCAT总线中断)在隔离核心上处理。
vPLC容器的优化
基于宿主机优化的基础,针对vPLCnext容器实施工业级专属优化,从内核、资源、调度、网络等维度确保实时性,主要做了以下优化配置:
CPU核心绑定
启动容器时强制将vPLCnext容器绑定到已隔离的core1和core3,实现专核专用。
工业级任务调度
内部任务调度器将PLC实时任务优先级设置为最高,确保可抢占所有非实时任务。
网络模式选择
使macvlan直接绑定物理网卡,避免容器(Podman)网桥的NAT/数据包转发开销,从而降低网络通信延迟。
Cgroup资源限制
配置memory.limit_in_bytes限制容器内存使用,防止内存泄漏引发OOM或交换分区(Swap)干扰。
I/O优先级配置
禁用容器内不必要的日志写入,将关键日志重定向到宿主机高速存储(如SSD)。
内存锁定与预分配
vPLCnext启动时将关键实时代码、数据锁定到物理内存,避免内存换页导致的延迟;
预分配运动控制、总线通信所需的内存缓冲区,减少运行时动态内存分配的不确定性。
实时任务与管理任务分离
vPLCnext将实时控制任务(如PLC逻辑、运动控制)调度到专属CPU核心执行,与非实时任务(如Web配置、日志上传)隔离。
宿主机的实时性
宿主机是vPLC运行的基础载体,其实时性直接影响vPLC的整体响应性能,尤其是宿主机的CPU调度延迟、中断响应延迟、内存访问延迟,是制约vPLC实时性的关键因素。本章节通过rt-test工具对宿主机的实时性进行测试,重点验证宿主机在不同负载场景下的延迟表现,明确宿主机对vPLC实时性的支撑能力。
空载的实时性测试
采用cyclictest实时测试工具,设置以下参数:
• 测试间隔:1000μs
• 测试时长:24h
• 优先级:99
• 调度策略:fifo(先进先出)
命令如下:
taskset -c 1 cyclictest --mlockall --quiet --priority=99 --policy=fifo --interval=1000 --histogram=400 --secaligned=50 --duration=24h
taskset -c 3 cyclictest --mlockall --quiet --priority=99 --policy=fifo --interval=1000 --histogram=400 --secaligned=50 --duration=24h
其中taskset -c 1和taskset -c 3表示指向被隔离的core1和core3,测试这2个隔离核心的实时性数据。
按照以上参数设置,执行以下截图中的脚本,测试完成后结果会写入到core1_0.txt和core3_0.txt中。

测试结果通过可视化工具生成如下的统计图:


60%CPU负载下的实时性测试
使用stress-ng工具对系统的CPU负载加压到60%,按照以上相同配置执行脚本。
测试结果通过可视化工具生成如下的统计图:


vPLC容器内的实时性
菲尼克斯电气vPLCnext的容器化部署采用Podman容器,容器内部建立了PLCnext运行环境,搭载菲尼克斯电气的PLCnext Runtime运行时,容器使用宿主机的实时内核,相关运行时的进程调度进行了深度优化,从容器调度、系统底层两个维度破解虚拟化环境下的实时性瓶颈,为vPLCnext容器内的实时性提供了双重保障。本章节重点测试vPLCnext容器内的实时性能,验证容器与自研系统对实时性的提升效果,明确vPLCnext容器内实时性的核心保障机制。
采用与宿主机实时性相同的测试方法,分别测试空载和60%CPU负载下的实时性能。
空载的实时性测试
按照以上宿主机空载的测试方法,在vPLCnext容器内执行测试脚本。
测试结果通过可视化工具生成如下的统计图:


60%CPU负载下的实时性测试
使用stress-ng工具对系统的CPU负载加压到60%,按照以上宿主机60%CPU负载下的测试方法,在vPLCnext容器内执行测试脚本。
测试结果通过可视化工具生成如下的统计图:


实时性测试结论
测试数据记录
通过在宿主机和容器内的实时性能验证,数据对比如下图:

核心结论
本次测试围绕菲尼克斯电气vPLCnext的实时性展开系统验证,分别对宿主机、vPLCnext容器内的实时性能进行对比,得出以下结论:
宿主机实时性表现
经过实时内核优化的工业级宿主机操作系统,在空载及60%CPU负载场景下,均能保持稳定的实时性能:
· 最大时延 ≤ 18μs
· 最小时延 = 2μs
· 平均时延 = 4μs
可为vPLCnext提供可靠的运行基础,不会成为vPLCnext实时性的主要瓶颈。
容器内实时性表现
通过合理配置容器资源(绑定CPU核心、限制资源使用率),vPLCnext容器内的实时性能在不同负载场景下均接近宿主机水平:
· 最大时延 ≤ 27μs
· 最小时延 = 2μs
· 平均时延 = 4–5μs
完全满足工业控制场景对实时性的核心要求,为vPLCnext的工程化应用提供了有力的数据支撑与技术参考,助力工业控制系统向虚拟化、柔性化、智能化转型。
vPLCnext高实时性应用开发
基于本次验证所证实的菲尼克斯电气vPLCnext在宿主机与容器内的优异实时性能,均能满足工业高实时控制需求,菲尼克斯电气正依托该高实时性基础,全力推进相关应用落地。目前,已经有客户将500μs循环周期下的vPLCnext+EtherCAT+运动控制方案在实际设备测试验证,后续相关技术细节、动态及应用案例,将通过官方推文持续更新,敬请行业同仁与广大客户期待。
(菲尼克斯电气)
京公网安备 11011202001138号
