2. PLCnext平台与机器人控制架构
在机器人协同控制系统中,PLCnext 控制器承担着“承上启下”的角色:向上对接 MES、视觉系统或上位调度,向下通过工业以太网与机器人控制器交换指令与状态。理解 PLCnext 的控制器特性、实时任务机制、Linux 与实时核的分工,以及它与机器人控制器之间的接口和层级划分,是设计协同控制方案的基础。
PLCnext 控制器的核心特性
PLCnext 是 Phoenix Contact 推出的开放式控制平台,其核心特征可以概括为三点:IEC 61131-3 与高级语言共存、Linux 与实时核并行、面向工业现场的总线与安全能力。传统 PLC 通常只运行梯形图、功能块或结构化文本,而 PLCnext 允许在同一控制器内同时运行 PLC 程序、C++/Python 应用、Node-RED 流以及 OPC UA 服务。这意味着机器人协同控制中的协议转换、数据预处理、路径规划等任务,可以直接在控制器内完成,而不必额外增加工控机。
从硬件形态看,PLCnext 控制器通常配备双核或多核 ARM 处理器,例如 AXC F 2152 采用双核 ARM Cortex-A9,主频约 800 MHz,其中一部分资源用于 Linux 系统,另一部分用于实时任务。控制器本体带有 PROFINET、EtherNet/IP、Modbus TCP 等工业协议接口,并可通过扩展模块接入数字量、模拟量、安全信号。对于机器人协同场景,这些接口决定了 PLCnext 能否直接与机器人控制器、安全 PLC、视觉相机和伺服驱动器通信。
Linux 与实时核的分工
PLCnext 的运行时环境由两部分组成:Linux 侧和实时核侧。Linux 侧负责文件系统、网络服务、Web 服务器、数据库、Docker 容器以及非实时应用;实时核侧则运行 IEC 61131-3 任务和实时扩展,保证周期任务的确定性。两者通过共享内存和内部通信机制交换数据,而不是通过普通网络协议,从而降低延迟。
这种架构带来的关键约束是:实时任务不能被 Linux 侧的负载拖垮。例如,如果 Linux 侧运行了一个占用大量 CPU 的 Python 脚本,实时任务的抖动可能增大。因此在实际工程中,通常将视觉推理、日志上传、远程维护等非实时任务放在 Linux 侧,而将机器人使能、急停响应、轨迹插补触发、安全门监控等任务放在实时核侧。一个合理的经验是:实时任务周期在 1 ms~10 ms 之间时,CPU 占用率应控制在 50% 以下,并留出至少 20% 的余量应对突发负载。
实时任务与任务周期
PLCnext 的实时任务通常按周期组织,常见周期包括 1 ms、2 ms、4 ms、8 ms、10 ms、20 ms。任务周期越短,控制精度越高,但对 CPU 和总线通信的要求也越高。在机器人协同控制中,不同任务适合不同周期:
- 安全与使能任务:1~2 ms,处理急停、安全门、机器人使能信号,要求最高优先级。
- 机器人指令交互任务:4~10 ms,发送运动使能、模式切换、程序启动等指令,并读取机器人状态。
- 轨迹与坐标同步任务:8~20 ms,处理机器人位姿、工件坐标、传送带跟踪等数据。
- 数据记录与上位通信任务:50~100 ms,上传生产数据、接收 MES 工单,可放在 Linux 侧或低优先级实时任务中。
任务优先级和周期必须与机器人控制器的接口能力匹配。例如,某机器人控制器支持 4 ms 的 EtherCAT 周期,那么 PLCnext 侧的协同任务周期最好设为 4 ms 或 8 ms 的整数倍,避免因周期不匹配造成指令堆积或状态采样丢失。
机器人控制器接口
PLCnext 与机器人控制器之间的接口通常分为三类:数字量 I/O、现场总线和专用协议。数字量 I/O 用于使能、启动、停止、急停、模式选择等开关信号,接线简单但信息量有限。现场总线如 PROFINET、EtherNet/IP、EtherCAT 用于传输机器人状态字、控制字、关节角度、笛卡尔位姿、IO 状态等结构化数据。专用协议则包括 KUKA 的 RSI、ABB 的 Robot Web Services、FANUC 的 SNPX、Universal Robots 的 RTDE 或 Dashboard 接口,适合需要高频位姿交换或复杂程序控制的场景。
以 PROFINET 为例,PLCnext 作为 PROFINET 控制器,机器人控制器作为 PROFINET 设备,双方通过 GSDML 文件组态。典型输入输出模块包括:控制字(2 字节)、状态字(2 字节)、程序号(2 字节)、笛卡尔坐标 X/Y/Z/A/B/C(各 4 字节,共 24 字节)、数字量输入输出(各 2 字节)。在 PLCnext Engineer 中,这些数据被映射为全局变量,例如 Robot1_ControlWord、Robot1_StatusWord、Robot1_PoseX。实时任务通过读写这些变量实现协同控制。
协同控制层级划分
从控制层级看,PLCnext 与机器人控制器的协同可以划分为四层:现场设备层、实时控制层、协同调度层和信息管理层。现场设备层包括机器人本体、伺服、传感器、安全门;实时控制层由 PLCnext 实时核和机器人控制器共同组成,负责周期性的指令与状态交换;协同调度层运行在 Linux 侧或上位系统,负责任务分配、路径规划、多机器人协调;信息管理层对接 MES、SCADA、数据库,负责生产追溯和数据分析。
这种层级划分的意义在于:不同层对实时性、可靠性和开发语言的要求不同。实时控制层必须用 IEC 61131-3 或实时 C++ 实现,协同调度层可以用 Python、C# 或 Node-RED,信息管理层则可以使用 SQL、REST API 或 OPC UA。把任务放在正确的层级,可以避免“用 Linux 脚本做急停”这类危险设计。
协同控制中的关键参数与判断依据
在实际调试中,以下几个参数和现象值得重点关注。第一,任务周期抖动:在 PLCnext Engineer 中可以通过任务监视器查看实际周期与设定周期的偏差,若抖动超过设定周期的 10%,说明 CPU 负载过高或存在优先级反转。第二,总线通信延迟:PROFINET 的更新周期通常为 1 ms~4 ms,若机器人状态字更新延迟超过 2 个周期,需要检查网络拓扑和交换机配置。第三,指令与状态的一致性:PLCnext 发送控制字后,应在 2~3 个周期内读到机器人状态字的变化,否则应检查机器人是否处于远程模式、是否使能、是否有报警。
此外,安全信号的层级必须独立于普通协同任务。急停、安全门、使能信号应通过安全 I/O 或 PROFIsafe 传输,并在 PLCnext 的安全任务中处理,不能与普通机器人指令混在同一任务中。若机器人控制器本身带有安全 PLC,则应明确安全职责边界:谁负责急停回路、谁负责安全速度、谁负责安全区域,避免出现安全盲区。
总结来看,PLCnext 与机器人控制器的协同控制架构,本质上是在“开放”与“实时”之间找到平衡:Linux 侧提供灵活性和上层连接能力,实时核侧保证确定性和安全性,机器人控制器负责底层运动执行。把任务放在正确的层级、用正确的接口、设定合理的周期和超时,才能让多机器人协同既高效又可靠。