4. PLCopen标准概述

PLCopen 是由多家自动化厂商与用户共同发起的中立性国际组织,其核心使命是为可编程逻辑控制器(PLC)及其周边应用定义独立于硬件平台的软件接口标准。在工业机械臂伺服运动控制领域,PLCopen 运动控制规范(Motion Control Specification)是连接 IEC 61131-3 编程语言与具体伺服驱动器、电机硬件之间的桥梁。本章将系统梳理 PLCopen 运动控制规范的体系结构,重点解析 Part 1(通用运动控制)与 Part 2(扩展功能)的定位、核心功能块及适用场景,并阐明其与 IEC 61131-3 标准之间的层次关系。理解这些内容,是后续章节中设计机械臂运动控制程序、进行轴组协调与轨迹规划的前提。

PLCopen 运动控制规范体系与 IEC 61131-3 关系 IEC 61131-3 编程语言基础(ST / LD / FBD / SFC / IL) 数据类型、变量、任务配置、程序组织单元(POU)、状态机基础 基于 PLCopen 运动控制规范(独立于硬件) 定义运动控制功能块接口、状态机、轴/轴组数据结构 Part 1 Part 2 Part 1:通用运动控制 · 单轴运动:MC_Power, MC_MoveAbsolute · 速度/位置控制:MC_MoveVelocity, MC_Home · 状态机:Standstill, Running, ErrorStop · 轴对象:AXIS_REF 数据结构 Part 2:扩展功能 · 多轴协调:MC_CamIn, MC_GearIn · 轴组运动:MC_GroupEnable, MC_MoveLinear · 叠加运动:MC_AdditiveMove, 凸轮表 · 位置补偿、飞锯、电子齿轮/凸轮 机械臂伺服运动控制应用(6轴/4轴/SCARA) 轴组协调、轨迹插补、IO同步、状态管理、HMI交互 IEC 61131-3 提供语言基础

上图清晰地展示了 PLCopen 运动控制规范在自动化软件体系中的位置:它位于 IEC 61131-3 编程语言之上,向下依赖标准定义的数据类型与程序组织单元,向上为机械臂等复杂运动控制应用提供统一的功能块接口。Part 1 与 Part 2 分别覆盖单轴基础运动与多轴协调扩展,两者共同构成完整的运动控制库。下面我们将逐一深入解析。

4.1 PLCopen 运动控制规范的核心原理与设计哲学

PLCopen 运动控制规范的核心设计思想是“接口标准化、实现独立化”。它不规定伺服驱动器内部如何调节电流环、速度环,也不限定使用脉冲、模拟量还是总线通信(如 EtherCAT、PROFINET、SERCOS III)连接驱动器,而是定义了一套统一的功能块(Function Block)接口和轴状态机(Axis State Machine)。这样,无论底层硬件来自哪家厂商,只要其运动控制库符合 PLCopen 规范,上层应用程序就可以用几乎相同的代码实现运动控制逻辑。

该规范基于 IEC 61131-3 的 ST(结构化文本)和 FBD(功能块图)语言构建。每个运动控制功能块都继承自 IEC 61131-3 的 Function Block 模型,拥有输入变量(如 Execute、Position、Velocity)、输出变量(如 Done、Busy、Error)以及内部状态。这种设计使得程序员的代码具有极高的可移植性——从一台 PLC 迁移到另一台 PLC,只需更换底层驱动库,而无需重写运动控制逻辑。

核心要点:PLCopen 运动控制规范的本质是“软件接口契约”。它约定了功能块的名称、参数、时序行为,但不约束内部实现。这类似于 C 语言中的头文件声明与库函数实现的关系。

4.2 Part 1(通用运动控制)详解

Part 1 是 PLCopen 运动控制规范的基础部分,发布于 2001 年,主要针对单轴运动控制场景。它定义了机械臂中每个独立关节轴(如 J1、J2、J3)所需的基本运动功能。Part 1 的核心内容包括轴状态机、轴数据结构以及一组标准功能块。

4.2.1 轴状态机(Axis State Machine)

每个运动轴在 PLCopen 中都被抽象为一个状态机,包含以下主要状态:Disabled(禁用)、Standstill(停止)、Running(运行)、ErrorStop(错误停止)。轴必须通过 MC_Power 功能块使能后,才能从 Disabled 切换到 Standstill。在 Standstill 状态下,可以执行定位(MC_MoveAbsolute)或相对定位(MC_MoveRelative);在 Running 状态下,可以执行速度控制(MC_MoveVelocity)或位置叠加。任何错误都会将轴置入 ErrorStop 状态,必须通过 MC_Reset 清除错误并重新使能。

状态描述允许的后续操作
Disabled轴未使能,驱动器无使能信号MC_Power(Enable:=TRUE)
Standstill轴已使能,当前位置保持,速度为零MC_MoveAbsolute, MC_MoveRelative, MC_Home
Running轴正在运动,速度非零MC_MoveVelocity, MC_Stop, MC_Halt
ErrorStop发生错误,轴停止输出MC_Reset, MC_Power(Enable:=FALSE)

