4. XTS单动子运动控制基础

XTS(eXtended Transport System)虽然以多工位同步运动著称,但任何复杂的多动子协同都建立在“单个动子能被精确、可重复地控制”这一基础之上。本节聚焦于单个 XTS 动子的基础运动控制,使用 TwinCAT 中标准的 PLCopen 运动控制功能块——MC_Power、MC_MoveAbsolute、MC_MoveVelocity、MC_MoveRelative、MC_Stop、MC_Reset 等——完成使能、点动、绝对定位和速度控制,并通过示波器或 TwinCAT Scope 观察实际运行效果。

一、XTS 动子轴与 PLCopen 的对应关系

在 TwinCAT 中,每个 XTS 动子都被映射为一个独立的“轴”(Axis),其类型为 XTS 动子轴,遵循 PLCopen Motion Control 规范。这意味着:

  • 动子轴拥有自己的 Axis 引用(如 Axis1、Axis2),可独立使能、独立运动;
  • 动子轴的位置单位默认为毫米(mm),速度单位为 mm/s,加速度为 mm/s²;
  • 动子轴的位置参考系为 XTS 轨道上的绝对位置,通常以轨道起点为 0,沿运动正方向递增;
  • 动子轴支持 PLCopen 标准状态机:Disabled → Standstill → Discrete Motion / Continuous Motion → Stopping 等。

需要特别注意的是:XTS 动子轴与普通伺服轴在“物理约束”上有本质区别——动子之间不能碰撞,轨道是闭合的,因此绝对定位的目标位置必须落在轨道有效行程内,且不能与其它动子发生干涉。本节只控制单个动子,暂不涉及多动子避让,但目标位置仍需在轨道范围内。

二、使能:MC_Power 是运动的前提

任何运动功能块执行前,动子轴必须处于“使能”状态。使用 MC_Power 功能块:

MC_Power_1(
    Axis    := Axis1,
    Enable  := TRUE,
    Enable_Positive := TRUE,
    Enable_Negative := TRUE,
    Status  => bPowerStatus,
    Error   => bPowerError,
    ErrorID => nPowerErrorID
);

当 Enable 为 TRUE 且无错误时,Status 输出为 TRUE,动子轴进入 Standstill 状态,此时动子被“锁住”在当前位置,可以抵抗外力。若 Error 为 TRUE,需通过 MC_Reset 清除错误后重新使能。实际调试中,常见错误包括:动子未在轨道上被识别、轨道未上电、动子位置超出软限位等。

三、点动:MC_MoveVelocity 与 MC_MoveRelative

点动(Jog)是调试阶段最常用的操作,用于手动移动动子到目标附近。有两种实现方式:

  • 速度点动:使用 MC_MoveVelocity,给定速度值,动子持续运动,直到收到停止命令或触发限位。适合长距离快速移动。
  • 相对点动:使用 MC_MoveRelative,给定距离和速度,动子移动指定距离后自动停止。适合精确微调。

速度点动示例:

MC_MoveVelocity_1(
    Axis       := Axis1,
    Execute    := bJogForward,
    Velocity   := 200.0,   // mm/s
    Acceleration := 1000.0, // mm/s²
    Deceleration := 1000.0,
    Direction  := MC_Positive_Direction,
    InVelocity => bInVelocity,
    Busy       => bJogBusy,
    Error      => bJogError,
    ErrorID    => nJogErrorID
);

当 Execute 上升沿触发后,动子以 200 mm/s 正向运动,InVelocity 变为 TRUE 表示已达到设定速度。松开点动按钮时,将 Execute 置 FALSE 并调用 MC_Stop 或 MC_Halt 使动子减速停止。

相对点动示例:

MC_MoveRelative_1(
    Axis       := Axis1,
    Execute    := bJogStep,
    Distance   := 50.0,    // mm
    Velocity   := 100.0,   // mm/s
    Acceleration := 500.0,
    Deceleration := 500.0,
    Done       => bJogDone,
    Busy       => bJogBusy,
    Error      => bJogError,
    ErrorID    => nJogErrorID
);

每次上升沿,动子正向移动 50 mm。若 Distance 为负值,则反向移动。点动过程中应观察 Busy、Done 和实际位置反馈,确认动子是否按预期移动。

四、绝对定位:MC_MoveAbsolute

绝对定位是 XTS 单动子控制的核心。使用 MC_MoveAbsolute,给定目标绝对位置,动子从当前位置运动到目标位置并停止。

MC_MoveAbsolute_1(
    Axis       := Axis1,
    Execute    := bMoveAbs,
    Position   := 500.0,   // mm,轨道绝对位置
    Velocity   := 300.0,   // mm/s
    Acceleration := 1000.0,
    Deceleration := 1000.0,
    Direction  := MC_Shortest_Way,
    Done       => bAbsDone,
    Busy       => bAbsBusy,
    Active     => bAbsActive,
    Error      => bAbsError,
    ErrorID    => nAbsErrorID
);

关键参数说明:

  • Position:目标绝对位置,必须在轨道有效行程内,且不能与其它动子冲突;
  • Direction:可选 MC_Shortest_Way、MC_Positive_Direction、MC_Negative_Direction。对于闭合轨道,MC_Shortest_Way 会选择较短路径;
  • Done:动子到达目标位置并稳定后置 TRUE;
  • Active:功能块正在执行时为 TRUE。

