4. 绝对定位与相对定位功能块应用

两种定位方式的本质差异

在 PLCopen 运动控制规范中,MC_MoveAbsolute 与 MC_MoveRelative 都用于把轴从当前位置移动到目标位置,但它们的“目标”定义方式完全不同:

  • MC_MoveAbsolute:目标由坐标系中的绝对位置决定,例如把轴移动到 250.0 mm。无论轴当前在哪里,最终都停在 250.0 mm。它需要轴已建立有效的参考点(回零完成或绝对值编码器已校准)。
  • MC_MoveRelative:目标由相对当前位置的距离决定,例如从当前位置再前进 100.0 mm。轴最终停在哪里取决于执行瞬间的当前位置,因此同一段程序在不同起点会得到不同终点。

理解这一点后,两者的执行结果差异就非常直观:绝对定位是“去某个坐标”,相对定位是“走一段距离”。下面这张图对比了同一轴在相同起点、相同速度参数下,分别执行绝对定位与相对定位时的位置指令与反馈曲线。

绝对定位 vs 相对定位:位置指令与反馈曲线对比 MC_MoveAbsolute 目标:绝对位置 250.0 mm 时间 t 位置 250 100 0 目标 250.0 起点 0.0 终点 250.0 位置指令 位置反馈 MC_MoveRelative 目标:相对距离 +100.0 mm 时间 t 位置 250 100 0 目标 100.0 起点 0.0 终点 100.0 相对距离 +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。若在运动前手动移动了轴,终点会随之改变。
  • 曲线形状:两者在相同速度/加减速参数下,运动段形状一致,差异仅体现在目标位置的确定方式上。

实操验证步骤

  1. 轴使能并回零,确认当前位置为 0.0 mm。
  2. 触发 MC_MoveAbsolute,目标 250.0 mm,观察轴运动至 250.0 mm 后 Done 置位。
  3. 手动将轴点动到 50.0 mm 位置(或使用相对定位移动 -200.0 mm)。
  4. 再次触发 MC_MoveAbsolute,目标仍为 250.0 mm,观察轴从 50.0 mm 运动至 250.0 mm。
  5. 触发 MC_MoveRelative,距离 +100.0 mm,观察轴从 250.0 mm 运动至 350.0 mm。
  6. 再次触发 MC_MoveRelative,距离 +100.0 mm,观察轴从 350.0 mm 运动至 450.0 mm。
  7. 对比两次绝对定位的终点一致性,以及两次相对定位的终点递增关系。
常见问题:
  • 绝对定位前未回零:轴可能报错或运动到错误位置,因为绝对坐标系未建立。
  • 相对定位距离符号错误:正负号决定运动方向,需与轴的正方向定义一致。
  • 在 Busy 期间重复触发 Execute:可能导致命令被忽略或报错,应等待 Done 或 Error 后再触发下一次。
  • 速度/加减速设置过大:可能导致轴过冲或驱动器报警,应根据机械负载合理设置。

两种模式的选择依据

对比项MC_MoveAbsoluteMC_MoveRelative
目标定义坐标系中的绝对位置相对当前位置的距离
是否依赖回零是,必须已建立参考点否,但需已知当前位置
重复执行结果终点始终相同终点逐次累加
典型应用定位到固定工位、换刀点定长送料、增量进给
参数重点Position、DirectionDistance(正负号)

选择原则:需要“回到某个确定坐标”时用绝对定位;需要“在当前基础上走一段固定距离”时用相对定位。两者可以混合使用,例如先绝对定位到安全高度,再相对定位下压指定深度。