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 的运行时由几个关键组件构成。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 通常是合理选择。
四、配置示例:从工程到运行
下面是一个最小化的 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% 以内,通常认为实时性满足要求。