Skip to content

Instantly share code, notes, and snippets.

@newpost
Created September 6, 2026 14:56
Show Gist options
  • Select an option

  • Save newpost/785b22b9221f9831c503836eaaba1260 to your computer and use it in GitHub Desktop.

Select an option

Save newpost/785b22b9221f9831c503836eaaba1260 to your computer and use it in GitHub Desktop.
TwinCAT PLC 知识手册

TwinCAT PLC 知识手册

面向 .NET 开发者与自动化工程师的 TwinCAT 3 入门到进阶知识手册。 本手册为纯知识/概念讲解,不包含代码示例,侧重概念、原理与工程实践的理解。


目录


第 1 章 TwinCAT 平台概览

1.1 TwinCAT 是什么

TwinCAT(The Windows Control and Automation Technology)是 Beckhoff 公司的软件自动化平台。它把一台普通 PC 变成功能强大的软件 PLC(Soft PLC)与运动控制器,可以在 Windows 操作系统上实时运行控制程序,同时复用 PC 的算力、网络与生态资源。

核心思想:用标准工业 PC 替代传统专用 PLC 硬件,通过软件实现 PLC、运动控制、视觉、HMI 等多种自动化功能。

1.2 版本演进

  • TwinCAT 2:32 位,基于 Windows 的经典版本,使用 CoDeSys V2.3 内核,功能相对固定。
  • TwinCAT 3:现主流版本。基于 Visual Studio 集成(XAE),支持面向对象编程、多语言、64 位、自动化接口(Automation Interface)、TE 系列工具(如 TwinCAT Scope、TwinCAT 3 HMI)。
  • TwinCAT 3.1:当前广泛使用的 32 位运行时;TwinCAT 3.1.4024+ 及更新的 64 位运行时(TwinCAT 3.1.4026/4028 等)逐步普及。

版本差异主要影响:运行时位数、支持的平台(Win10/11、Windows CE、嵌入式)、可用功能包与驱动兼容性。

1.3 核心概念:XAE 与 XAR

  • XAE(eXtended Automation Engineering):工程/开发环境。负责编程、配置、编译、调试。通常以 Visual Studio 插件形式出现,用户在此编写 PLC 程序、配置 I/O、任务与路由。
  • XAR(eXtended Automation Runtime):运行时环境。负责在目标系统上实时执行程序、处理 I/O、管理任务调度与通信。

理解:XAE 是「写代码/配置」的地方,XAR 是「跑程序」的地方。 两者可以位于同一台机器(本地开发+运行),也可以分离(开发机通过路由访问目标控制器)。

1.4 运行时组件

TwinCAT 3 提供多种运行时组件,各自承担不同职责:

  • PLC(TwinCAT PLC Control):执行 IEC 61131-3 程序,是逻辑控制核心。
  • NC I / NC P(Motion Control):运动控制,负责轴定位、插补、电子齿轮/凸轮等。
  • CNC:数控插补,面向机床类应用。
  • HMI(TwinCAT 3 HMI):人机界面,可独立部署到 Web/浏览器。
  • SAFETY(TwinSAFE):功能安全,遵循 IEC 61508/ISO 13849。
  • I/O:与现场总线(EtherCAT、CANopen、Modbus、PROFINET 等)交互。

一次工程可启用多个运行时组件,它们共享同一实时内核。

1.5 系统架构

从逻辑上可把系统分为三层:

  1. 硬件层:工业 PC(IPC)、EtherCAT 总线、I/O 端子、伺服驱动器等。
  2. 运行时层(XAR):实时内核(RTime)、任务调度、PLC/NC/CNC 运行时、ADS 通信服务。
  3. 工程层(XAE):Visual Studio 中的项目树、配置、在线调试、诊断。

Windows 上,TwinCAT 通过实时内核与普通 Windows 任务隔离,保证控制任务的确定性(determinism)。

1.6 与传统 PLC 的区别

维度 传统专用 PLC TwinCAT 软 PLC
硬件 专用 CPU + 固件 通用工业 PC
性能 固定、受限 随 CPU 增强,算力强
扩展 硬件受限 软件/接口灵活,可加视觉、HMI、数据库
生态 封闭 可复用 Windows/.NET 生态
实时性 硬实时固件 通过实时内核保证

