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 动子轴支持两种基本控制方式。速度控制模式下,轴以给定速度持续运行,直到收到停止或新指令,典型功能块是 MC_MoveVelocity。位置控制模式下,轴按目标位置、速度、加减速完成定位,典型功能块是 MC_MoveAbsolute 和 MC_MoveRelative。
选择哪种模式取决于工艺需求。如果动子需要与外部传送带同步、或做连续跟随,速度模式更合适;如果动子需要精确停靠在某个工位,位置模式更直接。XTS 的动子位置通常以毫米为单位,坐标系沿轨道方向定义,正方向由系统配置决定,使用前应确认方向约定并在整段程序中保持一致。
| 对比项 | 速度控制模式 | 位置控制模式 |
|---|---|---|
| 典型功能块 | MC_MoveVelocity | MC_MoveAbsolute / MC_MoveRelative |
| 核心参数 | Velocity、Acceleration、Direction | Position、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 让新指令接管。推荐在程序中用状态变量管理“当前运动模式”,避免指令冲突。
把以上内容串起来,一个完整的动子控制流程是:系统就绪 → MC_Power 使能 → 需要时 MC_Jog 手动调整 → MC_MoveAbsolute 精确定位 → 出错时 MC_Reset 复位并重新使能。掌握这条链路,就具备了 XTS 动子基础运动控制的操作能力。