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 参数和坐标系定义。
八、调试要点与常见问题
在实际操作中,以下几点值得特别注意:
- Execute 触发方式:PLCopen 功能块的
Execute是上升沿触发,若保持 TRUE 不会重复执行。需要每次运动前重新给上升沿。 - 功能块互锁:同一动子轴同一时间只能有一个运动功能块处于 Active 状态。若同时触发
MC_MoveAbsolute和MC_MoveVelocity,后触发的会覆盖先触发的,或产生错误。 - 速度与加速度匹配:XTS 动子的最大速度和加速度受轨道长度、动子数量、负载等限制。建议从低参数开始,逐步提高。
- 位置范围检查:绝对定位的
Position必须在轨道有效范围内,否则会触发错误。对于闭合轨道,需注意“绕回”逻辑。 - 错误处理:每个功能块都应监控
Error和ErrorID,出现错误后先MC_Reset,再重新使能。
MC_MoveVelocity 以低速让动子沿轨道运行一圈,观察轨道上是否有障碍、动子是否平稳、位置反馈是否连续。确认无误后,再测试 MC_MoveAbsolute 的定位精度和重复性。
通过本节的学习,读者应能独立完成:使能单个 XTS 动子、以速度模式点动、以绝对定位模式移动到指定位置、以相对模式微调,并能通过 TwinCAT Scope 观察位置和速度曲线,判断运动是否正常。这是后续多动子同步控制的基础,务必在单动子上反复练习,直到能熟练使用各功能块并快速定位常见错误。