小结:TwinCAT 把自动化工程带入了「软件定义」的时代,代价是需要理解实时内核、路由与 ADS 通信等概念。


第 2 章 工程结构与项目组织

2.1 TwinCAT 项目树

一个 TwinCAT 3 工程在 Visual Studio 中呈现为树状结构,顶层节点通常包括:

  • System:系统配置,含路由(Routes)、许可证(License)、证书(Certificates)等。
  • PLC:PLC 项目与程序文件。
  • I/O:设备与总线配置(EtherCAT 主站、从站、映射)。
  • NC / SAFETY / HMI:按需启用的其他运行时。
  • Mappings:变量映射(连接 PLC 变量与 I/O)。

工程以 .tsproj 文件为根,包含多个子项目与配置。

2.2 System 配置

System 节点集中管理影响系统级通信的配置:

  • AmsNetId:每个 TwinCAT 节点的唯一网络标识(形如 a.b.c.d.e.f),用于 ADS 寻址。
  • 路由(Routes):定义本机到其他 TwinCAT 节点的连接方式,分静态路由(TCP/IP、串口等)与动态路由(自动发现)。
  • 许可证(License):TwinCAT 运行时需激活相应许可才能运行,分 7 天试用、正式(硬件狗/软件绑定)等。
  • 证书:TLS 相关安全配置。

理解 AmsNetId 与路由是掌握 ADS 通信的前提(详见第 5 章)。

2.3 PLC 项目结构

一个 PLC 项目(.plcproj)包含多种文件类型,通过后缀区分:

  • TcPOU(Program Organization Unit):程序组织单元,可声明为程序(PROGRAM)、功能块(FUNCTION_BLOCK)或函数(FUNCTION)。
  • TcGVL(Global Variable List):全局变量列表,声明跨 POU 共享的全局变量。
  • TcDUT(Data Unit Type):数据类型定义,如结构体(STRUCT)、枚举(ENUM)、别名(TYPE)。
  • TcPLC:PLC 项目配置(任务、编译设置等)。
  • Tmc:编译生成的运行时元数据(Symbol 信息),供 ADS/在线访问。

2.4 程序组织单元(POU)

IEC 61131-3 的三种基本 POU:

  • Program(程序):顶层执行单元,常由任务调度,可直接访问全局变量。
  • Function Block(功能块):可实例化、带内部状态(实例数据),适合封装重复逻辑。
  • Function(函数):无内部状态,输入输出均为参数,适合纯计算。

理解三者的区别,对组织大型程序至关重要:函数无状态、功能块有状态、程序是任务入口。

2.5 任务(Task)与周期

  • 任务:调度单元,决定哪些 POU 以什么频率、什么优先级运行。
  • 循环时间(Cycle Time):任务一次完整执行的周期,如 1ms、10ms。
  • 优先级:多个任务按优先级抢占调度,影响实时性。
  • 任务类型:PLC 任务、I/O 任务(同步 I/O 刷新)、外部任务(如由 EtherCAT 同步)。

任务配置直接影响控制周期与 I/O 一致性,是性能调优的关键。

2.6 编译、激活与运行

  • 编译(Build):把源码编译为运行时目标与符号信息。
  • 激活配置(Activate Configuration):把工程配置与程序写入目标系统,替换当前运行配置。
  • 运行(Run):激活后目标系统进入运行状态,任务开始执行。
  • 在线修改(Online Change):运行时修改代码并热更新,无需停机,但有限制(不能改变任务/变量结构等)。

注意:激活配置会重启运行时,需理解其影响,尤其在生产环境。

2.7 在线功能

  • 登录(Login):建立在线连接,查看实时值、断点。
  • 变量监视:查看/修改当前值。
  • 下载(Download):将代码下载到运行时。
  • 重启(Restart):冷/热重启 PLC。

小结:工程结构是「配置→编程→编译→激活→运行→在线调试」的闭环,理解各环节是排查问题的基础。


第 3 章 IEC 61131-3 与结构化文本

3.1 编程语言标准

