2. TwinCAT系统架构与运行模式

理解 TwinCAT 的运动控制,关键不是记住“PLC 控制 NC”这句话,而是看清四个运行实体各自负责什么、数据以什么形式在它们之间流动、以及一次运动指令从用户程序到电机轴端究竟经过了哪些环节。TwinCAT 把实时控制拆成若干独立但共享同一实时内核的运行时(Runtime),它们通过内部的过程映像和 ADS 通知机制交换数据,而不是靠用户手写通信代码。

四个运行实体与它们的职责边界

在典型的 TwinCAT 3 工程中,与运动控制直接相关的运行实体有四个:

  • PLC 运行时(PLC Runtime):执行 IEC 61131-3 程序,负责工艺逻辑、状态机、配方、报警、HMI 交互。它通过 Tc2_MC2 / Tc3_MC2 库中的功能块(如 MC_Power、MC_MoveAbsolute、MC_MoveVelocity)向 NC 发出运动命令,并读取轴状态。
  • NC 运行时(NC Runtime):即运动控制内核,负责轨迹规划、插补、加减速、位置环前馈、轴耦合(电子齿轮、凸轮)。它把 PLC 给出的“目标位置/速度”转化为每个 NC 周期(默认 1 ms)的位置设定值。
  • I/O 运行时(I/O Runtime):管理现场总线设备与过程映像,把 EtherCAT 从站的过程数据映射到 PLC 和 NC 可访问的变量地址。
  • EtherCAT 主站:作为 I/O 运行时下的一个实时任务,按分布式时钟(DC)周期性地收发报文,把 NC 计算出的设定值下发到伺服驱动器,并把编码器实际位置、状态字、诊断信息回传。

四者的关系不是简单的串联,而是“PLC 决策、NC 规划、I/O 搬运、EtherCAT 执行”的分工。PLC 不直接产生每个周期的位置值,NC 也不直接操作硬件寄存器,这种分层是 TwinCAT 能同时保证逻辑灵活性和运动实时性的基础。

数据流:从功能块调用到电机轴端

以一次绝对定位为例,数据流可以拆成五段:

  1. PLC 侧命令生成:用户程序调用 MC_MoveAbsolute,给定 Position、Velocity、Acceleration、Deceleration、Jerk 等参数,并把 Execute 置 TRUE。功能块内部通过 ADS 把命令写入 NC 轴接口。
  2. NC 侧轨迹规划:NC 运行时接收命令后,按设定的插补周期生成位置设定值序列。若轴配置了前馈和速度前馈,NC 还会输出速度、加速度前馈量,用于提高跟随精度。
  3. 过程映像交换:NC 的设定值写入 I/O 过程映像的输出区,EtherCAT 从站的编码器值写入输入区。这个过程映像在 PLC 与 NC 之间是共享的,因此 PLC 可以直接读取轴的实际位置、状态字和错误码。
  4. EtherCAT 周期通信:主站按 DC 周期发送过程数据报文,伺服驱动器在收到设定值后执行位置环/速度环/电流环,并把实际位置、实际速度、状态字、扭矩反馈回主站。
  5. 状态回读与闭环判断:PLC 通过 MC_MoveAbsolute 的 Done、Busy、Active、Error 输出,以及 Axis 结构体中的 NcToPlc 状态,判断运动是否完成、是否到位、是否出现跟随误差超限。

下面这张图把上述四个运行实体、数据流向和关键接口放在同一张关系图中,便于对照理解。

TwinCAT 运动控制运行实体与数据流 PLC 运行时 IEC 61131-3 程序 MC_Power / MC_MoveAbsolute 状态机 / 报警 / HMI 输出:命令 + 参数 输入:Done / Busy / Error NC 运行时 轨迹规划 / 插补 加减速 / 前馈 电子齿轮 / 凸轮耦合 周期:默认 1 ms 输出:位置设定值序列 I/O 运行时 过程映像管理 变量映射 / 地址分配 EtherCAT 主站任务 输入区:编码器 / 状态字 输出区:设定值 / 控制字 EtherCAT 从站 伺服驱动器 位置环 / 速度环 / 电流环 编码器反馈 DC 分布式时钟同步 共享过程映像 PLC ↔ NC ↔ I/O Axis 结构体 NcToPlc / PlcToNc 无需手写通信代码 ADS 命令 设定值 过程数据 反馈 映射 状态回读 实际位置 关键点:PLC 只发命令与参数,NC 负责周期级轨迹生成,I/O 负责过程映像搬运,EtherCAT 负责实时收发。 PLC 通过 Axis 结构体读取 NcToPlc 状态,无需直接访问硬件地址;所有实时数据在共享过程映像中完成交换。

