4. 绝对定位与相对定位功能块应用
两种定位方式的本质差异
在 PLCopen 运动控制规范中,MC_MoveAbsolute 与 MC_MoveRelative 都用于把轴从当前位置移动到目标位置,但它们的“目标”定义方式完全不同:
- MC_MoveAbsolute:目标由坐标系中的绝对位置决定,例如把轴移动到 250.0 mm。无论轴当前在哪里,最终都停在 250.0 mm。它需要轴已建立有效的参考点(回零完成或绝对值编码器已校准)。
- MC_MoveRelative:目标由相对当前位置的距离决定,例如从当前位置再前进 100.0 mm。轴最终停在哪里取决于执行瞬间的当前位置,因此同一段程序在不同起点会得到不同终点。
理解这一点后,两者的执行结果差异就非常直观:绝对定位是“去某个坐标”,相对定位是“走一段距离”。下面这张图对比了同一轴在相同起点、相同速度参数下,分别执行绝对定位与相对定位时的位置指令与反馈曲线。
功能块调用与参数设置
在博世力士乐 IndraWorks / ctrlX PLC 环境中,两个功能块均属于 PLCopen Motion 库。以下示例基于结构化文本(ST),假设已声明轴变量 Axis1(类型 AXIS_REF),且轴已通过 MC_Power 使能、回零完成。
// 变量声明
VAR
Axis1 : AXIS_REF;
fbMoveAbs : MC_MoveAbsolute;
fbMoveRel : MC_MoveRelative;
bExecAbs : BOOL := FALSE;
bExecRel : BOOL := FALSE;
bAbsDone : BOOL;
bRelDone : BOOL;
rAbsTarget : REAL := 250.0; // 绝对目标位置 mm
rRelDistance : REAL := 100.0; // 相对移动距离 mm
rVelocity : REAL := 50.0; // 速度 mm/s
rAccel : REAL := 200.0; // 加速度 mm/s²
rDecel : REAL := 200.0; // 减速度 mm/s²
END_VAR
// ---- 绝对定位调用 ----
fbMoveAbs(
Axis := Axis1,
Execute := bExecAbs,
Position := rAbsTarget,
Velocity := rVelocity,
Acceleration:= rAccel,
Deceleration:= rDecel,
Direction := mcPositiveDirection,
Done => bAbsDone
);
// ---- 相对定位调用 ----
fbMoveRel(
Axis := Axis1,
Execute := bExecRel,
Distance := rRelDistance,
Velocity := rVelocity,
Acceleration:= rAccel,
Deceleration:= rDecel,
Done => bRelDone
);
关键参数说明:
Position(绝对定位):目标位置的绝对值,单位与轴配置一致(通常为 mm 或度)。Distance(相对定位):相对于执行瞬间当前位置的增量,正值表示正方向,负值表示反方向。Velocity、Acceleration、Deceleration:两者共用,决定运动曲线形状。Direction:仅绝对定位需要,用于处理目标位置与当前位置关系不明确时的方向选择。
执行时序与状态观察
两个功能块都遵循 PLCopen 的 Execute 上升沿触发机制:Execute 从 FALSE 变为 TRUE 时启动运动,Busy 置位,运动完成后 Done 置位一个周期。若在 Busy 期间再次触发 Execute,功能块会返回 Error 或忽略新命令(取决于具体实现)。
观察位置曲线时,重点对比以下几点:
- 绝对定位:无论起点在哪里,
Done置位时反馈位置应稳定在Position设定值附近(考虑跟随误差)。 - 相对定位:
Done置位时反馈位置 = 执行瞬间位置 +Distance。若在运动前手动移动了轴,终点会随之改变。 - 曲线形状:两者在相同速度/加减速参数下,运动段形状一致,差异仅体现在目标位置的确定方式上。
实操验证步骤
- 轴使能并回零,确认当前位置为 0.0 mm。
- 触发
MC_MoveAbsolute,目标 250.0 mm,观察轴运动至 250.0 mm 后Done置位。 - 手动将轴点动到 50.0 mm 位置(或使用相对定位移动 -200.0 mm)。
- 再次触发
MC_MoveAbsolute,目标仍为 250.0 mm,观察轴从 50.0 mm 运动至 250.0 mm。 - 触发
MC_MoveRelative,距离 +100.0 mm,观察轴从 250.0 mm 运动至 350.0 mm。 - 再次触发
MC_MoveRelative,距离 +100.0 mm,观察轴从 350.0 mm 运动至 450.0 mm。 - 对比两次绝对定位的终点一致性,以及两次相对定位的终点递增关系。
常见问题:
- 绝对定位前未回零:轴可能报错或运动到错误位置,因为绝对坐标系未建立。
- 相对定位距离符号错误:正负号决定运动方向,需与轴的正方向定义一致。
- 在
Busy期间重复触发Execute:可能导致命令被忽略或报错,应等待Done或Error后再触发下一次。 - 速度/加减速设置过大:可能导致轴过冲或驱动器报警,应根据机械负载合理设置。
两种模式的选择依据
| 对比项 | MC_MoveAbsolute | MC_MoveRelative |
|---|---|---|
| 目标定义 | 坐标系中的绝对位置 | 相对当前位置的距离 |
| 是否依赖回零 | 是,必须已建立参考点 | 否,但需已知当前位置 |
| 重复执行结果 | 终点始终相同 | 终点逐次累加 |
| 典型应用 | 定位到固定工位、换刀点 | 定长送料、增量进给 |
| 参数重点 | Position、Direction | Distance(正负号) |
选择原则:需要“回到某个确定坐标”时用绝对定位;需要“在当前基础上走一段固定距离”时用相对定位。两者可以混合使用,例如先绝对定位到安全高度,再相对定位下压指定深度。