IEC 61131-3 定义了五种标准编程语言,TwinCAT 3 全部支持:

  • ST(Structured Text,结构化文本):类 Pascal 的文本语言,适合复杂逻辑,最常用。
  • LD(Ladder Diagram,梯形图):继电器逻辑图,适合开关逻辑。
  • FBD(Function Block Diagram,功能块图):图形化功能块连线,适合信号流。
  • SFC(Sequential Function Chart,顺序功能图):状态机/流程图,适合顺序控制。
  • IL(Instruction List,指令表):类汇编的文本语言,逐渐少用。

本手册重点讲 ST 的概念,因为它是文本编程的主流,也与 .NET 开发者思维最接近。

3.2 结构化文本(ST)概述

ST 由声明区与实现区组成:

  • 声明区:定义变量、类型、常量等。
  • 实现区:包含赋值、条件、循环、函数调用等语句。

其语言特点:大小写不敏感、使用分号分隔语句、用关键字(如 VAR、IF、FOR)组织结构、支持布尔逻辑与算术运算。

3.3 数据类型

基本数据类型(按位宽分类):

  • 布尔型:BOOL(真/假)。
  • 整数型:BYTE/SINT(8 位)、WORD/INT(16 位)、DWORD/DINT(32 位)、LWORD/LINT(64 位),无符号/有符号对应。
  • 浮点型:REAL(32 位单精度)、LREAL(64 位双精度)。
  • 字符串:STRING(固定长度字节串)、WSTRING(宽字符串)。
  • 时间类型:TIME、TOD(Time of Day)、DATE、DT(Date and Time)、LTIME。
  • 位/字节:BIT(位串)。

理解位宽与有/无符号,是避免数据溢出、类型转换错误的基础。

3.4 变量与作用域

变量声明在 VAR...END_VAR 块中,按作用域分类:

  • 局部变量:POU 内的 VAR。
  • 输入/输出变量:VAR_INPUT(输入)、VAR_OUTPUT(输出)、VAR_IN_OUT(输入输出/引用)。
  • 全局变量:在 GVL 中声明的 VAR_GLOBAL,全局可见。
  • 常量:VAR CONSTANT。
  • 静态/实例变量:功能块内部的持久变量。

变量修饰符(如 RETAIN 掉电保持、PERSISTENT 持久化)影响数据在重启/断电后的保留行为。

3.5 语句与表达式概念

ST 支持的语句类型(概念层面):

  • 赋值:将表达式结果赋给变量。
  • 条件:IF...THEN...ELSIF...ELSE...END_IF。
  • 选择:CASE...OF...END_CASE。
  • 循环:FOR、WHILE、REPEAT...UNTIL。
  • 调用:调用功能块/函数,如布尔触发 FB(...)、沿触发等。
  • 返回:RETURN。

表达式支持算术、比较、逻辑、位运算,以及类型转换函数(如 INT_TO_REAL)。

3.6 DUT:结构体、枚举、别名

DUT(Data Unit Type)用于自定义数据类型:

  • 结构体(STRUCT):把多个不同类型字段组合成一个整体,适合表示「对象/记录」,如一个轴的多个属性。
  • 枚举(ENUM):定义一组命名常量,表示有限状态,如运行模式。
  • 别名(TYPE 别名):给已有类型起新名字,增强可读性。
  • 联合体/数组:也可在 DUT 中定义。

结构体字段的顺序与大小决定了其内存布局,这与 ADS 通信中的「结构体映射」直接相关(见第 5 章)。

3.7 面向对象扩展

TwinCAT 3 在 IEC 61131-3 基础上引入面向对象扩展:

  • 支持方法(METHOD)、属性(PROPERTY)、继承(EXTENDS)、接口(INTERFACE)、抽象/多态。
  • 适合大型、可复用的工程结构。

小结:ST 与类型系统是 PLC 编程的基石,理解数据类型与作用域能显著减少编程与通信阶段的错误。


第 4 章 实时性与任务调度

4.1 实时系统概念

实时系统要求在确定的时间内响应事件,且行为可预测(deterministic)。TwinCAT 通过专用实时内核,在 Windows 上为控制任务分配确定性的执行窗口,避免被普通进程(如系统服务、浏览器)抢占。

  • 硬实时:必须在截止时间内完成,否则视为失败(如伺服控制)。
  • 软实时:允许偶尔超时,但整体性能受影响。