运行模式与实时性约束

TwinCAT 的实时性来自“优先级 + 周期”的配置。PLC 任务通常配置为 1 ms 或 2 ms 周期,NC 的插补周期默认 1 ms,EtherCAT 主站周期与 NC 周期对齐。三者必须在同一个实时核上按优先级调度:EtherCAT 主站优先级最高,NC 次之,PLC 最低。如果 PLC 任务周期过长或优先级设置不当,会出现“NC 已规划、EtherCAT 未及时下发”的抖动,表现为轴跟随误差增大或 MC_MoveAbsolute 的 Done 延迟。

另一个容易忽略的点是 NC 与 PLC 的“数据一致性”。PLC 读取 Axis.NcToPlc.ActPos 时,读到的是最近一次过程映像刷新的值,而不是“当前瞬间”的值。因此在高动态场合,PLC 侧的位置判断应留出合理的到位窗口(如 ±0.05 mm),而不是用严格等于目标位置作为完成条件。

协同中的典型参数与观察点

下面这张表给出了一次绝对定位中,四个运行实体各自需要关注的关键参数和观察点,可作为调试时的检查清单。

运行实体 关键参数 / 接口 观察点 异常表现
PLC 运行时 Position、Velocity、Acceleration、Jerk、Execute Done / Busy / Active / Error / ErrorID ErrorID 非零,如 0x4260 表示跟随误差超限
NC 运行时 插补周期、前馈系数、最大速度、最大加速度 Axis.NcToPlc.ActPos、ActVelo、FollowingError FollowingError 持续增大,说明增益或前馈不匹配
I/O 运行时 过程映像地址、变量映射、DC 模式 输入区编码器值、输出区控制字 映射地址错位,导致轴不动或飞车
EtherCAT 主站 周期时间、DC 偏移、从站状态 WorkingCounter、从站 OP 状态、丢包计数 WorkingCounter 不递增,从站无法进入 OP

一个可复现的配置示例

假设使用一台支持 EtherCAT 的伺服驱动器,目标是在 PLC 中完成一次从 0 到 100 mm 的绝对定位。可按以下顺序建立协同关系:

1. 在 I/O 配置中扫描 EtherCAT 从站,确认从站进入 OP 状态。
2. 在 NC 中新建一个轴(Axis 1),关联到该从站的驱动器和编码器过程数据。
3. 在 PLC 中引用轴变量,例如:
   Axis1 : AXIS_REF;
   Power1 : MC_Power;
   Move1  : MC_MoveAbsolute;
4. 周期调用:
   Power1(Axis := Axis1, Enable := TRUE, Enable_Positive := TRUE, Enable_Negative := TRUE);
   Move1(Axis := Axis1, Execute := bStart, Position := 100.0,
         Velocity := 50.0, Acceleration := 500.0, Deceleration := 500.0, Jerk := 5000.0);
5. 观察 Move1.Done 变为 TRUE,同时 Axis1.NcToPlc.ActPos 接近 100.0。

这里的 100.0 单位取决于 NC 轴配置中设定的单位(通常为 mm 或度),速度 50.0 表示 50 mm/s,加速度 500.0 表示 500 mm/s²。这些数值属于教学示例,实际项目中应根据机械负载、电机额定参数和工艺节拍重新整定。

调试建议:先用低速、低加速度做一次点动,确认方向、软限位和编码器计数方向正确,再逐步提高速度与增益。若出现 FollowingError 报警,优先检查 NC 轴的前馈系数和伺服驱动器的位置环增益是否匹配,而不是直接修改 PLC 程序。

小结:协同的本质是“分层 + 共享过程映像”

PLC 运行时负责“决定做什么”,NC 运行时负责“算出每个周期怎么走”,I/O 运行时负责“把数据搬到正确的位置”,EtherCAT 负责“按时把数据送到驱动器”。四者通过共享过程映像和 ADS 通知协同,而不是通过用户自定义通信。理解这条数据链,就能在出现轴不动、到位延迟、跟随误差超限等问题时,快速定位是命令层、规划层、映射层还是通信层的问题。