1. TwinCAT自动化系统架构总览

TwinCAT 3 是德国倍福(Beckhoff)推出的基于 PC 的控制软件平台。它的核心思想是:把一台工业 PC 或嵌入式控制器变成一台实时控制器,同时保留 Windows 作为工程开发、人机界面、数据存储和上层通信的运行环境。理解 TwinCAT 架构,关键不是记住组件名称,而是看清“Windows 与实时核如何在同一台硬件上分工协作”,以及“工程配置如何一步步变成运行时的实时任务”。

一、双核协同:Windows 与实时核的分工

TwinCAT 3 在硬件上运行两个逻辑上独立的执行环境:一个是 Windows 用户态环境,负责 TwinCAT XAE 工程开发、Visual Studio 集成、HMI、数据库、文件系统和普通网络通信;另一个是 TwinCAT 实时核(Real-Time Kernel),负责 PLC 任务、运动控制、I/O 扫描和 EtherCAT 主站等对时间确定性要求高的任务。两者共享同一颗 CPU 和同一块网卡,但通过 TwinCAT 的实时扩展层进行隔离与调度。

实时核并不是一个独立的操作系统,而是通过修改 Windows 的 HAL(硬件抽象层)和网卡驱动,在 Windows 调度器之外插入一个更高优先级的实时调度器。当实时任务需要执行时,它会抢占 Windows 线程;当实时任务空闲时,Windows 才获得 CPU 时间。这样既保证了实时性,又避免了维护两套独立硬件。

TwinCAT 3 双核协同架构 Windows 用户态环境 非实时 / 高吞吐 / 人机交互 TwinCAT XAE 工程 Visual Studio 集成 HMI / 数据库 / 文件 TCP/IP 普通通信 Windows 调度器(非实时线程) TwinCAT 实时核 确定性 / 低抖动 / 高优先级 PLC 实时任务 运动控制 NC/PTP I/O 扫描与映射 EtherCAT 主站 实时调度器(抢占式,最高优先级) TwinCAT 实时扩展层(HAL 修改 + 网卡驱动实时化) 共享内存 / ADS 通信 / 时钟同步 / 中断重定向 工业 PC / 嵌入式控制器硬件平台 多核 CPU · 实时以太网网卡 · 共享内存 · 中断控制器 ADS 请求 实时数据 硬件访问 ADS 实时核抢占 Windows 线程;Windows 空闲时实时核让出 CPU;两者通过 ADS 和共享内存交换数据 CPU 时间片: 实时任务 Windows 线程 实时任务 Windows 线程 实时任务 Windows 线程

二、核心组件与数据流

TwinCAT 3 的运行时由几个关键组件构成。TwinCAT XAR(Runtime)是运行时核心,负责加载和执行配置好的实时任务;TwinCAT XAE(Engineering)是工程环境,通常以 Visual Studio 插件形式存在,用于编写 PLC 程序、配置 I/O、设置运动轴和生成 EtherCAT 拓扑。两者之间通过 ADS(Automation Device Specification)协议通信,ADS 既可以走本机共享内存,也可以走 TCP/IP 跨设备访问。

在数据流上,一个典型的控制周期是这样的:EtherCAT 从站的过程数据被主站扫描并写入实时核的 I/O 映像区;PLC 任务在每个周期开始时读取输入映像,执行用户程序,更新输出映像;输出映像再通过 EtherCAT 主站下发到从站。整个过程由实时核调度,周期时间可配置为 50 µs 到 10 ms 不等。Windows 侧通过 ADS 读取 PLC 变量或写入设定值,但这类访问不参与实时循环,因此不会破坏确定性。

三、典型应用场景与选型判断

TwinCAT 3 的典型应用场景包括:高速包装机械(需要 µs 级 I/O 响应和电子凸轮)、半导体设备(多轴同步与高精度位置控制)、风力发电(分布式 I/O 与远程诊断)、以及测试台架(高速数据采集与实时仿真)。判断是否适合使用 TwinCAT,可以看三个条件:是否需要确定性周期、是否需要在同一硬件上同时运行 Windows 应用、是否需要 EtherCAT 或大量分布式 I/O。如果三个条件都满足,TwinCAT 3 通常是合理选择。

学习建议:先在一台带 Intel 网卡的普通 PC 上安装 TwinCAT 3 XAE,创建一个空 PLC 项目,配置一个 1 ms 周期的任务,观察任务执行时间与抖动。这比先读架构文档更能建立对“实时核”的直观理解。

四、配置示例:从工程到运行

下面是一个最小化的 TwinCAT 3 工程配置片段,展示如何定义一个 1 ms 周期的 PLC 任务,并将一个变量映射到 EtherCAT 从站的输出。示例参数为教学假设值,实际使用时需根据硬件手册调整。

<Task Name="PlcTask" Priority="20" CycleTime="1000000">
  <Program Call="MAIN" />
</Task>

<Mapping>
  <Variable PLC="MAIN.bStart"  IO="EtherCAT_DO.Channel1" />
  <Variable PLC="MAIN.nSpeed"  IO="EtherCAT_AO.Channel1" />
</Mapping>

其中 CycleTime 单位为 ns,1000000 即 1 ms;Priority 数值越小优先级越高。配置完成后激活工程,TwinCAT 会把实时任务下载到实时核,Windows 侧只保留工程环境和 ADS 通信。此时用示波器或 TwinCAT 的 Scope 功能观察任务抖动,若抖动在周期时间的 5% 以内,通常认为实时性满足要求。

五、架构带来的关键约束