4.2 任务优先级与循环时间

  • 优先级:数值越小优先级越高(TwinCAT 中 0 为最高)。高优先级任务抢占低优先级任务。
  • 循环时间(Cycle Time):任务一次循环的目标耗时,如 PLC 任务 10ms、NC 任务 1ms。
  • 实时性约束:任务的实际执行时间(Jitter)必须远小于循环时间,才能保证稳定。

配置原则:关键、高频、对时间敏感的任务优先级更高;CPU 负载需留余量。

4.3 看门狗(Watchdog)

看门狗用于检测任务是否「卡死」或超时。若任务在设定时间内未完成(或持续占用超限),系统可触发报警或停机,防止失控。TwinCAT 的任务配置中可设定看门狗时间与行为。

4.4 多任务与共享数据

多任务并发访问同一变量可能产生数据一致性问题。TwinCAT 提供机制保证一致性:

  • 任务间通信:通过共享变量,但需注意访问原子性。
  • 同步机制:如 VAR_ACCESS、锁、或通过特定任务间通信原语。

常见风险:一个任务写、另一个任务读时读到中间值(撕裂读/写)。对跨任务共享的结构体/大数据尤其需谨慎。

4.5 性能考量

  • 控制周期与 CPU 负载:周期越短,CPU 占用越高。
  • I/O 同步:I/O 刷新与任务周期同步,减少数据不一致。
  • 程序复杂度:避免在实时任务中做繁重计算或大数组处理。

小结:实时性由「任务优先级 + 循环时间 + 看门狗 + 数据一致性」共同保证,是运动控制与快速逻辑的关键。


第 5 章 ADS 通信

5.1 ADS 协议概述

ADS(Automation Device Specification) 是 Beckhoff 的通信协议,用于 TwinCAT 组件之间、以及外部应用(如 .NET、C++、Python)与 TwinCAT 运行时之间的通信。它基于 TCP/IP(也可通过其他传输),是访问 TwinCAT 变量、服务、状态的统一接口。

ADS 采用客户端/服务器模型:客户端(如 .NET 程序)发送请求,服务器(TwinCAT 运行时/系统服务)响应。

5.2 AmsNetId 与 AmsPort

  • AmsNetId:TwinCAT 节点的网络地址,形如 192.168.0.112.1.1。前 4 段常对应 IP,后 2 段为路由/系统标识。每个节点必须唯一。
  • AmsPort:节点内部的端口号,标识具体的服务/运行时。常见端口:
    • 851:PLC 运行时(标准 PLC,第一运行时)。第二运行时为 852,以此类推。
    • 10000:系统服务(System Service),用于查询设备状态、重启、诊断等。
    • 15000 等:其他服务(如 NC、高级功能)。

理解「NetId 定位节点、Port 定位服务」是 ADS 寻址的核心。

5.3 路由(Routes)

路由定义了本机如何访问其他 TwinCAT 节点。ADS 通信要求双方建立路由关系:

  • 静态路由:手动配置,常见 TCP/IP 类型,指定对端 IP 与 NetId。
  • 动态路由:自动发现,适用于同一网段/广播环境。
  • 回程路由(Back Route):对方能访问我,也需要配置,否则单向通信失败。

路由配置是「无法连接」类问题最常见的根源之一。

5.4 符号寻址(Symbol Addressing)

TwinCAT 把 PLC 变量按符号路径暴露给 ADS,路径形如:

  • 全局变量:GVL_Points.nCount。
  • 结构体字段:GVL_Points.stAxis.dActual。
  • 数组元素、嵌套结构同样按路径访问。

编译时生成符号表(Symbol 信息),ADS 客户端据此知道变量的类型、地址与可访问性。符号必须在运行时可用(即程序已编译/激活),否则访问失败。

5.5 数据类型映射

ADS 需要把 PLC 类型映射为外部语言(如 .NET)类型:

PLC 类型 .NET 类型(典型)
BOOL bool
INT / SINT / DINT short / sbyte / int
REAL / LREAL float / double
STRING string
结构体(STRUCT) 对应 .NET 结构体/类(按字段顺序与大小)

