2. TwinCAT 与运动控制基础

TwinCAT(The Windows Control and Automation Technology)是倍福(Beckhoff)基于 PC 的控制平台。它把一台普通工业 PC 或嵌入式控制器,通过实时扩展改造为具备 PLC、NC、CNC、机器人学等能力的运动控制核心。理解 TwinCAT 平台架构、NC 与 PLC 的分工关系,以及 PTP 运动控制的基本概念,是后续编写轴控程序、调试伺服系统的前提。

一、TwinCAT 平台架构:从 Windows 到实时核

TwinCAT 的架构可以理解为“双核并行”:Windows 侧负责工程组态、HMI、数据库、视觉等非实时任务;实时侧(Real-Time)负责 PLC 逻辑与 NC 运动插补,运行在独立的内核或隔离的 CPU 核上。两者通过 TwinCAT 实时驱动与共享内存交换数据,保证运动控制周期稳定在微秒到毫秒级。

在软件层面,TwinCAT 由几个关键组件构成:

  • TwinCAT System Service:系统服务,负责实时核加载、路由与系统配置。
  • TwinCAT PLC:IEC 61131-3 编程环境,执行逻辑控制、状态机与轴使能。
  • TwinCAT NC PTP:运动控制内核,负责轨迹规划、位置闭环与轴状态管理。
  • TwinCAT IO:现场总线与 I/O 映射,连接 EtherCAT 伺服、编码器与数字量模块。
  • TwinCAT XAE:Visual Studio 中的工程环境,用于组态、编程与调试。

下图展示了 TwinCAT 平台中 PLC、NC、IO 与伺服驱动之间的信号链关系,是理解后续编程模型的关键。

TwinCAT 平台架构与信号链 Windows 侧(非实时) TwinCAT XAE 工程环境 组态 / 编程 / 调试 / 示波 HMI / 数据库 / 视觉 非实时任务,通过 ADS 通信 TwinCAT System Service 实时核加载 / 路由 / 配置 ADS 通信通道(非实时) 实时侧(Real-Time) TwinCAT PLC 逻辑控制 / 状态机 / 轴使能 TwinCAT NC PTP 轨迹规划 / 位置闭环 / 轴状态 TwinCAT IO / EtherCAT 过程映像 / 分布式时钟 伺服驱动器 / 电机 / 编码器 ADS 轴接口 设定值 反馈值

二、NC 与 PLC 的关系:分工与协作

很多初学者会混淆 PLC 与 NC 的职责。简单来说:PLC 负责“什么时候动、动到什么状态”,NC 负责“怎么动、动得是否精准”。

PLC 程序通过轴接口(Axis Interface)与 NC 交互。PLC 侧通常使用 AXIS_REF 变量引用一个 NC 轴,然后调用运动功能块(如 MC_Power、MC_MoveAbsolute、MC_MoveVelocity)发出指令。NC 内核接收指令后,进行加减速规划、插补计算与位置闭环,再通过 IO 层把设定值发送给伺服驱动器,同时读取编码器反馈形成闭环。

这种分工带来两个重要特性:

  • 实时性隔离:PLC 任务周期通常为 1~10 ms,NC 周期可短至 50~250 μs,NC 独立于 PLC 扫描周期运行,保证运动平滑。
  • 状态一致性:NC 轴状态(使能、就绪、错误、回零完成)通过接口反馈给 PLC,PLC 据此做逻辑判断与联锁。

核心记忆点:PLC 是“指挥官”,NC 是“驾驶员”,伺服是“执行器”。指挥官下达目标,驾驶员负责平稳准确地到达,执行器负责出力。

三、PTP 运动控制基本概念

PTP(Point-To-Point)即点到点运动控制,是 NC PTP 最基础也最常用的运动模式。它不要求刀具或末端沿严格路径行走,只要求从当前位置运动到目标位置,中间轨迹由 NC 自动规划。常见指令包括绝对定位、相对定位、速度运行、回零等。

理解 PTP 需要掌握以下核心参数与概念:

概念/参数 含义 典型单位/取值
位置 Position 轴当前坐标,由编码器反馈或 NC 内部计算 mm、°、脉冲
速度 Velocity 运动过程中的最大速度 mm/s、r/min
加速度 Acceleration 速度变化率,影响启停冲击 mm/s²
减速度 Deceleration 停止或减速时的变化率 mm/s²
加加速度 Jerk 加速度的变化率,用于平滑冲击 mm/s³
目标位置 Target PTP 运动终点 与位置同单位
轴状态 State Disabled / Standstill / Moving / Error 等 枚举值

PTP 运动通常遵循“使能 → 回零 → 定位”的流程。回零(Homing)用于建立机械原点与坐标系的对应关系,是绝对定位的前提。若未回零就执行绝对定位,NC 可能报错或产生不可预期的运动。

四、典型场景与代码示例

假设一台设备有一个进给轴,需要在按下启动按钮后从当前位置运动到 100 mm 处,速度为 50 mm/s。PLC 侧代码结构如下:

VAR
    Axis1      : AXIS_REF;
    bPower     : BOOL := TRUE;
    bMove      : BOOL;
    bDone      : BOOL;
    fbPower    : MC_Power;
    fbMoveAbs  : MC_MoveAbsolute;
END_VAR

// 1. 轴使能
fbPower(Axis := Axis1, Enable := bPower, Enable_Positive := TRUE, Enable_Negative := TRUE);

// 2. 绝对定位
fbMoveAbs(
    Axis        := Axis1,
    Execute     := bMove,
    Position    := 100.0,
    Velocity    := 50.0,
    Acceleration:= 500.0,
    Deceleration:= 500.0,
    Done        => bDone
);

这段代码体现了 PLC 与 NC 的典型协作:MC_Power 让 NC 轴进入使能状态,MC_MoveAbsolute 把目标位置、速度、加减速度交给 NC,NC 负责生成平滑的位置曲线并驱动伺服。

调试建议:首次调试时先把速度、加速度设小,使用 TwinCAT Scope 观察位置、速度、跟随误差曲线,确认方向与单位正确后再逐步提高动态参数。

五、常见误区与复盘

  • 误区一:把 PLC 扫描周期当成运动周期。NC 周期独立于 PLC,运动平滑性由 NC 周期和伺服周期决定,不要用 PLC 周期去估算运动精度。
  • 误区二:忽略回零直接绝对定位。没有原点坐标系,绝对位置没有物理意义,容易撞机。
  • 误区三:单位不统一。NC 轴配置中的单位、齿轮比、编码器分辨率必须与机械实际一致,否则 100 mm 可能变成 100 脉冲。
  • 误区四:使能后立即发运动指令。应等待轴状态进入 Standstill 且无错误后再触发运动,避免指令被忽略。

复盘时可以用一张检查清单快速定位问题:轴是否使能?是否回零?目标位置与速度是否合理?NC 轴状态是否报错?伺服使能与抱闸是否释放?把这几个问题按顺序排查,大部分 PTP 运动异常都能快速定位。