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 与机器人控制器协同控制层级 信息管理层 MES / SCADA / 数据库 / OPC UA Server 工单下发、生产追溯、数据分析、远程维护 周期:50~100 ms 语言:SQL / REST / Python 协同调度层 Linux 侧应用 / Node-RED / Python 调度器 多机器人任务分配、路径规划、视觉结果融合 周期:20~50 ms 语言:Python / C# / Node-RED 实时控制层 PLCnext 实时核 IEC 61131-3 任务 / 实时 C++ 周期:1~10 ms 机器人控制器 运动规划 / 伺服控制 / 安全逻辑 周期:1~4 ms PROFINET / EtherNet/IP 控制字 / 状态字 / 位姿 现场设备层 机器人本体 / 伺服驱动器 / 安全门 / 视觉相机 / 传感器 数字量 I/O、安全信号、编码器反馈、相机触发 实时性要求 越高层越弱 越底层越强 控制层级 工单 / 配方 / 调度指令 任务序列 / 路径点 / 视觉坐标 使能 / 启动 / 急停 / 状态反馈

协同控制中的关键参数与判断依据

在实际调试中,以下几个参数和现象值得重点关注。第一,任务周期抖动:在 PLCnext Engineer 中可以通过任务监视器查看实际周期与设定周期的偏差,若抖动超过设定周期的 10%,说明 CPU 负载过高或存在优先级反转。第二,总线通信延迟:PROFINET 的更新周期通常为 1 ms~4 ms,若机器人状态字更新延迟超过 2 个周期,需要检查网络拓扑和交换机配置。第三,指令与状态的一致性:PLCnext 发送控制字后,应在 2~3 个周期内读到机器人状态字的变化,否则应检查机器人是否处于远程模式、是否使能、是否有报警。

实践建议:在项目初期,先用 PLCnext 的变量监视功能记录机器人控制字与状态字的时序关系,确认“发指令—收反馈”的周期数。这个周期数将直接决定协同任务的超时判断阈值。例如,若实测反馈延迟为 3 个周期,则超时阈值可设为 5~6 个周期,既不会误报,也能及时发现通信中断。

此外,安全信号的层级必须独立于普通协同任务。急停、安全门、使能信号应通过安全 I/O 或 PROFIsafe 传输,并在 PLCnext 的安全任务中处理,不能与普通机器人指令混在同一任务中。若机器人控制器本身带有安全 PLC,则应明确安全职责边界:谁负责急停回路、谁负责安全速度、谁负责安全区域,避免出现安全盲区。

总结来看,PLCnext 与机器人控制器的协同控制架构,本质上是在“开放”与“实时”之间找到平衡:Linux 侧提供灵活性和上层连接能力,实时核侧保证确定性和安全性,机器人控制器负责底层运动执行。把任务放在正确的层级、用正确的接口、设定合理的周期和超时,才能让多机器人协同既高效又可靠。