结构体映射需要保证字段顺序、大小、对齐(Pack)一致,否则读写会错位。这是 C# 侧常见的坑。

5.6 设备状态(Device State)

ADS 设备有两个状态维度:

  • ADS 状态(AdsState):如 Run(运行)、Stop(停止)、Config(配置)、Reset 等。
  • 设备状态(DeviceState):具体组件状态,如 PLC 是否正常。

查询设备状态常用于连通性测试与故障诊断:能成功查询状态即证明路由与端口可达。

5.7 通信模型与连接模式

  • 本地连接:本机有 TwinCAT 运行时/路由器,客户端直接连接本机端口。
  • 远程连接:客户端无本地 TwinCAT,可内嵌/借助 ADS 路由器(如管理式 TCP 路由器)建立到远程节点的路由,再连接远程端口。

理解两种模式,便于在不同部署环境(开发机 vs 生产机)间切换。

小结:ADS 通信 = NetId/Port 寻址 + 路由可达 + 符号寻址 + 类型映射,四者缺一不可。


第 6 章 常见问题与排错思路

6.1 路由不通

现象:连接失败、超时、Error 0x... 类错误。

排查方向:

  • 对端 AmsNetId 与 IP 是否正确。
  • 是否配置了到对端的路由,且对端是否有回程路由。
  • 网络是否可达(ping 通、防火墙放行 ADS 端口)。
  • TwinCAT 路由器/运行时是否已启动。

6.2 符号找不到

现象:读写符号时报「Symbol not found」。

排查方向:

  • 符号路径拼写是否正确(大小写、命名空间、GVL_Points 是否 qualified_only)。
  • 程序是否已编译/激活,符号表是否已生成。
  • 目标运行时是否为对应 PLC 端口(851)。

6.3 类型不匹配

现象:写入时类型转换失败、读回值异常。

排查方向:

  • PLC 类型与外部类型是否一致(如 INT 应为 short/int,而非 long)。
  • 是否传入了错误 CLR 类型导致 ADS 库强制转换失败。
  • 结构体字段顺序、大小、对齐(Pack)是否与 PLC 端一致。

6.4 目标状态问题

现象:能连接但读写无响应/报错。

排查方向:

  • 目标 AdsState 是否为 Run(运行态才可读写变量)。
  • 是否处于 Config/Stop 等非运行状态。
  • 是否因安全/许可未激活而受限。

6.5 诊断工具

  • TwinCAT System Manager / XAE 诊断视图:查看路由、状态、日志。
  • TwinCAT 的 Tc 命令行工具:查路由、状态。
  • ADS 错误码:通过错误码(0x...)定位具体原因。
  • 网络工具:ping、端口检查等。

小结:排错顺序通常是「网络可达性 → 路由 → 目标状态 → 符号 → 类型」,逐层排查。


第 7 章 术语表

术语 含义
TwinCAT Beckhoff 的软件自动化平台,PC-based 控制。
XAE 工程开发环境(Visual Studio 集成),编程与配置。
XAR 运行时环境,实时执行程序。
Soft PLC 软件 PLC,在 PC 上以软件方式实现 PLC 功能。
POU 程序组织单元(Program/Function Block/Function)。
ST 结构化文本,IEC 61131-3 文本编程语言。
DUT 数据类型定义(结构体/枚举/别名)。
GVL 全局变量列表。
Task 任务,调度单元,决定执行频率与优先级。
Cycle Time 任务循环时间。
Watchdog 看门狗,检测任务超时/卡死。
AmsNetId TwinCAT 节点网络地址。
AmsPort 节点内服务端口(851 PLC、10000 系统服务等)。
ADS Automation Device Specification,TwinCAT 通信协议。
Route 路由,节点间的连接定义。
Symbol 符号,PLC 变量的寻址路径与元数据。
Activate 激活配置,写入目标并生效。
Online Change 在线修改,运行时热更新代码。
EtherCAT Beckhoff 的实时以太网现场总线。
NC 运动控制运行时。
HMI 人机界面。
TwinSAFE 功能安全解决方案。
RETAIN 掉电保持变量。
Jitter 抖动,任务实际执行时间波动。

本手册为概念性知识文档,不包含代码示例。如需配套实战练习或深入某一专题,可进一步扩展。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment