4. XTS 多动子同步运动实现
同步搬运的控制模型
XTS 多动子同步运动的核心是让多个动子在同一段轨道上保持相同的线速度和固定的相位差。与单动子点对点运动不同,同步运动需要为每个动子建立统一的运动参考,再通过耦合参数把各动子绑定到该参考上。TwinCAT 中通常使用 MC_MoveVelocity 或 MC_MoveLinearAbsolute 配合 MC_GearIn 实现主从耦合,也可以用 MC_SyncMoveVelocity 直接做速度同步。
同步搬运的典型场景是:多个动子以固定间距排列,同时从取料位移动到放料位。此时需要保证:
- 所有动子速度指令一致,避免相对滑动;
- 动子之间的相位差(位置偏移)保持恒定;
- 同步启动与同步停止,避免个别动子滞后或超速;
- 同步过程中任一轴报错时,整组动子进入安全停止。
同步耦合的关键参数:
MasterVelocity:主参考速度(mm/s)SlaveOffset:从动子相对主参考的位置偏移(mm)GearRatio:耦合比,同步搬运时通常为 1:1SyncMode:耦合模式,可选 MC_GearIn 或 MC_SyncMoveVelocity
PLC 同步耦合实现
下面以 TwinCAT 3 为例,使用 MC_GearIn 将三个从动子耦合到同一个虚拟主轴。虚拟主轴由 MC_MoveVelocity 驱动,从动子通过 MC_GearIn 建立 1:1 耦合,并通过 GearIn.PositionOffset 设置各自的相位偏移。
PROGRAM XTS_SyncMove
VAR
// 虚拟主轴
MasterAxis : AXIS_REF;
MasterVel : MC_MoveVelocity;
MasterVelCmd : MC_MoveVelocity_CTRL;
// 从动子 1~3
SlaveAxis : ARRAY[1..3] OF AXIS_REF;
GearIn : ARRAY[1..3] OF MC_GearIn;
GearInCmd : ARRAY[1..3] OF MC_GearIn_CTRL;
// 同步参数
SyncVelocity : LREAL := 800.0; // mm/s
PhaseOffset : ARRAY[1..3] OF LREAL := [0.0, 200.0, 400.0]; // mm
GearRatio : LREAL := 1.0;
// 状态
bStartSync : BOOL;
bSyncActive : BOOL;
bSyncError : BOOL;
nErrorAxis : INT;
END_VAR
// ---- 1. 启动虚拟主轴速度 ----
MasterVel(
Axis := MasterAxis,
Execute := bStartSync,
Velocity := SyncVelocity,
Acceleration:= 2000.0,
Deceleration:= 2000.0,
Direction := MC_POSITIVE_DIRECTION,
Options := []);
MasterVelCmd := MasterVel;
// ---- 2. 三个从动子依次耦合到主轴 ----
FOR i := 1 TO 3 DO
GearIn[i](
Master := MasterAxis,
Slave := SlaveAxis[i],
Execute := bStartSync AND MasterVelCmd.Busy,
RatioNumerator := GearRatio,
RatioDenominator:= 1.0,
PositionOffset := PhaseOffset[i],
Acceleration := 2000.0,
Deceleration := 2000.0,
Options := []);
GearInCmd[i] := GearIn[i];
END_FOR
// ---- 3. 同步状态判断 ----
bSyncActive := TRUE;
FOR i := 1 TO 3 DO
IF GearInCmd[i].Error THEN
bSyncActive := FALSE;
bSyncError := TRUE;
nErrorAxis := i;
EXIT;
END_IF
END_FOR
// ---- 4. 同步停止:任一轴报错则整组停止 ----
IF bSyncError THEN
FOR i := 1 TO 3 DO
GearIn[i](Execute := FALSE);
END_FOR
MasterVel(Execute := FALSE);
END_IF
相位偏移的设置要点:
PositionOffset 的单位与轴配置一致(通常为 mm)。若动子 1 在 0 mm 处、动子 2 需要在其后方 200 mm 处,则动子 2 的 PositionOffset 应设为 200 mm(取决于方向定义)。建议在轴参数中统一方向约定,避免正负号混淆。
同步启动与停止的时序控制
同步运动不能简单地同时触发所有动子的 Execute,否则由于 PLC 扫描周期和轴使能状态的差异,可能出现个别动子先动、个别后动的情况。推荐的做法是:
- 先使能所有从动子轴(
MC_Power),确认Status.Enabled = TRUE; - 启动虚拟主轴速度,等待
MasterVelCmd.Busy = TRUE; - 依次触发各从动子的
MC_GearIn.Execute,每个从动子确认InGear = TRUE后再触发下一个; - 全部
InGear = TRUE后,置bSyncActive := TRUE,允许搬运任务执行; - 停止时先解除耦合(
MC_GearOut),再停止主轴,避免从动子被拖拽。
常见问题:若从动子未使能就触发
MC_GearIn,会返回 ErrorID = 0x4A00(轴未使能)。若 PositionOffset 设置过大,从动子可能在耦合瞬间产生速度突变,建议先以低速测试耦合,确认 InGear 后再提升到工作速度。
同步精度验证方法
在 HMI 或 Scope 中同时采集三个动子的 ActualVelocity 和 ActualPosition,观察以下指标:
| 验证项 | 目标值 | 判断依据 |
|---|---|---|
| 速度一致性 | |V_i - V_master| ≤ 5 mm/s | 稳态运行 2 s 后采样 |
| 相位保持 | |P_i - P_master - Offset_i| ≤ 2 mm | 全程连续监测 |
| 同步启动时间 | 所有从动子 InGear 时间差 ≤ 50 ms | 从第一个 InGear 到最后一个 |
| 同步停止一致性 | 停止后位置偏差 ≤ 3 mm | 停止后 1 s 采样 |
调试建议:首次调试时把
SyncVelocity 降到 100 mm/s,用 Scope 观察三个动子的速度曲线是否重合。确认无异常后再逐步提升到 800 mm/s。若发现某个动子速度波动较大,检查该动子的 Acceleration 和 Jerk 参数是否与其他动子一致。