2. TwinCAT 3 XTS配置与动子初始化

在上一节理解 XTS 的物理构成之后,本节要把“纸面上的系统”变成 TwinCAT 3 里可运行、可观察的工程。XTS 的配置本质上分三层:硬件层(电源、EtherCAT 耦合器、XTS 模块、电机模块、编码器与动子)、拓扑层(各模块在 EtherCAT 网络中的顺序与位置)、运动层(动子数量、初始位置、导轨坐标系与运动参数)。三层中任何一层出错,都会表现为“动子不动”“动子报错”或“位置对不上”。因此本节按“建工程 → 配硬件 → 定动子 → 验运动”的顺序展开,并给出可直接对照的配置样例与判断依据。

一、创建 XTS 工程与扫描硬件

在 TwinCAT 3 XAE 中新建一个空工程,选择与目标控制器匹配的 TwinCAT 版本(例如 TwinCAT 3.1 Build 4024)。随后在 I/O 节点下右键选择 Scan Devices,让系统通过 EtherCAT 自动识别从站。XTS 系统通常由以下从站组成:

  • EK1100 / EK1200:EtherCAT 耦合器,负责网段入口;
  • AX8000 或 AX5000 系列伺服驱动器:为 XTS 电机模块供电并执行电流环;
  • XTS 电机模块(如 XTS-Motor):产生行波磁场驱动动子;
  • XTS 编码器/位置检测模块:读取动子位置;
  • XTS 电源模块:为电机模块提供直流母线。

扫描完成后,TwinCAT 会按物理连接顺序生成从站树。此时应核对每个从站的 Revision 与 Serial 是否与实际硬件一致,并确认 EtherCAT 状态从 INIT 依次进入 PREOP、SAFEOP、OP。若停留在 PREOP,常见原因是 ESI 文件版本不匹配或拓扑顺序与物理接线不一致。

二、配置 XTS 模块与动子数量

XTS 的动子数量不是“随便填”的参数,它受三个条件约束:导轨上可容纳的动子物理长度、编码器可识别的最小间距、以及电机模块的推力分配。在 TwinCAT 中,动子数量通常在 XTS 模块的 Configuration 或 Mover Configuration 页面设置。以一条约 2 m 的直线导轨为例,若单个动子长度约 80 mm、最小安全间距 40 mm,则理论上最多可放约 16 个动子;但实际工程中常取 8~12 个,以留出加速与避让余量。

配置时需要填写或确认以下关键参数:

参数含义示例值
Mover Count动子总数8
Initial Position各动子初始位置(mm)0, 250, 500, 750, 1000, 1250, 1500, 1750
Track Length导轨有效行程2000 mm
Min. Distance动子间最小允许间距40 mm
Max. Velocity单动子最大速度2000 mm/s
Max. Acceleration单动子最大加速度20 m/s²

初始位置建议均匀分布,便于后续观察“哪个动子对应哪个索引”。TwinCAT 中动子索引从 0 开始,索引与物理动子的对应关系由编码器初始化过程建立。若初始位置设置过密,系统会在使能时报“Mover collision”或“Position overlap”错误。

三、动子初始化与位置标定

动子初始化(Mover Initialization)是 XTS 上电后最关键的一步。其过程是:编码器读取每个动子的绝对位置 → TwinCAT 将位置映射到导轨坐标系 → 为每个动子分配索引 → 建立动子与电机模块的推力对应关系。初始化完成后,动子才允许进入 Enabled 状态。

在 TwinCAT 中,初始化通常通过 XTS.Init() 或 MC_Power + XTS_Enable 功能块触发。若使用 PLC 库,可参考如下调用结构:

fbXtsEnable(
    Enable := TRUE,
    MoverIndex := 0,
    Timeout := T#5S,
    EnableDone => bEnableDone,
    Error => bError,
    ErrorID => nErrorID
);

初始化成功的判断依据有三条:一是所有动子索引均被分配且无重复;二是每个动子的实际位置与设定初始位置偏差在允许范围内(通常 ±0.5 mm);三是 AxisState 进入 Standstill 或 Enabled。若某个动子始终无法使能,应检查该动子是否在编码器盲区、是否被机械卡阻、或是否与相邻动子间距小于 Min. Distance。

XTS 动子初始化与位置映射示意 导轨行程 0 ~ 2000 mm 0 500 1000 1500 2000 M0 M1 M2 M3 M7 0 mm 250 mm 500 mm 750 mm 1750 mm 编码器读取绝对位置 → 映射到导轨坐标系 → 分配索引 初始化完成判断 索引无重复 · 位置偏差 ≤ ±0.5 mm · 状态 Enabled 初始化约束条件 • 动子间距 ≥ Min. Distance • 动子不在编码器盲区 • 电机模块推力分配正常 • EtherCAT 状态 = OP • 无机械卡阻 常见初始化失败 • Mover collision • Position overlap • Encoder not ready • Axis not enabled • Timeout

四、验证基础运动

初始化完成后,不要急着跑复杂轨迹,先用最简单的点动(Jog)验证基础运动。在 TwinCAT 中可通过 MC_Jog 或 XTS 专用功能块让单个动子以低速(如 100 mm/s)正向移动 200 mm,再反向返回。观察三个量:

  1. 实际位置:在 Scope 或 XTS Monitor 中查看 ActPosition 是否平滑变化,无跳变;
  2. 速度曲线:是否呈梯形或 S 形,加减速段是否与设定一致;
  3. 跟随误差:PosDiff 是否在允许范围内(通常 < 0.1 mm)。

若动子运动方向与预期相反,应检查导轨坐标系定义方向与电机换向顺序是否一致;若动子运动一段后报“Following error”,则需检查 Max. Acceleration 是否设置过小或机械负载是否过大。基础运动验证通过后,才进入多动子协同与动态路径规划。

实操建议:首次调试时,建议将 Max. Velocity 设为额定值的 20%~30%,Max. Acceleration 设为 5 m/s² 左右,待基础运动稳定后再逐步提升。每次修改动子数量或初始位置后,必须重新执行初始化,不能只改参数不重新标定。
注意:动子初始位置一旦写入并初始化,TwinCAT 会以编码器绝对位置为准。若手动移动了动子而未重新初始化,系统可能仍按旧位置计算,导致碰撞或位置错误。任何机械干预后都应重新执行 XTS.Init()。

完成本节配置后,工程中应具备:可扫描的 EtherCAT 拓扑、正确数量的动子、合理的初始位置分布、以及通过点动验证的基础运动能力。这是后续动态路径与节拍优化的前提——只有动子“认得自己的位置”,才谈得上“按路径协同运动”。