3. PLCopen Part 1 公共元素:数据类型、轴对象、错误处理、MC_Power等基础功能块
PLCopen 运动控制规范 Part 1 是整个机械臂伺服控制软件架构的基石。它定义了与具体硬件无关的公共元素,包括数据类型体系、轴对象模型、统一的错误处理机制以及以 MC_Power 为代表的基础功能块。理解这些公共元素,是后续学习单轴运动、多轴协调和机械臂轨迹规划的前提。本章将深入剖析这些核心概念,并结合实际工程案例,说明如何在机械臂伺服控制系统中正确应用这些规范。
上图清晰地展示了 PLCopen Part 1 公共元素之间的逻辑关系:轴对象(AXIS_REF)是整个运动控制的核心数据载体,它关联着数据类型体系、错误处理机制以及基础功能块。数据类型为功能块提供标准化的输入输出参数定义,错误处理机制确保系统在异常情况下能够安全、可控地响应,而基础功能块(如 MC_Power)则是应用程序操作轴对象的唯一入口。下面我们将逐一深入探讨这些元素。
3.1 数据类型体系:从基础到运动控制专用
3.1.1 核心原理:标准化的数据契约
PLCopen 规范定义了一套完整的数据类型,用于统一不同厂商运动控制器的数据接口。这些类型分为基础数据类型(如 BOOL、INT、REAL)和运动控制专用数据类型。专用数据类型是规范的核心价值所在,它们封装了运动控制的复杂属性,使得应用程序可以跨平台移植。
在机械臂伺服控制中,最常用的专用数据类型包括:MC_POWER(使能/禁用轴)、MC_MOVEVELOCITY(速度运动)、MC_HOME(回零)、MC_DIRECTION(方向枚举)、MC_BUFFER_MODE(缓冲模式)以及 MC_AXIS_STATE(轴状态枚举)。这些类型不仅定义了数据结构,还规定了取值范围和语义。
| 数据类型 | 用途 | 关键字段/取值 | 机械臂应用场景 |
|---|---|---|---|
| MC_POWER | 控制伺服使能 | Enable (BOOL), Status (BOOL) | 关节上电/下电控制 |
| MC_MOVEVELOCITY | 速度模式运动 | Velocity (REAL), Direction (MC_DIRECTION) | 手动示教、点动 |
| MC_DIRECTION | 运动方向枚举 | MC_POSITIVE, MC_NEGATIVE, MC_CURRENT | 正/反向运动控制 |
| MC_BUFFER_MODE | 运动缓冲策略 | MC_ABORTING, MC_BUFFERED, MC_BLENDING | 连续轨迹规划 |
| MC_AXIS_STATE | 轴状态枚举 | STANDSTILL, HOMING, DISCRETE, CONTINUOUS, STOPPING | 状态机监控 |
| MC_ERROR_CODE | 错误代码 | 16#0000 (无错误), 16#0001 (参数错误) 等 | 故障诊断 |
3.1.2 判断方法:如何选择正确的数据类型
在实际编程中,选择数据类型需遵循以下原则:
- 功能匹配:根据所需运动功能选择对应的功能块及其数据类型。例如,需要连续轨迹运动时,应使用 MC_MOVEPATH 或带 MC_BUFFER_MODE 的 MC_MOVEABSOLUTE。
- 精度要求:位置和速度参数应使用 REAL(32位浮点)以保证精度,而状态标志使用 BOOL。
- 枚举优先:对于方向、缓冲模式等有限集合参数,应使用 PLCopen 定义的枚举类型,避免使用魔法数字。
3.1.3 案例拆解:机械臂关节使能的数据类型应用
假设我们正在调试一台六轴机械臂的关节 1 伺服驱动器。初始现象是:按下使能按钮后,伺服电机并未上电,且控制器报错“参数类型不匹配”。通过检查代码发现,工程师在调用 MC_Power 功能块时,将 Enable 参数错误地声明为 INT 类型,而规范要求 BOOL 类型。
分析过程:PLCopen 功能块的输入参数有严格的类型检查。INT 类型的 Enable 变量虽然值为 1 时逻辑上为真,但编译器无法自动转换,导致功能块无法正确识别。
操作步骤:
- 将 Enable 变量声明改为 BOOL 类型。
- 使用 TRUE/FALSE 常量或 BOOL 变量进行赋值。
- 重新编译并下载程序。
结果对比:修改后,伺服驱动器正常使能,电机保持力矩输出。此案例说明,严格遵守 PLCopen 数据类型定义是避免低级错误的关键。
3.2 轴对象:运动控制的核心抽象
3.2.1 核心原理:轴对象的结构与生命周期
轴对象(AXIS_REF)是 PLCopen 中最重要的数据结构,它封装了轴的物理属性、当前状态、控制参数和错误信息。在 IEC 61131-3 环境中,AXIS_REF 通常被实现为结构体或功能块实例。每个伺服轴(关节)对应一个独立的轴对象实例。
轴对象的核心内容包括:
- 轴标识:唯一标识符,用于关联物理驱动器。
- 状态信息:当前轴状态(如 Standstill、Homing、Continuous 等)。
- 参数引用:指向轴参数(如增益、速度限制、加速度)的指针或引用。
- 错误信息:最近一次错误代码和错误时间戳。
3.2.2 操作流程:轴对象的初始化与使用
在机械臂系统中,轴对象的正确初始化是系统稳定运行的前提。推荐流程如下:
- 声明轴对象:在全局变量列表中声明 AXIS_REF 类型的变量,如
Axis1 : AXIS_REF;。 - 关联物理轴:通过配置工具或 MC_ReadParameter 将轴对象与具体的伺服驱动器映射。
- 初始化参数:在启动时调用 MC_ReadParameter 或直接写入默认参数。
- 使能轴:调用 MC_Power 功能块,将 Enable 置为 TRUE。
- 执行运动:调用运动功能块(如 MC_MOVEABSOLUTE)。
3.2.3 实战场景:多轴协调中的轴对象管理
考虑一个 SCARA 机械臂,包含 4 个轴(J1-J4)。在运行过程中,我们需要实时监控每个轴的状态,并在任一轴故障时触发紧急停止。此时,轴对象的状态字段(如 ErrorID)成为关键判断依据。
实现方案:
// 轴对象声明
VAR_GLOBAL
AxisJ1 : AXIS_REF;
AxisJ2 : AXIS_REF;
AxisJ3 : AXIS_REF;
AxisJ4 : AXIS_REF;
END_VAR
// 故障监控逻辑
IF AxisJ1.ErrorID <> 0 OR AxisJ2.ErrorID <> 0 THEN
// 触发急停
MC_Stop(J1, StopMode := MC_IMMEDIATE_STOP);
MC_Stop(J2, StopMode := MC_IMMEDIATE_STOP);
END_IF
此案例展示了轴对象在故障传播和联动控制中的核心作用。通过统一访问轴对象的错误字段,可以简化多轴系统的监控逻辑。
3.3 错误处理:构建健壮的机械臂控制系统
3.3.1 核心原理:错误检测与响应机制
PLCopen 的错误处理机制基于功能块的 ErrorID 和 ErrorIDOccurred 输出。当功能块执行失败时,ErrorIDOccurred 变为 TRUE,同时 ErrorID 返回具体的错误代码。此外,轴对象本身也维护错误状态,可通过 MC_ReadAxisError 功能块读取。
错误处理的关键在于:
- 及时检测:在每个扫描周期检查 ErrorIDOccurred。
- 分级响应:根据错误严重程度采取不同措施(如记录、警告、停止、急停)。
- 恢复策略:使用 MC_Reset 清除可恢复错误,并重新初始化轴。
3.3.2 判断方法:错误代码分析与处理流程
当机械臂出现异常时,推荐以下排查流程:
- 读取错误代码:通过 MC_ReadAxisError 获取轴错误代码。
- 查阅错误手册:对照 PLCopen 标准错误代码表或厂商扩展代码。
- 分析根因:常见原因包括参数越界、通信超时、硬件过流等。
- 执行恢复:对于瞬时错误,调用 MC_Reset;对于持续性错误,需检查硬件。
| 错误代码 (16进制) | 含义 | 常见原因 | 处理建议 |
|---|---|---|---|
| 0x0001 | 参数无效 | 位置/速度超出范围 | 检查运动指令参数 |
| 0x0002 | 轴未使能 | 未调用 MC_Power 或使能丢失 | 重新使能轴 |
| 0x0003 | 通信超时 | 总线故障、驱动器掉线 | 检查通信线路 |
| 0x0010 | 过流 | 电机堵转、参数不当 | 检查机械负载和增益 |
| 0x0020 | 过压 | 制动能量过大 | 增加制动电阻 |
3.3.3 案例拆解:机械臂运行中突然停机
背景与约束:某焊接机械臂在连续运行 2 小时后突然停机,操作面板显示“轴 3 通信超时”。该产线要求停机时间不超过 15 分钟。
初始现象:轴 3 的 ErrorID 为 0x0003,且 ErrorIDOccurred 为 TRUE。重新上电后,系统恢复正常,但运行 30 分钟后再次故障。
分析判断过程:
- 检查通信线路:发现轴 3 的 EtherCAT 线缆有轻微磨损,但未断路。
- 检查驱动器温度:轴 3 驱动器温度高达 78°C(接近上限 85°C)。
- 分析日志:故障发生前,轴 3 的电流持续偏高(平均 8A,额定 6A)。
实际操作步骤:
- 更换磨损的通信线缆,并加装线缆保护套。
- 在轴 3 驱动器加装散热风扇,降低环境温度。
- 调整机械臂的加速度参数,从 5 m/s² 降至 3 m/s²,减少峰值电流。
结果对比:改造后,轴 3 驱动器温度稳定在 65°C,通信超时故障未再出现。此案例表明,错误处理不仅是软件逻辑,还需要结合硬件散热和机械负载的综合分析。
3.4 MC_Power 等基础功能块详解
3.4.1 核心原理:MC_Power 的功能与内部机制
MC_Power 是 PLCopen 中最基础的功能块,用于控制伺服轴的使能与禁用。其输入参数包括 Enable(BOOL)和 RegulatorOn(BOOL),输出参数包括 Status(BOOL)和 ErrorID。当 Enable 为 TRUE 时,轴被使能,伺服电机进入力矩控制模式;当 Enable 为 FALSE 时,轴被禁用,电机自由停机。
在机械臂应用中,MC_Power 通常用于以下场景:
- 上电初始化:依次使能所有关节轴。
- 紧急停止:同时禁用所有轴,使机械臂立即停止。
- 维护模式:单独使能某个关节,便于手动盘车。
3.4.2 操作流程:MC_Power 的标准调用方法
以下是一个标准的 MC_Power 调用示例:
// 功能块实例化
MC_Power_0 : MC_Power;
// 调用
MC_Power_0(
Enable := bEnableAxis1,
RegulatorOn := TRUE,
Status => bAxis1Powered,
ErrorID => wAxis1Error
);
关键注意事项:
- Enable 与 RegulatorOn 的区别:Enable 控制整个轴的控制逻辑,而 RegulatorOn 仅控制伺服调节器。通常两者同时为 TRUE。
- 状态反馈:Status 输出为 TRUE 仅表示轴已使能,但不代表轴已停止。需结合轴状态机判断。
- 错误处理:若 ErrorID 非零,需调用 MC_Reset 清除错误后才能重新使能。
3.4.3 实战场景:机械臂上电顺序控制
在六轴机械臂上电时,如果所有轴同时使能,可能因母线电压跌落导致部分轴使能失败。因此,需要设计分时使能逻辑。
方案设计:
- 先使能 J1、J2(大功率轴),等待 500ms。
- 再使能 J3、J4(中功率轴),等待 300ms。
- 最后使能 J5、J6(小功率轴)。
实现代码:
// 分时使能状态机
CASE nPowerState OF
0: // 使能 J1, J2
MC_Power_J1(Enable := TRUE);
MC_Power_J2(Enable := TRUE);
nPowerState := 1;
tTimer := T#0S;
1: // 等待 500ms
IF tTimer >= T#500MS THEN
nPowerState := 2;
END_IF
2: // 使能 J3, J4
MC_Power_J3(Enable := TRUE);
MC_Power_J4(Enable := TRUE);
nPowerState := 3;
tTimer := T#0S;
3: // 等待 300ms
IF tTimer >= T#300MS THEN
nPowerState := 4;
END_IF
4: // 使能 J5, J6
MC_Power_J5(Enable := TRUE);
MC_Power_J6(Enable := TRUE);
nPowerState := 5;
END_CASE
结果对比:采用分时使能后,母线电压波动从 ±15V 降至 ±5V,所有轴均一次使能成功。此案例体现了基础功能块在实际工程中的灵活运用。
3.4.4 常见误区与总结
- 误区一:认为 MC_Power 的 Status 输出表示轴已回零。实际上,Status 仅表示使能状态,回零需单独调用 MC_HOME。
- 误区二:在轴运动过程中直接禁用 MC_Power,可能导致机械臂因失去力矩而坠落。应先执行 MC_Stop 或 MC_Halt,再禁用。
- 误区三:忽略 ErrorID 的清除。在故障恢复后,必须调用 MC_Reset 清除错误标志,否则 MC_Power 无法重新使能。