4.2.2 关键功能块与机械臂应用

Part 1 定义了约 15 个标准功能块,机械臂关节控制中最常用的包括:

  • MC_Power:控制伺服使能。输入 Enable 为 TRUE 时,轴被使能并进入 Standstill;FALSE 时轴禁用。机械臂上电顺序必须严格遵循此功能块。
  • MC_Home:执行回零操作。机械臂每次开机后必须回零,以建立位置基准。支持多种回零方式(如限位开关、编码器索引信号)。
  • MC_MoveAbsolute:定位。在机械臂中,通常用于点到点(PTP)运动,例如从当前位置移动到关节角度 45° 的位置。
  • MC_MoveVelocity:连续速度运动。在机械臂手动示教模式中,操作员通过摇杆控制各关节以指定速度连续旋转。
  • MC_Stop:紧急停止。立即停止轴运动,停止模式可配置(如快速停止、急停)。
实战经验:在机械臂项目中,MC_Power 的 Enable 信号应连接到安全继电器输出,确保急停回路断开时轴立即禁用。同时,MC_Home 应在 MC_Power 使能后、任何运动指令前执行,否则定位指令会因位置无效而报错。

4.3 Part 2(扩展功能)详解

Part 2 于 2005 年发布,是对 Part 1 的扩展,重点解决多轴协调与轴组(Axis Group)运动问题。对于工业机械臂而言,Part 2 才是真正体现机械臂控制价值的部分,因为它支持笛卡尔空间直线、圆弧插补以及电子齿轮/凸轮同步。

4.3.1 轴组(Axis Group)抽象

Part 2 引入了 AXIS_GROUP_REF 数据类型,用于表示一组协同工作的轴(例如机械臂的 6 个关节轴)。轴组必须通过 MC_GroupEnable 使能,然后才能执行多轴协调运动。轴组中的每个轴仍然拥有独立的 Part 1 状态机,但轴组本身也有自己的状态(如 GroupStandstill、GroupMoving、GroupErrorStop)。

4.3.2 核心扩展功能块

功能块功能描述机械臂应用场景
MC_GroupEnable / MC_GroupDisable使能/禁用轴组机械臂上电后,先使能各关节轴,再使能轴组
MC_MoveLinearAbsolute笛卡尔空间直线插补(位置)机械臂 TCP 从 A 点直线移动到 B 点
MC_MoveCircularAbsolute笛卡尔空间圆弧插补弧焊、涂胶等需要圆弧轨迹的工艺
MC_GearIn电子齿轮同步机械臂与传送带同步跟踪(动态抓取)
MC_CamIn电子凸轮同步机械臂与旋转主轴同步完成固定轨迹
MC_AdditiveMove叠加运动在已有轨迹上叠加小幅修正(如视觉引导偏移)

4.3.3 坐标变换与工具补偿

Part 2 还定义了 MC_SetPosition、MC_SetDynamics 等功能块,用于设置轴组位置参考和动态特性。在机械臂应用中,MC_SetPosition 常用于在回零后设置工具中心点(TCP)的初始坐标。此外,Part 2 允许通过 MC_Transform 功能块实现用户自定义坐标变换,但实际项目中更多依赖机器人厂商提供的专用运动学库(如 KUKA、ABB 的专有函数),PLCopen 仅提供通用框架。

注意:Part 2 的轴组运动功能块要求所有参与插补的轴必须属于同一个轴组,且轴组内所有轴必须使用相同的插补周期(通常为 1ms 或 2ms)。如果机械臂各关节的伺服驱动器通信周期不一致,会导致轨迹抖动甚至报错。

4.4 与 IEC 61131-3 的关系

IEC 61131-3 是 PLC 编程语言的标准,定义了五种编程语言(IL、ST、LD、FBD、SFC)以及公共元素(数据类型、变量、POU、任务)。PLCopen 运动控制规范完全构建在 IEC 61131-3 之上,具体体现在以下三个层面:

  1. 语言基础:PLCopen 功能块使用 ST 或 FBD 语言编写,遵循 IEC 61131-3 的 POU(程序组织单元)语法。运动控制程序与逻辑控制程序(如气缸、夹具)可以无缝集成在同一个 PLC 程序中。
  2. 数据类型扩展:PLCopen 定义了 AXIS_REF、AXIS_GROUP_REF 等特殊数据类型,这些类型是对 IEC 61131-3 基本数据类型(如 INT、REAL、BOOL)的扩展,但遵循其类型系统规则。
  3. 任务调度:运动控制功能块必须在 IEC 61131-3 的任务(Task)中周期执行。通常,运动控制任务被配置为固定周期(如 1ms)的高优先级任务,而逻辑控制任务可以是事件触发或较慢周期(如 10ms)。

这种层次关系意味着:IEC 61131-3 提供了“语言和运行环境”,PLCopen 提供了“运动控制领域的专用库”。没有 IEC 61131-3,PLCopen 功能块无法执行;没有 PLCopen,IEC 61131-3 只能处理逻辑控制,无法高效实现复杂的多轴协调。

