3. XTS 单动子点对点运动控制

任务边界与运动对象

本例只控制 1 个 XTS 动子(示例取动子 ID = 1),让它从当前位置沿轨道做一次点对点定位。XTS 的动子位置是轨道坐标系下的连续位置值(单位 mm),不是传统伺服轴的“圈数”。因此点对点控制的核心是:读取当前位置 → 计算目标位置 → 触发一次定位运动 → 监视到位与状态。

为避免与后续多动子同步、分组控制混淆,本例只做单动子、单目标、单次触发,不涉及相位同步与分组参数。

关键参数与运动模型

XTS 单动子点对点运动可抽象为“位置环 + 速度/加速度限制”的梯形或 S 形速度规划。PLC 侧需要给出以下参数:

参数示例值含义
动子 ID1被控制的单个动子编号
当前位置由 PLC 读取轨道坐标系位置,单位 mm
目标位置850.0 mm本次点对点运动终点
最大速度1200 mm/s运动速度上限
加速度4000 mm/s²加速/减速斜率
到位窗口±0.5 mm判定“到位”的位置容差

运动过程可理解为:从当前位置出发,按加速度加速到最大速度,匀速运行,再按加速度减速,最终停在目标位置附近。若目标距离较短,则不会达到最大速度,而是形成三角形速度曲线。

PLC 控制逻辑

下面给出一个可直接在 TwinCAT 3 PLC 中运行的单动子点对点控制程序框架。它使用 XTS 的 PLC 库功能块(示例以常见接口形式表达),核心是“读位置 → 设目标 → 触发 → 监视到位”。

PROGRAM XTS_SingleMover_P2P
VAR
    // XTS 系统与动子接口
    xtsSystem      : XTS.System;          // XTS 系统实例
    mover1         : XTS.Mover;           // 动子 1 接口
    moverId        : UINT := 1;           // 动子编号

    // 运动命令
    bExecute       : BOOL;                // 上升沿触发一次定位
    bBusy          : BOOL;                // 运动进行中
    bDone          : BOOL;                // 到位完成
    bError         : BOOL;                // 错误标志
    nErrorId       : UDINT;               // 错误码

    // 位置与参数
    fActPosition   : LREAL;               // 当前位置 mm
    fTargetPos     : LREAL := 850.0;      // 目标位置 mm
    fMaxVelocity   : LREAL := 1200.0;     // 最大速度 mm/s
    fAcceleration  : LREAL := 4000.0;     // 加速度 mm/s²
    fTolerance     : LREAL := 0.5;        // 到位窗口 mm

    // 状态监视
    bInPosition    : BOOL;                // 是否在到位窗口内
    fPosError      : LREAL;               // 位置偏差
END_VAR

// 1) 读取动子当前位置
fActPosition := mover1.ActPosition;

// 2) 计算位置偏差
fPosError := fTargetPos - fActPosition;

// 3) 触发点对点定位(上升沿执行一次)
IF bExecute AND NOT bBusy THEN
    mover1.MoveAbsolute(
        Execute     := TRUE,
        Position    := fTargetPos,
        Velocity    := fMaxVelocity,
        Acceleration:= fAcceleration,
        Deceleration:= fAcceleration
    );
END_IF

// 4) 读取运动状态
bBusy  := mover1.MoveAbsolute.Busy;
bDone  := mover1.MoveAbsolute.Done;
bError := mover1.MoveAbsolute.Error;
nErrorId := mover1.MoveAbsolute.ErrorID;

// 5) 到位判断:位置偏差在容差内且 Done 为真
bInPosition := ABS(fPosError) <= fTolerance;
IF bDone AND bInPosition THEN
    // 到位,可复位触发或执行下一步逻辑
    bExecute := FALSE;
END_IF

说明:MoveAbsolute 是 XTS 动子绝对定位功能块,Position 为目标位置,Velocity 为最大速度,Acceleration/Deceleration 为加减速度。实际库名称可能因 TwinCAT 版本不同略有差异,但接口语义一致。

运动过程与到位判读

下图展示单动子从当前位置到目标位置的运动过程,以及 PLC 侧需要监视的关键信号:位置、速度、Busy、Done 和到位窗口。

XTS 轨道(位置坐标 mm) 0 200 400 600 800 M1 当前位置 ≈ 320 mm 目标 目标位置 850 mm 点对点运动方向 到位窗口 ±0.5 mm 速度规划(梯形曲线) v t 加速 匀速 v=1200 mm/s 减速 Busy = TRUE Done = TRUE |Δx| ≤ 0.5 mm → 到位

验证与调试要点

  • 位置读取正确性:先确认 mover1.ActPosition 能随手动推动动子而变化,排除接口映射错误。
  • 触发沿有效性:bExecute 必须使用上升沿触发,避免每个扫描周期重复调用 MoveAbsolute。
  • 到位判据:不能只看 Done,还要检查 |fTargetPos - fActPosition| ≤ fTolerance,防止机械偏差或编码器噪声导致误判。
  • 错误处理:若 bError = TRUE,读取 nErrorId 并对照 XTS 库错误码表排查,常见原因包括目标位置超出轨道范围、动子未使能、参数非法。
  • 安全边界:目标位置必须落在轨道有效行程内,且运动路径上无其他动子阻挡;本例为单动子,但仍需确认轨道无物理干涉。
调试时可将 fMaxVelocity 临时降到 200 mm/s、fAcceleration 降到 500 mm/s²,便于肉眼观察动子运动过程与到位窗口,确认逻辑正确后再恢复生产参数。