实际调试时,建议先用较低速度(如 100 mm/s)和较低加速度(如 500 mm/s²)测试,确认动子运动方向、目标位置和停止精度符合预期后,再逐步提高参数。

五、速度控制:MC_MoveVelocity 的持续运行

除了点动,MC_MoveVelocity 也用于让动子以恒定速度持续运行,直到收到新的运动命令或停止命令。这在需要动子匀速通过某个区域(如检测工位)时非常有用。

MC_MoveVelocity_2(
    Axis       := Axis1,
    Execute    := bRunConst,
    Velocity   := 150.0,
    Acceleration := 800.0,
    Deceleration := 800.0,
    Direction  := MC_Positive_Direction,
    InVelocity => bConstInVel,
    Busy       => bConstBusy,
    Error      => bConstError,
    ErrorID    => nConstErrorID
);

当 InVelocity 为 TRUE 时,动子已进入匀速段。此时若触发 MC_MoveAbsolute,动子会平滑过渡到新的定位任务;若触发 MC_Stop,则按设定减速度停止。

六、停止与复位:MC_Stop 与 MC_Reset

任何运动过程中,都可以通过 MC_Stop 使动子按指定减速度停止:

MC_Stop_1(
    Axis       := Axis1,
    Execute    := bStop,
    Deceleration := 2000.0,
    Done       => bStopDone,
    Busy       => bStopBusy,
    Error      => bStopError,
    ErrorID    => nStopErrorID
);

停止完成后,动子轴进入 Stopping 状态,需再次使能或执行新的运动命令才能继续运动。若出现错误,使用 MC_Reset 清除错误:

MC_Reset_1(
    Axis    := Axis1,
    Execute := bReset,
    Done    => bResetDone,
    Error   => bResetError,
    ErrorID => nResetErrorID
);

七、观察实际运行效果

在 TwinCAT 中,可以通过以下方式观察动子实际运行效果:

  • TwinCAT Scope:添加动子轴的位置、速度、加速度曲线,观察运动过程中的加减速是否平滑、有无超调;
  • 在线变量监控:监控 Axis1.NcToPlc.ActPos、Axis1.NcToPlc.ActVelo 等实际值;
  • XTS 状态灯:观察动子上的 LED 指示灯,确认动子是否被正确识别和使能;
  • 物理观察:直接观察动子在轨道上的运动方向、停止位置和运动平稳性。

判断运动是否正常的关键指标包括:定位误差(实际位置与目标位置之差)、速度曲线是否平滑、停止时有无过冲或振荡、Done 信号是否在合理时间内置位。若定位误差过大,可检查机械阻力、动子负载、加速度设置是否合理;若运动方向相反,检查 Direction 参数和坐标系定义。

XTS 单动子 PLCopen 运动控制功能块关系图 XTS 闭合轨道(位置参考系:起点 0 mm,正方向向右递增) 动子 0 200 400 600 800 mm 目标 500 mm MC_Power 使能动子轴 Status / Error MC_MoveVelocity 速度点动 / 匀速运行 InVelocity / Busy MC_MoveAbsolute 绝对定位到目标位置 Done / Active MC_MoveRelative 相对点动 / 微调 Done / Busy PLCopen 动子轴状态机(简化) Disabled Standstill Discrete Motion Continuous Motion Enable MoveAbs MoveVel Done / Stop 后回到 Standstill 注:所有功能块均以 Axis1 为操作对象,Execute 上升沿触发,Done/Busy/Error 用于状态判断

八、调试要点与常见问题

在实际操作中,以下几点值得特别注意:

  • Execute 触发方式:PLCopen 功能块的 Execute 是上升沿触发,若保持 TRUE 不会重复执行。需要每次运动前重新给上升沿。
  • 功能块互锁:同一动子轴同一时间只能有一个运动功能块处于 Active 状态。若同时触发 MC_MoveAbsolute 和 MC_MoveVelocity,后触发的会覆盖先触发的,或产生错误。
  • 速度与加速度匹配:XTS 动子的最大速度和加速度受轨道长度、动子数量、负载等限制。建议从低参数开始,逐步提高。
  • 位置范围检查:绝对定位的 Position 必须在轨道有效范围内,否则会触发错误。对于闭合轨道,需注意“绕回”逻辑。
  • 错误处理:每个功能块都应监控 Error 和 ErrorID,出现错误后先 MC_Reset,再重新使能。
建议在调试单动子时,先使用 MC_MoveVelocity 以低速让动子沿轨道运行一圈,观察轨道上是否有障碍、动子是否平稳、位置反馈是否连续。确认无误后,再测试 MC_MoveAbsolute 的定位精度和重复性。
XTS 轨道上若存在多个动子,单动子运动时仍需注意与其它动子的间距。本节仅控制单个动子,实际多动子系统中必须加入防碰撞逻辑,否则可能造成动子碰撞和硬件损坏。

通过本节的学习,读者应能独立完成:使能单个 XTS 动子、以速度模式点动、以绝对定位模式移动到指定位置、以相对模式微调,并能通过 TwinCAT Scope 观察位置和速度曲线,判断运动是否正常。这是后续多动子同步控制的基础,务必在单动子上反复练习,直到能熟练使用各功能块并快速定位常见错误。