4.5 案例拆解:基于 PLCopen 的六轴机械臂 PTP 运动实现

下面通过一个具体案例,展示如何综合运用 Part 1 和 Part 2 实现机械臂的点到点运动。

背景与约束:某 3C 电子装配线需要一台六轴关节机械臂完成 PCB 板元件的插装任务。机械臂控制器采用支持 PLCopen 的 PLC(如 Beckhoff CX5140),伺服驱动器通过 EtherCAT 总线连接。要求:机械臂从待机位(各关节角度均为 0°)运动到目标位(J1=30°, J2=-45°, J3=90°, J4=0°, J5=45°, J6=0°),运动过程中 TCP 轨迹无严格要求,但要求总时间小于 2 秒,且运动平稳无冲击。

初始现象与目标:初始状态机械臂处于 Disabled 状态。目标是通过 PLCopen 功能块实现关节空间 PTP 运动,并监控运动完成状态。

关键输入数据:目标关节角度数组 TargetPos[1..6] = [30, -45, 90, 0, 45, 0](单位:度);最大关节速度 Vel[1..6] = [60, 60, 60, 90, 90, 120](单位:度/秒);加速度 Acc = 200 度/秒²。

操作步骤:

  1. 轴使能:对每个关节轴调用 MC_Power,Enable:=TRUE。等待所有轴进入 Standstill 状态。
  2. 轴组使能:调用 MC_GroupEnable,将 6 个轴绑定为轴组。等待 GroupStandstill。
  3. 回零操作:调用 MC_Home 对每个轴执行回零(假设使用值编码器,回零仅需设置当前位置为 0)。
  4. 执行 PTP 运动:调用 MC_MoveAbsolute 分别对每个轴设置目标位置和速度。由于是关节空间 PTP,各轴独立运动,但 PLCopen 允许同时触发多个 MC_MoveAbsolute 指令。
  5. 等待完成:轮询所有轴的 Done 输出,当全部为 TRUE 时,运动完成。

代码示意(ST 语言):

// 轴使能
FOR i := 1 TO 6 DO
    MC_Power_Axis[i](Enable := TRUE, Axis := AxisRef[i]);
END_FOR;

// 轴组使能
MC_GroupEnable_0(Enable := TRUE, Group := GroupRef);

// 回零
FOR i := 1 TO 6 DO
    MC_Home_Axis[i](Execute := TRUE, Axis := AxisRef[i], Position := 0);
END_FOR;

// PTP 运动
MC_MoveAbsolute_J1(Execute := TRUE, Axis := AxisRef[1], Position := 30, Velocity := 60, Acceleration := 200);
MC_MoveAbsolute_J2(Execute := TRUE, Axis := AxisRef[2], Position := -45, Velocity := 60, Acceleration := 200);
// ... 其余轴类似

// 等待完成
WHILE NOT (MC_MoveAbsolute_J1.Done AND MC_MoveAbsolute_J2.Done AND ... ) DO
    // 循环等待
END_WHILE;

结果对比与复盘:实际运行中,各轴同时启动,但由于各轴目标位置不同,运动时间由行程最长的轴决定(J3 轴行程 90°,耗时约 1.2 秒),满足 2 秒要求。若使用 Part 2 的 MC_MoveLinearAbsolute 进行笛卡尔直线插补,则需进行逆运动学计算,PLCopen 本身不提供逆解,需用户自行实现或调用厂商库。因此,在不需要严格轨迹的场合,关节空间 PTP 更简单高效。

复盘经验:PLCopen Part 1 适合单轴独立控制,Part 2 适合多轴协调。在机械臂应用中,应根据工艺需求选择:点焊、搬运等 PTP 作业优先使用 Part 1;弧焊、涂胶等连续轨迹作业必须使用 Part 2 的插补功能。同时,务必注意轴组内所有轴的插补周期一致性。

4.6 常见误区与总结

在实际工程中,工程师对 PLCopen 的理解常存在以下误区:

  • 误区一:认为 PLCopen 是硬件驱动库。实际上,PLCopen 是软件接口规范,硬件驱动由厂商实现。用户只需调用标准功能块,无需关心寄存器级操作。
  • 误区二:混淆 Part 1 和 Part 2 的适用场景。Part 1 的 MC_MoveAbsolute 是单轴运动,不能实现多轴直线插补。若在机械臂中直接对 6 个轴同时调用 MC_MoveAbsolute,TCP 轨迹是曲线而非直线。
  • 误区三:忽略轴组状态管理。轴组使能后,各轴仍可独立运动,但轴组运动指令(如 MC_MoveLinearAbsolute)会覆盖轴的运动状态。若在轴组运动过程中对单个轴执行 MC_Stop,可能导致轴组报错。
  • 误区四:认为 PLCopen 包含运动学变换。PLCopen 不提供正/逆运动学算法,这些需要用户基于机械臂 DH 参数自行编写或使用厂商库。