4. XTS轴使能与基础运动控制

XTS(eXtended Transport System)的动子(Mover)在物理上由多个线圈段驱动,但在 TwinCAT 看来,每个动子都是一个独立的伺服轴。要让动子真正动起来,必须先把对应的轴对象从“未使能”推进到“运行”状态,再通过运动控制功能块下发速度或位置指令。本节围绕这条主线,讲清楚使能流程、错误复位、两种控制模式以及点动与绝对定位的实际用法。

一、轴状态机与使能流程

TwinCAT 的 NC 轴遵循 PLCopen 状态机。XTS 动子轴同样如此,其典型状态迁移为:Disabled → Errorstop → Standstill → Discrete Motion / Continuous Motion。上电后轴处于 Disabled,此时任何运动指令都不会被执行。使能的核心是调用 MC_Power,把 Enable 置 TRUE,并观察 Status 与 Axis.Status 反馈。

XTS 与普通伺服的一个关键差异在于:动子轴还依赖 XTS 系统本身的就绪状态。如果 XTS 的供电、段通信或动子检测未就绪,即使 MC_Power 的 Enable 为 TRUE,轴也可能停留在 Errorstop。因此推荐的做法是:先确认 XTS 系统状态(如 XTS_System 或对应状态字)正常,再对动子轴执行使能。

// 使能示例(ST)
fbPower : MC_Power;
fbPower( Axis := MoverAxis[1],
         Enable := bEnable,
         Enable_Positive := TRUE,
         Enable_Negative := TRUE,
         Override := 100.0,
         BufferMode := MC_Aborting );
IF fbPower.Status THEN
    bAxisReady := TRUE;   // 轴已使能,可接受运动指令
END_IF
IF fbPower.Error THEN
    nErrId := fbPower.ErrorID;  // 记录错误号
END_IF

注意 Enable_Positive 与 Enable_Negative 分别控制正、负方向是否允许运动。若只允许动子向一个方向移动(例如单向输送),可将其中一个置 FALSE,这样反向指令会被拒绝并报错,起到软限位作用。

二、错误复位

当轴进入 Errorstop,必须先排除原因再复位。常见错误来源包括:XTS 段未就绪、动子位置冲突、指令参数越界、跟随误差超限等。复位使用 MC_Reset,其 Execute 上升沿触发一次复位动作。

fbReset : MC_Reset;
fbReset( Axis := MoverAxis[1], Execute := bReset );
IF fbReset.Done THEN
    bReset := FALSE;   // 复位完成后撤销触发
END_IF

复位成功后轴回到 Standstill,但此时并未使能,仍需重新调用 MC_Power。实践中建议把“读错误号 → 判断原因 → 复位 → 重新使能”做成一个顺序处理,而不是盲目反复复位。若错误号持续复现,说明物理或配置层面的问题没有解决。

XTS 动子轴使能与运动控制状态迁移 Disabled 未使能 Errorstop 错误停止 Standstill 静止/已使能 Motion 速度/位置运动 故障 MC_Reset 运动指令 运行中出错 → Errorstop MC_Power(Enable=FALSE) 或复位后重新使能 关键功能块: MC_Power → 使能轴(Enable_Positive / Enable_Negative 控制方向许可) MC_Reset → 清除 Errorstop(Execute 上升沿触发,Done 后撤销) MC_Jog / MC_MoveVelocity / MC_MoveAbsolute → 运动指令下发

三、速度控制模式与位置控制模式

XTS 动子轴支持两种基本控制方式。速度控制模式下,轴以给定速度持续运行,直到收到停止或新指令,典型功能块是 MC_MoveVelocity。位置控制模式下,轴按目标位置、速度、加减速完成定位,典型功能块是 MC_MoveAbsolute 和 MC_MoveRelative。

选择哪种模式取决于工艺需求。如果动子需要与外部传送带同步、或做连续跟随,速度模式更合适;如果动子需要精确停靠在某个工位,位置模式更直接。XTS 的动子位置通常以毫米为单位,坐标系沿轨道方向定义,正方向由系统配置决定,使用前应确认方向约定并在整段程序中保持一致。

对比项速度控制模式位置控制模式
典型功能块MC_MoveVelocityMC_MoveAbsolute / MC_MoveRelative
核心参数Velocity、Acceleration、DirectionPosition、Velocity、Acceleration、Deceleration
停止方式Velocity=0 或 MC_Halt到达目标位置自动停止
适用场景连续输送、同步跟随工位停靠、精确定位

四、点动与绝对定位

点动(Jog)用于调试和手动调整动子位置。TwinCAT 提供 MC_Jog,通过 JogForward 和 JogBackward 两个布尔输入控制方向,Velocity 设定点动速度。点动通常配合较低的 Override 使用,避免调试时动子高速冲撞。

fbJog : MC_Jog;
fbJog( Axis := MoverAxis[1],
       JogForward := bJogFwd,
       JogBackward := bJogBwd,
       Velocity := 200.0,      // mm/s
       Acceleration := 2000.0,
       Deceleration := 2000.0,
       Jerk := 10000.0 );

绝对定位使用 MC_MoveAbsolute,把动子移动到坐标系中的指定位置。例如将 1 号动子移动到 500 mm 处:

fbMoveAbs : MC_MoveAbsolute;
fbMoveAbs( Axis := MoverAxis[1],
           Execute := bGo,
           Position := 500.0,     // mm,绝对位置
           Velocity := 800.0,     // mm/s
           Acceleration := 3000.0,
           Deceleration := 3000.0,
           Jerk := 15000.0,
           Direction := MC_Positive_Direction,
           BufferMode := MC_Aborting );

执行时 Execute 上升沿触发,Busy 为 TRUE 表示运动中,Done 为 TRUE 表示到达目标位置,CommandAborted 表示被新指令中断,Error 表示出错。判断定位是否成功,应同时检查 Done 和轴的实际位置反馈是否在允许误差内。

点动和绝对定位可以共用同一个轴对象,但同一时刻只能有一个运动指令处于激活状态。若在点动过程中触发绝对定位,需要先用 MC_Halt 停止点动,或利用 BufferMode 让新指令接管。推荐在程序中用状态变量管理“当前运动模式”,避免指令冲突。
XTS 动子在轨道上共享空间,绝对定位前必须确认目标位置没有其他动子占用,否则可能触发碰撞保护或位置冲突错误。多动子场景下,建议先做位置规划或使用 TwinCAT 的动子管理功能,再下发定位指令。

把以上内容串起来,一个完整的动子控制流程是:系统就绪 → MC_Power 使能 → 需要时 MC_Jog 手动调整 → MC_MoveAbsolute 精确定位 → 出错时 MC_Reset 复位并重新使能。掌握这条链路,就具备了 XTS 动子基础运动控制的操作能力。