跳至主要内容
AllTwinCAT3.com — TwinCAT 3 技术中心 | 课程咨询微信:Shang_0352 · 手机:178-1679-6750
课程体系 接单合作 技术文章 GitHub
TwinCAT 3 · 运动控制 · WPF 上位机 · 半导体设备

TwinCAT 3 全栈
三门系统化
工程实战课程

国内唯一覆盖 TwinCAT 3 工程实战 · 运动控制(电子凸轮/OOP轴控)· WPF 工业上位机(ADS/MVVM)的全栈中文课程体系。帮助 PLC 工程师从执行者成长为系统级开发者。六年半导体设备一线经验,全部源码开源。

无需注册 · B站免费观看前三节 · 满意再购课
6+
年工程经验
139
课时总量
3门
系统课程
全源码
GitHub 开源
六年半导体设备一线经验
系统化课程体系 · 工程实战驱动
三门课 139 课时 · 全源码开源
购课后永久答疑群
无锡 · 可本地当面沟通
// 技术文章
精选 TwinCAT 3 工程实战文章
课程完整目录 →
MOTION CONTROL
TwinCAT 3 电子凸轮完全指南:凸轮表设计 · 五种插补方式 · MC_CamIn 工程实战

电子凸轮是高端运动控制的核心技术,广泛应用于印刷、包装与半导体行业。本文系统梳理凸轮表设计原理,对比 Linear / Cubic / BSpline / Akima / Hermite 五种插补方式的加速度连续性,并基于 PVD 设备基板往复运动演示完整的 MC_CamIn / MC_CamOut 实现方案,含 CSV 凸轮表生成工具。

MC_CamIn电子凸轮五种插补独立页面 →
ADS · WPF
WPF + ADS 通信:心跳检测与指数退避自动重连工程实现

工程级 ADS 断线检测与重连状态机,含指数退避算法与 MVVM 完整实现。

ADS心跳重连独立页面 →
EtherCAT
EtherCAT PDO 映射深度解析:DC 同步 · WcState 监控 · 故障排查

从 ESI 文件到 TwinCAT 3 工程配置的完整 PDO 映射实践与 WcState 报警 FB 设计。

EtherCATDC Sync独立页面 →
OOP · 架构设计
TwinCAT 3 OOP 轴控:INTERFACE · 继承 · 工厂模式分层架构工程实践

可复用轴控 FB 套件的 OOP 设计模式,从 I_Axis 接口到 FB_AxisBase 基类的完整实现。

OOPI_Axis接口独立页面 →
PackML · 半导体设备
PackML 状态机工程实现:17个状态 · Stopping vs Aborting · TwinCAT 3 完整 FB

ISA-88 PackML 标准在晶圆研磨设备上的完整实现,含 Stopping / Aborting 差异处理。

PackML状态机独立页面 →
// 技术博客
工程笔记 · 深度技术 沉淀
持续更新中
筛选: 全部 运动控制 EtherCAT WPF · ADS OOP · 架构 工具 · 效率
运动控制 2026-03-15
TwinCAT 3 MC_Home 回零策略全解:模式0-35对比与半导体设备实践

回零是运动控制工程里最容易踩坑的环节。本文系统梳理 MC_Home 全部回零模式,重点对比模式 3(限位开关)与模式 5(原点开关)在晶圆搬运场景下的差异,含坐标系重置与多轴回零时序设计。

MC_Home 回零策略 PLCopen 约 12 分钟
EtherCAT 2026-03-08
EtherCAT 从站诊断:Init Error / PreOp Error 系统排查手册

遇到从站卡在 Init 或 PreOp 状态是工程调试最常见的拦路虎。本文整理 12 种常见原因及对应排查步骤,含 ESI 文件校验、DC Sync 偏差过大、EL6695 冗余配置错误等真实案例。

Init Error PreOp ESI诊断 约 15 分钟
WPF · ADS 2026-03-01
WPF Dispatcher 正确用法:工控场景下的线程安全与内存泄漏防范

ADS Notification 回调跑在非 UI 线程,直接更新控件必然崩溃。本文梳理 Dispatcher.Invoke vs BeginInvoke 的选型逻辑,以及在高频数据(1ms)场景下如何用节流降采样避免 UI 卡顿。

Dispatcher 线程安全 ADS Notification 约 10 分钟
OOP · 架构 2026-02-22
TwinCAT 3 ABSTRACT FB 与 INTERFACE:何时用继承,何时用组合

ST 语言的 OOP 有很多反直觉的地方。本文用轴控 FB 套件为例,讨论 FB_EXTEND 继承链的深度限制、INTERFACE 多态的性能代价,以及在 PLC 实时任务里 OOP 设计的边界在哪里。

ABSTRACT INTERFACE FB_EXTEND 约 14 分钟
工具 · 效率 2026-02-14
TwinCAT 3 + Git 工程版本管理:.gitignore 配置与多版本并行部署实践

TC3 工程目录里有大量编译产物和平台相关文件,直接 git init 会把几十 MB 二进制文件提交进去。本文给出一份经过验证的 .gitignore 模板,以及如何用 Branch 策略管理多台设备的 TwinCAT 版本差异。

Git .gitignore 多版本管理 约 8 分钟
运动控制 2026-02-05
MC_MoveVelocity 与 MC_MoveContinuousAbsolute 选型:连续运动场景的细节差异

两个 FB 初看功能相似,但在停止行为、缓冲模式支持、与凸轮脱离的配合上有明显差别。本文以 PVD 基板扫描运动为背景,梳理实际工程中的选型依据。

MC_MoveVelocity 连续运动 缓冲模式 约 9 分钟
// 每日新闻
工业自动化 · 行业动态
今日更新
实时抓取行业资讯 · 每日更新
01
Beckhoff 今日 TODAY
TwinCAT 3.1 Build 4026 正式发布:VS2022 支持 + Package Management 独立更新
新版本支持 Microsoft Visual Studio 2022(64位工程环境),并引入 TwinCAT Package Management 实现组件独立升级,大幅缩短更新时间。
02
半导体行业 今日 HOT
国内晶圆厂扩产提速,设备控制系统国产化替代需求持续增长
多家国内 12 英寸晶圆厂相继宣布扩产计划,带动 PLC/运控系统本土供应商订单明显增加,Beckhoff 国内业务亦受益于此。
03
工控网 昨日
EtherCAT Technology Group 发布 EtherCAT G 新规范:10G 带宽支持高速视觉检测
ETG 最新发布的 EtherCAT G 规范将带宽提升至 10Gbps,主要面向高速视觉检测和大量数据传输场景,TwinCAT 4026 已预留支持接口。
04
锂电行业 昨日
锂电设备卷绕机精度要求提升至 ±0.1mm,电子凸轮同步控制成标配需求
随着大圆柱电池规模化量产,卷绕工序对张力控制和切刀同步精度要求进一步提高,基于 PLCopen 电子凸轮方案的设备商占比持续上升。
05
OPC基金会 2天前
OPC UA FX(Field eXchange)规范正式落地,设备间直连通信无需中间层
OPC UA FX 允许不同厂商控制器直接点对点通信,Beckhoff TwinCAT 已发布对应 TF6100 扩展支持,可替代部分 EtherCAT 主从组网场景。
06
Beckhoff 无锡 2天前
Beckhoff 无锡应用中心扩建完成,新增运动控制与半导体设备专项培训资源
无锡应用中心新增专用运动控制实验平台,可支持最多 16 轴同步演示,预计于 2026 Q2 开放工程师培训预约。
新闻内容为编辑整理,来源涵盖 Beckhoff 官网、ETG、工控网、半导体行业媒体,每日更新。
TC3 技术快讯
TwinCAT 4026 已支持 Win11 23H2,注意升级前备份
TcUnit v1.3 发布,新增 AssertArrayEquals 方法
EL7201-9014 新驱动模块支持 SIL2 安全认证
Beckhoff ADS .NET 6 SDK v6.1.0 NuGet 已更新
TF5065 Kinematic Transformation 新增 Delta 并联机器人支持
本周热门话题
TwinCAT 4026 EtherCAT G OPC UA FX 锂电扩产 晶圆国产化 PackML 2.0 TwinSAFE SIL3 ADS .NET 6 视觉检测 数字孪生
不错过每日更新

关注 B站尚工账号或微信公众号,每日推送行业动态 + 技术博客更新。

▶ 关注 B站·尚工 微信:Shang_0352
// 代码资源库
开源 TwinCAT 3 工程模块
前往 GitHub →
OOP 轴控 FB 套件
I_Axis 接口 + FB_AxisBase 基类 + FB_LinearAxis 子类,覆盖 Home/Jog/MoveAbs/MoveRel/GearIn,适用于半导体及通用运动控制场景。
ST · TC3可下载
ADS 通信框架
WPF 上位机 IAdsService 接口封装,含心跳检测、指数退避自动重连、Notification 订阅管理,完整 MVVM 工程示例。
C# · WPF可下载
电子凸轮模板
MC_CamIn / MC_CamOut 标准实现,含 CSV 凸轮表生成工具、五种插补方式示例与完整 TwinCAT 3 工程。
ST · Motion可下载
报警信号处理库
带防抖滤波的报警采集与分级处理 FB(Fatal/Error/Warning/Info),含屏蔽/确认/自动复位逻辑,适用于 PVD/CVD 等半导体设备。
ST · TC3可下载
// 付费课程
系统化 工程实战 课程体系
查看完整目录 →
课程一
TwinCAT 3 工程实战 免费试看
42 课时 · 4 章
¥399
课程二
运动控制实战 免费试看
42 课时 · 3 章
¥699
课程三
WPF 工业上位机开发 免费试看
55 课时 · 4 章
¥799
TwinCAT 3 工程实战
面向从零开始或从西门子/三菱转型的工程师,以及想系统补齐 TwinCAT 3 知识体系的在职工程师。从开发环境搭建到 EtherCAT 总线调试,以半导体设备工程实践为主线,建立从环境安装到工程级代码规范的完整认知体系。
第 1 章TwinCAT 3 生态与开发环境EP01–08 · 8课时
  • EP01
    TwinCAT 3 是什么——PC-based 控制的本质
    XAE/XAR实时内核PC-based
  • EP02
    安装开发环境 · License · Windows 11 兼容性
    XAE ShellLicenseADS 4132
  • EP03
    创建第一个 TwinCAT 3 项目 · Watch 窗口
    项目结构ActivateWatch窗口
  • EP04
    Task 配置与实时性原理 · CPU Core 绑定
    Task周期Core绑定Jitter
  • EP05
    版本控制——TwinCAT 3 工程与 Git
    Git.gitignore分支策略
  • EP06
    项目工程结构设计规范 · Library 规划
    工程结构Library规范
  • EP07
    虚拟机开发环境搭建 · ADS 路由配置
    虚拟机仿真ADS路由
  • EP08
    管理多个 TwinCAT 版本 · 部署最佳实践
    多版本部署
第 2 章IEC 61131-3 编程核心——ST 语言精讲EP09–20 · 12课时
  • EP09
    数据类型完全指南 · LREAL 精度陷阱
    LREAL精度TYPE定义类型转换
  • EP10
    数组与指针 · 数组越界防护(工程案例)
    数组越界POINTERREFERENCE TO
  • EP11
    结构体与联合体 · 轴参数打包设计
    STRUCTUNION参数打包
  • EP12
    FUNCTION · 滤波算法(中位值/均值)实现
    FUNCTION参数传递滤波算法
  • EP13
    FUNCTION_BLOCK 基础 · 气缸控制完整实现
    FB实例VAR类型气缸控制
  • EP14
    INTERFACE 接口与多态 · 通用轴接口设计
    INTERFACE继承多态
  • EP15
    流程控制 · CASE 状态机 · CSV 事件记录器
    CASE状态机CSV记录器
  • EP16
    Tc2_Standard 标准库 · R_TRIG 边沿检测最佳实践
    TON/TOF/TPR_TRIG边沿检测
  • EP17
    Tc2_Utilities · FIFO · 执行时间测量
    FIFO执行时间
  • EP18
    I/O 配置 · EL 系列模块 · PDO 变量链接
    EL模块PDO链接AT语法
  • EP19
    Library 库工程创建与管理
    Library参数列表
  • EP20
    TwinCAT Functions · OPC UA · MQTT IoT 扩展
    TF6310OPC UAMQTT
第 3 章调试技术 · 代码规范 · 工程实践EP21–28 · 8课时
  • EP21
    在线调试全套技巧 · Force · Online Change
    Watch窗口ForceOnline Change
  • EP22
    TwinCAT Scope 波形采集 · Trigger 触发
    Scope波形采集
  • EP23
    经典报错速查:C0555 · ADS 4132 · WcState
    C0555ADS 4132WcState
  • EP24
    命名规范:Beckhoff vs PLCopen 对比分析
    命名规范PLCopen
  • EP25
    ADS 通信原理 · AmsNetId · 路由配置(课程三基础)
    ADS原理AmsNetId
  • EP26
    TwinCAT Automation Interface · CI/CD 自动部署
    Automation IFCI/CD
  • EP27
    TcUnit 单元测试 · TDD 工控实践入门
    TcUnitTDD单元测试
  • EP28
    综合实战:三槽液体混合下位机(课程三联调基础)
    综合实战PackML配方系统
第 4 章EtherCAT 总线深度实践EP29–36 · 8课时
  • EP29
    EtherCAT 原理 · 帧结构 · DC 同步机制
    EtherCAT帧DC同步
  • EP30
    ESI 文件导入 · 设备配置 · OnlineDevice 诊断
    ESI文件Sync Mode
  • EP31
    PDO 映射完整配置 · TxPDO/RxPDO 实操
    PDO映射TxPDO/RxPDO
  • EP32
    DC Synchron 配置 · WcState 报警 FB 设计
    DC SynchronWcState报警FB
  • EP33
    EtherCAT 状态机 · Init Error / Link Loss 排查
    状态机Init Error
  • EP34
    Beckhoff I/O 模块族 · 模拟量 · 编码器模块
    EL模块族EL3068EL5101
  • EP35
    串口通信 TF6340 · Modbus TCP TF6250
    TF6340串口Modbus TCP
  • EP36
    工程案例:PVD 设备 EtherCAT 总线调试实录
    PVD案例工程经验
课程一 · COURSE 01
TwinCAT 3 工程实战
¥399/ 永久有效¥699
  • 4章 · 42课时 · 约每课 20 分钟
  • 完整 GitHub 源码工程(可直接运行)
  • 答疑群永久有效
  • 后续新增集数免费获得
  • 42课时系统覆盖 · 工程实战驱动
B站免费看 EP01–03,满意再购课 →
▶ 立即免费试看
📱 微信:Shang_0352(点击复制)
👆 复制微信号后添加,或前往下方服务区扫码
运动控制实战
从 PLCopen MC 单轴基础到多轴同步、电子凸轮完整实现,以及工程级 OOP 轴控架构设计。内容来源于尚工在晶圆减薄(压力闭环)、PVD/CVD(多轴协同)设备上的真实项目经验,每一集都有对应的工程场景。前置:课程一,或有 ST 编程基础。
第 5 章NC 轴基础与 PLCopen 单轴控制EP01–14 · 14课时
  • EP01
    NC 系统架构 · PTP/NCI/FIFO Channel · 轴类型
    NC TaskPTP轴类型
  • EP02
    轴配置 · EtherCAT 驱动器 Axis Link · CoE 参数
    Axis LinkCoE参数AX5000
  • EP03
    轴动力学参数 · Kv 增益 · 跟随误差 · Jerk
    Kv增益跟随误差Jerk平滑
  • EP04
    MC_Power · MC_Reset · 轴状态机 · ErrorID 速查
    MC_Power轴状态机ErrorID
  • EP05
    MC_Home 8种回零策略 · 绝对值编码器 SetPosition
    回零8种模式绝对值编码器
  • EP06
    MC_MoveAbsolute/Relative · BufferMode · Override
    绝对/相对定位BufferMode
  • EP07
    MC_MoveVelocity · MC_Jog · MC_Stop · MC_Halt
    MC_JogMC_Stop vs Halt
  • EP08
    位置捕获 MC_TouchProbe · MC_DigitalCamSwitch
    MC_TouchProbeLatch
  • EP09
    轴诊断与 Scope 波形分析 · Bode 图频响
    轴监控ScopeBode图
  • EP10
    OOP 轴控架构(一)· I_Axis 接口 · FB_AxisBase
    I_Axis接口FB_AxisBaseOOP封装
  • EP11
    OOP 轴控架构(二)· 子类扩展 · 工厂模式
    子类扩展轴对象数组
  • EP12
    软限位 · 硬限位 · 超程保护与恢复流程
    软限位硬件超程
  • EP13
    飞剪与追剪 · 速度同步切割应用(锂电/光伏)
    飞剪MC_GearIn
  • EP14
    工程案例:晶圆减薄设备轴控系统完整回顾
    晶圆减薄压力闭环源码讲解
第 6 章多轴同步与电子凸轮(核心章节)EP15–28 · 14课时
  • EP15
    主从耦合原理 · MC_GearIn · 虚轴应用
    主从耦合虚轴
  • EP16
    MC_Phasing 相位调整 · 印刷套准补偿
    MC_Phasing套准
  • EP17
    电子凸轮原理 · 凸轮关系 · 运动学分析
    凸轮原理Cam Table
  • EP18
    五种插补方式深度对比 · 加速度连续性分析
    五种插补BSplineAkima
  • EP19
    CSV 凸轮表生成工具 · Cam Design Editor
    CSV凸轮表动态加载
  • EP20
    MC_CamTableSelect · 在线修改 · 无停机换型
    MC_CamTableSelect无停机换型
  • EP21
    MC_CamIn · StartMode · Periodic 周期模式
    MC_CamInStartMode
  • EP22
    MC_CamOut · 脱离时机 · 凸轮完整状态机
    MC_CamOut状态机
  • EP23
    电子凸轮调试:Scope 同步波形 · 机械振动诊断
    同步误差机械振动
  • EP24
    GearIn 包装机应用 · MC_GearInPos 爬坡同步
    横封机MC_GearInPos
  • EP25
    工程案例:PVD 设备多轴协调控制
    PVD多轴速度同步
  • EP26
    压力/力闭环控制 · PID 整定 · 位置↔压力切换
    PID整定压力闭环
  • EP27
    NC 插补 NCI · G 代码基础 · TF5200 CNC
    NCI插补G代码
  • EP28
    综合实战:SCADA 项目运动控制模块 + ADS 导出
    SCADA运动模块联调准备
第 7 章传感器融合 · 安全控制 · PackMLEP29–42 · 14课时
  • EP29
    传感器接入标定 · 滤波算法库(移动均值/一阶低通)
    模拟量标定滤波算法库
  • EP30
    CG 测厚传感器集成 · 中位值滤波 · 数组边界防护
    CG测厚中位值滤波
  • EP31
    温度控制 · FB_CTRL_PID · 腔体温度案例
    EL3314热电偶FB_CTRL_PID
  • EP32
    气体流量控制 MFC · CVD 气体配方管理
    MFC流量控制CVD工艺
  • EP33
    真空系统控制 · 门阀联锁 · PVD 腔体抽气流程
    真空联锁门阀控制
  • EP34
    报警系统设计 · 防抖滤波 FB · 40路报警管理库
    报警分级防抖滤波FB
  • EP35
    PackML 17 状态详解 · FB_PackMLStateMachine 封装
    PackML 17状态OMAC标准
  • EP36
    PackML Stopping vs Aborting · 晶圆研磨设备实战
    Stopping流程Aborting流程
  • EP37
    TwinSAFE 入门 · SIL/PLe · FSoE 安全总线
    TwinSAFESIL/PLe
  • EP38
    数据持久化 · XML 配方 · 无停机换型
    PERSISTENT配方切换
  • EP39
    ADS 变量导出规范 · C# 内存对齐设计(课程三准备)
    Symbol导出内存对齐
  • EP40
    OPC UA Server 配置 · 订阅模型 · 安全模式
    TF6100OPC UA
  • EP41
    SECS/GEM 协议入门 · 国内 Fab MES 对接解读
    SECS/GEMHSMSMES对接
  • EP42
    综合实战:半导体设备控制系统架构总结
    架构总结GitHub源码
课程二 · COURSE 02
运动控制实战
¥699/ 永久有效¥1,199
  • 3章 · 42课时 · 约每课 20 分钟
  • PLCopen MC 全套 + OOP 轴控架构
  • 电子凸轮完整实现(五种插补)
  • PackML 17状态 + TwinSAFE + SECS/GEM
  • 完整 GitHub 源码 + 永久答疑群
📱 微信:Shang_0352(点击复制) 课程一+二套餐 ¥899
B站免费试看电子凸轮系列前两集 →
▶ 立即试看
购买前可免费索取课程大纲
WPF 工业上位机开发
以 C# + WPF + MVVM + Beckhoff ADS 为技术栈,以三槽液体混合 SCADA 项目为主线贯穿全程(与课程一 EP28 下位机联调)。国内目前没有同类中文课程,是尚工课程体系最具差异化竞争力的部分。前置:有 C# 基础更佳,但 EP01 从零开始,PLC 工程师亦可直接学习。
第 8 章C# 工控编程快速入门(面向 PLC 工程师)EP01–10 · 10课时
  • EP01
    从 ST 到 C#:两种语言对比学习(PLC 工程师专属视角)
    ST vs C#引用类型
  • EP02
    面向对象核心:类 · 接口 · 继承 · abstract
    class/interface继承
  • EP03
    集合与 LINQ · ObservableCollection · Lambda
    ObservableCollectionLINQ
  • EP04
    async/await 异步编程 · 避免 UI 线程死锁
    async/awaitUI线程死锁
  • EP05
    文件 I/O · CSV / JSON / XML 读写 · 配方文件
    JSON序列化配方文件
  • EP06
    定时器与线程 · DispatcherTimer vs System.Timer
    DispatcherTimer100ms刷新
  • EP07
    NuGet 生态 · TwinCAT.Ads · MahApps · LiveCharts2
    NuGetTwinCAT.AdsMahApps.Metro
  • EP08
    日志系统 NLog · 滚动日志 · 通信断线记录
    NLog滚动日志
  • EP09
    数据库基础 · SQLite + Dapper ORM · 历史数据表
    SQLiteDapper ORM
  • EP10
    单元测试 · xUnit · Moq Mock ADS 连接
    xUnitMoq Mock
第 9 章WPF 与 MVVM 架构EP11–24 · 14课时
  • EP11
    WPF 核心概念 · XAML · 渲染机制
    XAML渲染机制
  • EP12
    布局系统 · Grid · SCADA 主界面骨架设计
    Grid布局SCADA骨架
  • EP13
    数据绑定 · INotifyPropertyChanged · DataContext
    BindingINotifyPropertyChanged
  • EP14
    命令模式 RelayCommand · CanExecute 控制按钮
    ICommandRelayCommand
  • EP15
    MVVM 完整架构 · DI 依赖注入 · ViewModelLocator
    MVVM分层DI依赖注入
  • EP16
    MahApps.Metro 工业 UI · 深色主题 · 工业配色规范
    MahApps.Metro深色主题
  • EP17
    自定义控件 · LED 指示灯 · 阀门/泵图形控件
    UserControlLED控件阀门控件
  • EP18
    动画与状态机 · 报警闪烁 · Storyboard
    Storyboard报警动画
  • EP19
    实时波形图 LiveCharts2 · 滚动缓冲区 · 降采样优化
    LiveCharts2滚动缓冲区
  • EP20
    DataGrid 高级用法 · 虚拟化 · 条件格式(报警列表)
    DataGrid虚拟化
  • EP21
    对话框 · Snackbar 通知 · 参数确认弹窗
    DialogSnackbar
  • EP22
    多语言本地化 · ResourceDictionary · 运行时切换
    ResourceDictionary本地化
  • EP23
    响应式布局 · 适配工业触摸屏 · DPI 感知
    ViewBoxDPI感知
  • EP24
    WPF 性能优化 · Dispatcher 正确用法 · 内存泄漏诊断
    Dispatcher内存泄漏弱事件
第 10 章Beckhoff ADS 通信深度开发EP25–38 · 14课时
  • EP25
    ADS 协议深度解析 · AmsNetId · IndexGroup · TwinCAT.Ads NuGet
    AmsNetIdIndexGroup
  • EP26
    ADS 连接建立 · 本地 vs 远程 · ADS 路由配置
    AdsClient远程连接
  • EP27
    同步读写 ReadAny/WriteAny · IAdsSymbol · AdsException
    ReadAny/WriteAnyIAdsSymbol
  • EP28
    异步读写 async/await · 并发线程安全
    ReadAnyAsync线程安全
  • EP29
    结构体映射 · StructLayout Pack=1 · STRING 特殊处理
    StructLayout内存对齐 Pack=1
  • EP30
    Sum Command 批量读写 · 性能对比测试
    Sum Command批量读取
  • EP31
    ADS Notification 实时推送 · 变化触发 vs 采样周期
    AddDeviceNotification1ms高频
  • EP32
    心跳检测 + 指数退避自动重连(工程级完整实现)
    心跳检测指数退避重连状态机
  • EP33
    Symbol 管理器 · 动态变量访问 · 通用监控工具
    IAdsSymbolLoader动态符号
  • EP34
    ADS over TCP · 跨网段通信 · 防火墙端口 48898
    ADS over TCP端口48898
  • EP35
    OPC UA Client 开发 · Subscription + MonitoredItem
    OPC UA ClientSubscription
  • EP36
    通信框架封装 · ICommunicationService · 单元测试 Mock
    ICommunicationServiceMock测试
  • EP37
    性能测试:1000 变量高频读写 · Sum Command vs Notification
    性能基准测试内存优化
  • EP38
    工程案例:三槽 SCADA ADS 通信层完整源码讲解
    SCADA通信层源码讲解
第 11 章工业功能模块开发 · 三槽 SCADA 综合实战EP39–55 · 17课时
  • EP39
    报警管理系统 · AlarmModel · 声音报警 · SQLite 持久化
    AlarmModel报警DataGrid
  • EP40
    配方管理系统 · JSON 持久化 · ADS 批量写入
    配方ModelJSON持久化
  • EP41
    历史数据查询 · Excel 导出 EPPlus · PDF 报告 QuestPDF
    历史查询Excel导出PDF报告
  • EP42
    用户权限系统 · 角色模型 · MD5 登录 · 操作日志
    角色权限MD5登录
  • EP43
    工艺流程图 · Canvas 动态绘制 · 管道流向动画
    Canvas绘图管道动画
  • EP44
    仪表盘 Gauge · 状态总览 · 关键参数大字显示
    Gauge状态总览
  • EP45
    设置页面 · appsettings.json · 主题切换 · 首次引导
    appsettings.json主题切换
  • EP46
    应用打包部署 · Inno Setup · ClickOnce · 离线.NET
    self-containedInno Setup
  • EP47
    三槽 SCADA EP01:架构设计 · 项目结构 · GitHub 初始化
    SCADA架构项目结构
  • EP48
    三槽 SCADA EP02:ADS 通信层 · 心跳重连 · Notification
    IAdsServiceNotification订阅
  • EP49
    三槽 SCADA EP03:主界面 · 流程图 · 液位动态显示
    流程图液位动态
  • EP50
    三槽 SCADA EP04:配方页面 + 报警页面完整实现
    配方页面报警页面
  • EP51
    三槽 SCADA EP05:历史数据 · 趋势图 · 班产报表
    历史回放班产报表
  • EP52
    三槽 SCADA EP06:上下位机联调 · 全流程功能验证
    上下位联调稳定性测试
  • EP53
    三槽 SCADA EP07:代码 Review · GitHub Release 整理
    代码走查GitHub Release
  • EP54
    扩展专题:MQTT IoT 上报 · MQTTnet · 云端接入
    MQTTnetEMQX云端上报
  • EP55
    扩展专题:接单开发实战经验 · 报价 · 交付物 · 品牌运营
    接单报价交付物清单品牌运营
// 全系套餐 · 最佳选择
课程一 + 课程二 + 课程三 · 全部 139 课时
TwinCAT 3 工程实战 · 运动控制 · WPF 上位机全栈 · 赠 1v1 答疑 1次
全套价格 ≈ 一次设备调试咨询费 · 终身有效 · 包含所有源码更新
¥1,599
原价 ¥3,197
咨询套餐购买 →
所有课程均包含完整 GitHub 源码工程;购买前可免费索取任意课程完整大纲;企业团队定制培训另行报价,欢迎微信沟通。
// 学员评价
真实工程师的 反馈

之前 ADS 断线一直没处理好,重连逻辑自己写的比较糙。看了心跳那篇文章,指数退避那块确实没想到,照着思路改了一版,稳多了。内容比较实在,不是那种讲概念的文章。

李工
自动化工程师 · 锂电设备 · 3年TC3经验

电子凸轮课程讲得比较细,五种插补的区别之前只知道个大概,这里对比下来清楚多了。PVD 案例跟我的场景不完全一样,但思路是通的,自己改了改能用。课时有点多,如果能有个精简版就好了。

张工
PLC 工程师 · 光伏设备 · 西门子转Beckhoff

我是 PLC 背景,C# 基础很差。课程三从头开始讲还好,MVVM 那块绕了几遍才搞懂,不过 SCADA 项目跑起来的时候还是挺有成就感的。跟尚工私信问过几个问题,回复比较及时。

王工
设备工程师 · 半导体行业 · 无WPF基础入门
// 接单合作
工程定制开发 & 技术咨询
01
TwinCAT 3 工程开发
基于 Beckhoff 硬件的完整 PLC 工程定制,涵盖运动控制、EtherCAT 总线调试、OOP 模块封装、PackML 状态机、传感器融合与安全联锁设计。
交付物
完整 TC3 工程源码 · 变量表 · 调试报告
参考报价:按功能模块协商,日费制或里程碑制
运动控制EtherCATPackMLOOP 架构电子凸轮
02
WPF 工业上位机开发
WPF + MVVM + Beckhoff ADS 工业上位机软件定制,含实时数据可视化(LiveCharts2)、报警管理、配方管理、历史数据追溯、用户权限系统。
交付物
WPF 可执行程序 · 完整 C# 源码 · 部署说明
参考报价:SCADA 类项目通常 2–6 周,按页面模块报价
WPF / C#ADS 通信MVVMSCADASQLite
03
技术咨询 & 代码审查
TwinCAT 3 / WPF 项目的技术方案评审、Bug 精准排查、代码重构建议。按小时计费,适合遇到技术卡点需要专家介入的工程团队。
适合场景
EtherCAT 调试卡点 · ADS 通信异常 · 架构评审
参考报价:按小时或次计费,初次沟通免费
方案设计Bug 排查代码重构1对1

联系尚工

有课程咨询、项目开发需求,或只是想聊聊 TwinCAT 3 技术,都欢迎联系。通常 24 小时内回复,工作日内 2 小时内回复微信。

微信加好友
说明需求
免费初步
技术沟通
确认范围
报价交付
微信 · WeChat
Shang_0352
点击复制微信号
手机 · Phone
178-1679-6750
通常 24 小时内回复
// 关于我
尚工 · Shanger
SENIOR PLC ENGINEER
尚工
Shanger · AllTwinCAT3
6+
年一线经验
139
课时体系
3
条产线主导
全源码
GitHub 开放
课程讲授 工程外包 企业培训 技术咨询
SENIOR PLC ENGINEER · TWINCAT 3 SPECIALIST · EDUCATOR · CONTRACTOR

六年深耕 Beckhoff TwinCAT 3 工业自动化,专注于半导体设备控制系统的工程实践与技术教育。所有课程内容均提炼自真实产线项目经验,不讲纸面理论。

工程背景:主导多条 PVD/CVD 薄膜沉积产线晶圆减薄研磨系统的控制系统从零到量产交付,覆盖 EtherCAT 总线调试、多轴同步运动控制、传感器闭环、PackML 工艺状态机、WPF 工业上位机以及 SECS/GEM 对 Fab MES 的完整对接链路。独立负责选型、软硬件集成、调试到量产交付全流程。

课程教学:创立 AllTwinCAT3 · 尚工 技术品牌,在 Bilibili 系统化输出工程实战课程,全源码开源。三门课体系(TwinCAT 3 工程实战 · 运动控制实战 · WPF 工业上位机)是目前国内覆盖度最高的 Beckhoff 全栈中文课程,适合 PLC 工程师系统提升或跨平台转型。亦接受企业定制内训,可驻场或远程授课。

工程外包:接受 TwinCAT 3 控制系统定制开发、WPF 工业上位机软件开发及技术咨询。有完整工程交付物清单与开发规范,可签合同、开发票、里程碑付款,需求明确即可快速启动。微信 Shang_0352 直接沟通,24 小时内响应。

核心技术栈
TwinCAT 3 XAE/XAREtherCAT · PDOPLCopen MotionIEC 61131-3 STBeckhoff ADSWPF · MVVMC# · .NETPackML 状态机电子凸轮OOP 设计TwinSAFESECS/GEM
项目经历
  • 2020–至今
    高级 PLC 工程师 · 半导体设备控制系统
    无锡 · PVD/CVD 薄膜沉积 / 晶圆减薄研磨 / 多轴同步运动控制 · 独立负责选型到量产交付全流程
  • 持续
    技术教育者 · 外包工程师 · AllTwinCAT3 品牌创始人
    课程讲授 / 工程外包 / 企业培训 · Bilibili · github.com/tc3-engineer · alltwincat3.com
AllTwinCAT3 · 技术文章
MOTION CONTROL

TwinCAT 3 电子凸轮完全指南:凸轮表设计 · 五种插补方式 · MC_CamIn 工程实战

MC_CamIn电子凸轮五种插补运动控制 2026-01-18 · 尚工

一、什么是电子凸轮

机械凸轮通过固定的物理形状将主轴旋转转换为从轴位移,一旦加工成型就无法更改。电子凸轮(Electronic Cam)则将这种映射关系存入凸轮表(Cam Table),在 TwinCAT 3 的 NC 系统中由软件实时计算从轴位置,可随时在线修改,无需停机换型。

核心公式很简单:SlavePosition = f(MasterPosition),凸轮表就是这个函数 f 的离散采样点集合。

应用场景:印刷套准、横封切断、PVD 设备基板往复运动、卷绕张力控制、包装机出料同步。

二、凸轮表数据结构

TwinCAT 3 的凸轮表由一系列 (主轴位置, 从轴位置, 插补类型) 三元组构成:

// 凸轮表条目结构(简化)
TYPE ST_CamPoint :
STRUCT
    fMasterPos  : LREAL;   // 主轴位置(单位:mm 或 deg)
    fSlavePos   : LREAL;   // 对应从轴位置
    nInterpType : INT;     // 插补类型 0-4
END_STRUCT
END_TYPE

三、五种插补方式深度对比

1. Linear(线性,类型 0)

相邻两点之间直线连接。速度曲线为阶跃,加速度在节点处不连续,会产生冲击。适用于:对平滑性要求不高的慢速场合。

2. Cubic(三次多项式,类型 1)

每段用三次多项式拟合,保证速度连续但加速度在节点处可能不连续。适用于:中速场合,比线性平滑但计算量小。

3. BSpline(B 样条,类型 2)

全局平滑,位移/速度/加速度均连续,是多数工业场合的首选。不经过控制点(逼近而非插值),对抗扰动能力强。PVD 往复运动推荐使用此方式。

4. Akima(Akima 样条,类型 3)

局部插值方法,经过所有控制点且对个别异常点不敏感。适用于凸轮表由实测数据(传感器采样)生成的场合。

5. Hermite(Hermite 样条,类型 4)

需要同时指定每点的导数值(斜率),控制自由度最高,可精确控制每点处的速度。适用于需要严格匹配端点速度的场合(如与其他轴的速度对接)。

选型建议:默认选 BSpline(类型2);若凸轮表来自实测数据选 Akima(类型3);需要控制端点速度选 Hermite(类型4)。

四、MC_CamIn 完整实现

// 完整凸轮控制状态机
VAR
    fbCamTableSel : MC_CamTableSelect;
    fbCamIn       : MC_CamIn;
    fbCamOut      : MC_CamOut;
    eMasterAxis   : AXIS_REF;
    eSlaveAxis    : AXIS_REF;
    nState        : INT := 0;
    bStartCam     : BOOL;
    bStopCam      : BOOL;
END_VAR

CASE nState OF
0: // Idle - 等待启动命令
    IF bStartCam THEN
        bStartCam := FALSE;
        nState := 10;
    END_IF

10: // 加载凸轮表
    fbCamTableSel(
        Master    := eMasterAxis,
        Slave     := eSlaveAxis,
        CamTable  := CamTable_PVD,  // 预定义凸轮表
        Periodic  := TRUE,
        Execute   := TRUE
    );
    IF fbCamTableSel.Done     THEN nState := 20; END_IF
    IF fbCamTableSel.Error    THEN nState := 99; END_IF

20: // 激活凸轮跟随
    fbCamTableSel.Execute := FALSE;
    fbCamIn(
        Master        := eMasterAxis,
        Slave         := eSlaveAxis,
        MasterOffset  := 0,
        SlaveOffset   := 0,
        StartMode     := AXIS_START_MODE.ABSOLUTE,
        Execute       := TRUE
    );
    IF fbCamIn.InSync THEN nState := 30; END_IF
    IF fbCamIn.Error  THEN nState := 99; END_IF

30: // 凸轮运行中 - 等待停止命令
    fbCamIn.Execute := FALSE;
    IF bStopCam THEN
        bStopCam := FALSE;
        nState := 40;
    END_IF

40: // 脱离凸轮
    fbCamOut(Slave := eSlaveAxis, Execute := TRUE);
    IF fbCamOut.Done  THEN nState := 0;  END_IF
    IF fbCamOut.Error THEN nState := 99; END_IF

99: // Error Stop
    fbCamTableSel.Execute := FALSE;
    fbCamIn.Execute       := FALSE;
END_CASE

五、CSV 凸轮表生成工具

TwinCAT 3 支持从 CSV 文件动态加载凸轮表,格式为 主轴位置,从轴位置,插补类型。可用 Python 或 Excel 自动生成,尤其适合将机械设计数据直接转换为控制参数:

# Python 生成正弦凸轮表示例
import numpy as np
master = np.linspace(0, 360, 180)
slave  = 50 * np.sin(np.radians(master))
with open('cam_pvd.csv', 'w') as f:
    for m, s in zip(master, slave):
        f.write(f"{m:.3f},{s:.3f},2
")  # 类型2=BSpline

完整源码已上传至 github.com/tc3-engineer,含 TwinCAT 3 工程 + CSV 生成脚本 + PVD 设备案例。

AllTwinCAT3 · 技术文章
ADS · WPF

WPF + ADS 通信:心跳检测与指数退避自动重连工程实现

ADS心跳重连WPFMVVM 2025-12-30 · 尚工

一、问题背景

工业现场网络并不稳定,网线松动、网络切换、PLC 重启都会导致 ADS 连接断开。如果上位机没有自动重连机制,工程师必须手动重启软件,这在无人值守的产线上是不可接受的。

本文介绍一套经过半导体设备现场验证的心跳检测 + 指数退避自动重连方案,完整 C# MVVM 实现。

二、整体架构

连接状态机包含三个状态:

  • Connected:ADS 正常,心跳每 1s 检测一次
  • Disconnected:心跳失败超过阈值,触发重连流程
  • Reconnecting:指数退避等待后尝试重连,成功回到 Connected

三、核心代码实现

// IAdsService.cs
public interface IAdsService
{
    bool IsConnected { get; }
    event Action<bool> ConnectionChanged;
    Task<T> ReadAsync<T>(string symbolName);
    Task WriteAsync<T>(string symbolName, T value);
}
// AdsService.cs - 心跳检测 + 指数退避重连
private int[] _backoffSeconds = { 1, 2, 4, 8, 15, 30 };
private int  _retryIndex = 0;

private async Task HeartbeatLoopAsync(CancellationToken ct)
{
    while (!ct.IsCancellationRequested)
    {
        await Task.Delay(1000, ct);
        try
        {
            var state = await _client.ReadStateAsync();
            if (state.AdsState != AdsState.Run)
                throw new AdsException("PLC not in Run state");
            _retryIndex = 0;          // 重置退避计数
            SetConnected(true);
        }
        catch
        {
            SetConnected(false);
            await ReconnectWithBackoffAsync(ct);
        }
    }
}

private async Task ReconnectWithBackoffAsync(CancellationToken ct)
{
    var wait = _backoffSeconds[
        Math.Min(_retryIndex, _backoffSeconds.Length - 1)];
    _retryIndex++;
    await Task.Delay(wait * 1000, ct);
    try
    {
        _client.Disconnect();
        _client.Connect(_amsNetId, _port);
        SetConnected(true);
        _retryIndex = 0;
    }
    catch { /* 继续下一轮 */ }
}

四、ViewModel 绑定连接状态

// MainViewModel.cs
public string ConnectionStatus =>
    _adsService.IsConnected ? "● 在线" : "○ 离线";

public string StatusColor =>
    _adsService.IsConnected ? "#2e9e5b" : "#cc3333";

// 在构造函数中订阅事件
_adsService.ConnectionChanged += isConnected =>
    Application.Current.Dispatcher.Invoke(() =>
    {
        OnPropertyChanged(nameof(ConnectionStatus));
        OnPropertyChanged(nameof(StatusColor));
    });

💡 重连成功后需要重新订阅所有 ADS Notification,否则实时数据推送会静默失效——这是最常被遗漏的一步。

完整工程源码含 IAdsService 接口、AdsService 实现、Mock 测试类,已上传至 github.com/tc3-engineer

AllTwinCAT3 · 技术文章
EtherCAT

EtherCAT PDO 映射深度解析:DC 同步 · WcState 监控 · 故障排查

EtherCATPDO 映射DC SyncWcState 2025-11-08 · 尚工

一、PDO vs SDO——搞清楚再配置

PDO(Process Data Object)是 EtherCAT 周期性实时数据通道,每个控制周期自动传输,延迟可低至 100μs 级别。SDO(Service Data Object)是非周期配置通道,用于读写设备参数(如驱动器额定电流),不适合实时控制。

  • 运动控制位置/速度/状态字 → 必须用 PDO
  • 驱动器参数配置(Kp/Ki/额定电流)→ 用 SDO(启动时配置一次)

二、PDO 映射配置完整流程

  1. 在 TwinCAT XAE 中扫描设备,导入 ESI 文件
  2. 进入设备的 Process Data 标签页
  3. 确认默认 PDO 映射是否满足需求(多数情况够用)
  4. 若需自定义:在 Sync Manager 中调整 PDO 条目
  5. 将 PDO 变量拖拽链接到 PLC 变量(或使用 AT 语法直接映射)
// AT 语法直接映射 PDO 到 PLC 变量
VAR
    nActPos  AT %I* : DINT;  // 输入:驱动器实际位置
    nCtrlWd  AT %Q* : WORD;  // 输出:控制字
    nStsWd   AT %I* : WORD;  // 输入:状态字
END_VAR

三、DC 同步(Distributed Clocks)配置

DC 同步让所有 EtherCAT 从站在同一时刻更新 PDO 数据,消除各从站之间的时间偏差。对于多轴同步控制(如电子凸轮),DC 同步是必须配置的。

在设备的 DC 标签中选择 DC-Synchron 模式,Sync0 周期应与 NC Task 周期一致(通常 1ms 或 2ms)。

注意:如果多个驱动器的 Sync0 周期不一致,会导致轴间同步抖动,电子凸轮跟随误差增大。统一设置为相同周期。

四、WcState 监控与报警 FB

WcState(Working Counter State)反映 EtherCAT 帧的完整性。值为 0 表示正常;非 0 表示有从站丢失或通信错误。

// WcState 监控 FB(带防抖)
FUNCTION_BLOCK FB_WcStateMonitor
VAR_INPUT
    nWcState    : UINT;
    tDebounce   : TIME := T#500MS;
END_VAR
VAR_OUTPUT
    bEcatFault  : BOOL;
END_VAR
VAR
    tonDebounce : TON;
END_VAR

tonDebounce(IN := nWcState <> 0, PT := tDebounce);
bEcatFault := tonDebounce.Q;

五、常见故障排查速查表

  • Init Error / Link Loss:检查网线和接头;确认从站上电顺序正确
  • WcState 频繁跳变:网线品质问题或拓扑中存在环路;检查所有设备接地
  • DC 同步失败:主时钟(First DC Device)配置错误;检查从站固件版本是否支持 DC
  • PDO 数据全为 0:变量链接未正确建立;重新激活配置(Ctrl+Shift+F4)
AllTwinCAT3 · 技术文章
OOP · 架构设计

TwinCAT 3 OOP 轴控:INTERFACE · 继承 · 工厂模式分层架构工程实践

OOPINTERFACEFB_AxisBase工厂模式 2025-10-22 · 尚工

一、为什么要用 OOP 封装轴控

传统做法:每个轴复制一套 MC_MoveAbsolute / MC_Home 代码,修改一处需改多处,新增轴型(步进/伺服)需大改逻辑。OOP 封装后:新增轴只需继承基类、重写差异部分,主程序调用统一接口,完全解耦。

二、I_Axis 通用接口定义

INTERFACE I_Axis
    // 使能/复位
    METHOD Enable  : BOOL
    METHOD Reset   : BOOL
    // 回零
    METHOD Home    : BOOL
    // 运动
    METHOD MoveAbs : BOOL
        VAR_INPUT fPos : LREAL; fVel : LREAL; END_VAR
    METHOD MoveRel : BOOL
        VAR_INPUT fDist : LREAL; fVel : LREAL; END_VAR
    METHOD Jog     : BOOL
        VAR_INPUT bFwd : BOOL; bBwd : BOOL; END_VAR
    METHOD Stop    : BOOL
    // 状态属性
    PROPERTY IsReady   : BOOL GET
    PROPERTY IsMoving  : BOOL GET
    PROPERTY ActPos    : LREAL GET
    PROPERTY HasError  : BOOL GET
    PROPERTY ErrorID   : UDINT GET

三、FB_AxisBase 基类实现(核心)

FUNCTION_BLOCK FB_AxisBase IMPLEMENTS I_Axis
VAR
    _axis      : AXIS_REF;
    _fbPower   : MC_Power;
    _fbHome    : MC_Home;
    _fbMoveAbs : MC_MoveAbsolute;
    _fbMoveRel : MC_MoveRelative;
    _fbJog     : MC_Jog;
    _fbStop    : MC_Stop;
    _fbReset   : MC_Reset;
    _eState    : E_AxisState;
END_VAR

METHOD MoveAbs : BOOL
VAR_INPUT fPos : LREAL; fVel : LREAL; END_VAR
    _fbMoveAbs(
        Axis     := _axis,
        Position := fPos,
        Velocity := fVel,
        Execute  := TRUE
    );
    MoveAbs := _fbMoveAbs.Done;

四、子类扩展——以 FB_GrindingAxis 为例

// 晶圆研磨下压轴:继承基类,扩展压力闭环切换
FUNCTION_BLOCK FB_GrindingAxis EXTENDS FB_AxisBase
VAR
    _fbPressureCtrl : FB_PressureLoop;
    _bPressureMode  : BOOL;
END_VAR

// 重写 Stop —— 增加压力控制器关闭逻辑
METHOD Stop : BOOL
    _fbPressureCtrl.Enable := FALSE;  // 先关压力控制
    SUPER^.Stop();                     // 再调用基类停止
    Stop := TRUE;

五、主程序统一调用

// 工厂模式:用接口数组管理所有轴
VAR
    fbLinearAxis   : FB_LinearAxis;
    fbGrindAxis    : FB_GrindingAxis;
    arrAxes        : ARRAY[0..1] OF I_Axis;
END_VAR

arrAxes[0] := fbLinearAxis;
arrAxes[1] := fbGrindAxis;

// 统一回零:无需关心具体轴型
FOR i := 0 TO 1 DO
    arrAxes[i].Home();
END_FOR

完整 OOP 轴控套件(含 I_Axis / FB_AxisBase / FB_LinearAxis / FB_RotaryAxis)已开源,见 github.com/tc3-engineer

AllTwinCAT3 · 技术文章
PackML · 半导体设备

PackML 状态机工程实现:17个状态 · Stopping vs Aborting · TwinCAT 3 完整 FB

PackML状态机ISA-88半导体设备 2025-09-15 · 尚工

一、为什么半导体设备要用 PackML

半导体设备控制逻辑复杂,状态繁多,如果用自定义状态机,不同工程师写出来的结构各不相同,维护和交接成本极高。ISA-88 PackML 标准定义了一套通用的 17 状态机,已被 OMAC 组织采纳,成为工业设备控制的事实标准。

二、17 个状态总览

  • Stopped:已停止,等待 Start 命令
  • Starting:启动中(预热、检查)→ 自动进入 Execute
  • Execute:正常运行
  • Completing:当前批次完成 → 进入 Complete
  • Complete:批次完成,等待 Reset
  • Suspending:暂停中(原材料不足等外部原因)
  • Suspended:已暂停
  • Unsuspending:恢复中
  • Holding:保持中(内部原因,如参数调整)
  • Held:已保持
  • Unholding:解保持中
  • Stopping:受控停止(安全抬刀→关气→回零)
  • Aborting:紧急中止(立即停所有运动)
  • Aborted:已中止,等待 Clear
  • Clearing:清除错误,回到 Stopped
  • Resetting:复位,回到 Stopped
  • Idle:空闲(部分实现中使用)

三、Stopping vs Aborting 的核心区别

这是最常被混淆的两个状态,搞错了会导致设备损坏或安全事故。

  • Stopping(受控停止):有时间完成安全动作序列。晶圆研磨:① 减小下压力 → ② 抬起研磨头 → ③ 关闭研磨液 → ④ 轴回零 → 进入 Stopped
  • Aborting(紧急中止):立即停止所有运动,不等待安全序列。触发条件:急停按钮、安全门打开、设备故障。进入 Aborted 后必须 Clear 才能重新启动。

四、TwinCAT 3 FB 实现

FUNCTION_BLOCK FB_PackMLStateMachine
VAR_INPUT
    cmdStart     : BOOL;
    cmdStop      : BOOL;
    cmdAbort     : BOOL;
    cmdReset     : BOOL;
    cmdClear     : BOOL;
    bStopDone    : BOOL;  // 外部:安全停止序列完成
    bStartDone   : BOOL;  // 外部:启动检查完成
END_VAR
VAR_OUTPUT
    eState       : E_PackMLState;
    bDoExecute   : BOOL;  // 输出:允许执行工艺
    bDoStop      : BOOL;  // 输出:执行安全停止序列
    bDoAbort     : BOOL;  // 输出:立即停止所有运动
END_VAR

CASE eState OF
E_PackMLState.Stopped:
    IF cmdStart  THEN eState := E_PackMLState.Starting; END_IF
    IF cmdAbort  THEN eState := E_PackMLState.Aborting; END_IF

E_PackMLState.Starting:
    IF bStartDone THEN eState := E_PackMLState.Execute; END_IF
    IF cmdAbort   THEN eState := E_PackMLState.Aborting; END_IF

E_PackMLState.Execute:
    bDoExecute := TRUE;
    IF cmdStop  THEN eState := E_PackMLState.Stopping; END_IF
    IF cmdAbort THEN eState := E_PackMLState.Aborting; END_IF

E_PackMLState.Stopping:
    bDoExecute := FALSE;
    bDoStop    := TRUE;  // 触发安全停止序列
    IF bStopDone THEN
        bDoStop := FALSE;
        eState  := E_PackMLState.Stopped;
    END_IF
    IF cmdAbort  THEN eState := E_PackMLState.Aborting; END_IF

E_PackMLState.Aborting:
    bDoExecute := FALSE;
    bDoStop    := FALSE;
    bDoAbort   := TRUE;  // 立即停所有轴
    eState     := E_PackMLState.Aborted;

E_PackMLState.Aborted:
    bDoAbort := FALSE;
    IF cmdClear THEN eState := E_PackMLState.Clearing; END_IF

E_PackMLState.Clearing:
    eState := E_PackMLState.Stopped;
END_CASE

完整 PackML FB 源码(含所有 17 状态 + 模式切换 + 报警集成)已上传至 github.com/tc3-engineer

AllTwinCAT3 · 课程目录
COURSE CATALOG

三门课程完整目录

139 课时3 门课程11 个章节含完整源码
课程一 · TwinCAT 3 工程实战 · 36课时 · ¥399
第1章TwinCAT 3 生态与开发环境EP01–08 · 8课时
  • EP01TwinCAT 3 架构:XAE/XAR/Runtime · 与西门子/三菱对比 · PC-based 原理
  • EP02安装开发环境 · License 授权 · Windows 11 兼容性 · ADS 4132 报错修复
  • EP03创建第一个项目 · Activate Configuration · Watch 窗口在线观察
  • EP04Task 配置与实时性原理 · CPU Core 绑定 · Jitter 分析
  • EP05版本控制 Git · .gitignore 配置 · 分支策略建议
  • EP06项目工程结构设计规范 · Library Project 规划
  • EP07虚拟机开发环境搭建 · ADS 路由配置(无硬件学习)
  • EP08管理多个 TwinCAT 版本 · 多版本并存 · 部署最佳实践
第2章IEC 61131-3 ST 语言精讲EP09–20 · 12课时
  • EP09数据类型全覆盖 · LREAL 精度陷阱 · TYPE 自定义类型
  • EP10数组与指针 · 数组越界防护(真实案例)· REFERENCE TO
  • EP11结构体 STRUCT · 联合体 UNION · 轴参数打包设计
  • EP12FUNCTION 设计 · 中位值/均值滤波实现(半导体测厚案例)
  • EP13FUNCTION_BLOCK 基础 · VAR 类型全解析 · 气缸控制 FB
  • EP14INTERFACE 接口与多态 · 通用轴接口设计 · EXTENDS 继承
  • EP15CASE 状态机 · 循环控制 · CSV 事件记录器实战
  • EP16Tc2_Standard 标准库 · TON/TOF/TP · R_TRIG 最佳实践
  • EP17Tc2_Utilities · FIFO 缓冲区 · 执行时间测量
  • EP18I/O 配置 · EL 系列模块 · PDO 变量链接 · AT 语法映射
  • EP19Library 库工程创建 · 参数列表 · 版本管理
  • EP20TwinCAT Functions · TF6310 TCP/IP · OPC UA · MQTT IoT
第3章调试技术 · 代码规范 · 工程实践EP21–28 · 8课时
  • EP21在线调试 · Watch/Force/Online Change · 断点调试
  • EP22TwinCAT Scope 波形采集 · Trigger 触发 · 运动波形分析
  • EP23经典报错速查:C0555 / ADS 4132 / WcState / Hyper-V 冲突
  • EP24命名规范:Beckhoff 规范 vs PLCopen 规范对比 · 个人规范手册
  • EP25ADS 通信原理 · AmsNetId · 路由配置(课程三基础)
  • EP26TwinCAT Automation Interface · GitHub Actions CI/CD 自动部署
  • EP27TcUnit 单元测试 · TDD 工控实践 · 滤波函数测试案例
  • EP28综合实战:三槽液体混合下位机(课程三联调基础工程)
第4章EtherCAT 总线深度实践EP29–36 · 8课时
  • EP29EtherCAT 原理 · E-Frame 帧结构 · DC 同步机制 · 拓扑类型
  • EP30ESI 文件导入 · 设备配置 · OnlineDevice 在线诊断
  • EP31PDO 映射完整流程 · TxPDO/RxPDO · 自定义 PDO 配置实操
  • EP32DC Synchron 配置 · WcState 报警 FB 设计(含防抖)
  • EP33EtherCAT 状态机 · Init/Pre-Op/Safe-Op/Op · 故障排查流程
  • EP34EL 模块族深解:EL1008/EL2008/EL3068/EL5101/EL3314
  • EP35TF6340 串口通信 · Modbus TCP TF6250 · 第三方仪表接入
  • EP36工程案例:PVD 设备 EtherCAT 多轴总线调试实录
课程二 · 运动控制实战 · 42课时 · ¥699
第5章NC 轴基础与 PLCopen 单轴控制EP01–14 · 14课时
  • EP01NC 系统架构 · PTP/NCI/FIFO Channel · 轴类型全解
  • EP02轴配置 · EtherCAT Axis Link · CoE 参数 · AX5000/AX8000
  • EP03轴动力学参数 · Kv 增益 · 跟随误差 · Jerk 平滑运动
  • EP04MC_Power · MC_Reset · 轴状态机 · ErrorID 速查表
  • EP05MC_Home 8种回零策略 · 原点开关 · 绝对值编码器 SetPosition
  • EP06MC_MoveAbsolute/Relative · BufferMode · Override · 时序分析
  • EP07MC_MoveVelocity · MC_Jog · MC_Stop vs MC_Halt 差异
  • EP08位置捕获 MC_TouchProbe · MC_DigitalCamSwitch 凸轮开关
  • EP09轴诊断 · Scope 采集轴波形 · Bode 图频响分析 · Autotuning
  • EP10OOP 轴控架构(一)· I_Axis 接口 · FB_AxisBase 基类实现
  • EP11OOP 轴控架构(二)· 子类扩展 · 工厂模式 · 轴对象数组
  • EP12软限位 · 硬限位 · 超程保护与恢复流程设计
  • EP13飞剪与追剪 · MC_GearIn 速度同步 · 锂电/光伏切割应用
  • EP14工程案例:晶圆减薄设备轴控系统完整回顾 · 源码讲解
第6章多轴同步与电子凸轮EP15–28 · 14课时
  • EP15主从耦合原理 · MC_GearIn · 齿轮比 · 虚轴应用
  • EP16MC_Phasing 相位调整 · 印刷套准 · 卷绕张力补偿
  • EP17电子凸轮原理 · Cam Table 数据结构 · 运动学分析
  • EP18五种插补方式深度对比 · 加速度连续性 · 选型建议
  • EP19CSV 凸轮表生成工具 · Python 脚本 · Cam Design Editor
  • EP20MC_CamTableSelect · 在线修改 · 无停机换型
  • EP21MC_CamIn · StartMode 三种方式 · Periodic 周期模式
  • EP22MC_CamOut · 脱离时机选择 · 凸轮完整状态机设计
  • EP23电子凸轮调试 · Scope 同步波形 · 机械振动诊断
  • EP24包装机应用 · MC_GearInPos 爬坡同步 · 横封机切断
  • EP25工程案例:PVD 多轴协调 · 传送+旋转+往复轴同步
  • EP26压力/力闭环控制 · PID 整定 · 位置↔压力无冲击切换
  • EP27NC 插补 NCI · G 代码基础 · TF5200 CNC 功能简介
  • EP28综合实战:SCADA 运动控制模块 + ADS 变量导出配置
第7章传感器融合 · 安全控制 · PackMLEP29–42 · 14课时
  • EP29模拟量标定 · 滤波算法库:移动均值/一阶低通/中位值
  • EP30CG 测厚传感器集成 · 中位值滤波 · 数组边界防护
  • EP31温度控制 · FB_CTRL_PID 整定 · PVD 腔体温度案例
  • EP32气体流量控制 MFC · CVD 工艺气体配方管理 FB
  • EP33真空系统控制 · 门阀联锁 · PVD 腔体抽气流程状态机
  • EP34报警系统设计 · 防抖滤波 FB · 40路报警管理库(半导体设备)
  • EP35PackML 17 状态完整实现 · FB_PackMLStateMachine 封装
  • EP36Stopping vs Aborting 深度对比 · 晶圆研磨设备实战流程
  • EP37TwinSAFE 入门 · SIL/PLe 等级 · FSoE 安全总线
  • EP38数据持久化 · PERSISTENT 变量 · XML 配方 · 无停机换型
  • EP39ADS 变量导出规范 · C# 内存对齐设计(课程三前置)
  • EP40OPC UA Server 配置 · 节点管理 · 订阅 · 安全认证
  • EP41SECS/GEM 协议入门 · HSMS · 国内 Fab MES 对接要求
  • EP42综合实战:半导体设备控制系统架构总结 · GitHub 源码
课程三 · WPF 工业上位机开发 · 55课时 · ¥799
第8章C# 工控编程快速入门EP01–10 · 10课时
  • EP01从 ST 到 C#:两种语言对比(面向 PLC 工程师专属视角)
  • EP02面向对象:class / interface / 继承 / abstract / override
  • EP03集合与 LINQ · ObservableCollection · Lambda 表达式
  • EP04async/await 异步编程 · CancellationToken · 避免 UI 死锁
  • EP05文件 I/O · CSV/JSON/XML 读写 · 配方文件持久化
  • EP06定时器与线程 · DispatcherTimer vs System.Timers.Timer
  • EP07NuGet 生态 · TwinCAT.Ads · MahApps.Metro · LiveCharts2
  • EP08日志系统 NLog · 滚动日志文件 · 通信断线记录
  • EP09数据库基础 · SQLite + Dapper ORM · 历史数据表设计
  • EP10单元测试 xUnit · Moq Mock ADS 连接 · 内存泄漏检测
第9章WPF 与 MVVM 架构EP11–24 · 14课时
  • EP11WPF 核心概念 · XAML 语法 · 渲染机制 · vs WinForms
  • EP12布局系统 Grid/StackPanel/Canvas · SCADA 主界面骨架设计
  • EP13数据绑定 Binding · INotifyPropertyChanged · DataContext
  • EP14命令模式 RelayCommand · ICommand · CanExecute 控制按钮
  • EP15MVVM 完整架构 · 依赖注入 DI · ViewModelLocator
  • EP16MahApps.Metro 工业 UI · 深色主题 · 工业配色规范
  • EP17自定义控件 · LED 指示灯 · 阀门/泵图形控件
  • EP18动画与状态机 · Storyboard · 报警闪烁 · VisualStateManager
  • EP19实时波形图 LiveCharts2 · 滚动缓冲区 · 降采样优化
  • EP20DataGrid 高级用法 · 虚拟化 · 条件格式 · 报警历史列表
  • EP21对话框 · Snackbar 通知 · 参数确认弹窗设计
  • EP22多语言本地化 · ResourceDictionary · 运行时语言切换
  • EP23响应式布局 · 适配工业触摸屏 · DPI 感知配置
  • EP24WPF 性能优化 · Dispatcher 正确用法 · 内存泄漏诊断
第10章Beckhoff ADS 通信深度开发EP25–38 · 14课时
  • EP25ADS 协议深度解析 · AmsNetId · IndexGroup · TwinCAT.Ads NuGet
  • EP26ADS 连接建立 · 本地 vs 远程 · ADS 路由配置
  • EP27同步读写 ReadAny/WriteAny · IAdsSymbol · AdsException 处理
  • EP28异步读写 async/await · 并发线程安全设计
  • EP29结构体映射 · StructLayout Pack=1 · STRING 特殊处理
  • EP30Sum Command 批量读写 · 1000变量性能对比测试
  • EP31ADS Notification 实时推送 · 变化触发 · 1ms 高频接收
  • EP32心跳检测 + 指数退避自动重连(工程级完整实现)
  • EP33Symbol 管理器 · 动态变量访问 · 通用监控工具开发
  • EP34ADS over TCP · 跨网段通信 · 防火墙端口 48898
  • EP35OPC UA Client · Subscription + MonitoredItem · vs ADS 选型
  • EP36通信框架封装 · ICommunicationService · Mock 单元测试
  • EP37性能测试 · Sum Command vs Notification · 内存优化
  • EP38工程案例:三槽 SCADA ADS 通信层完整源码讲解
第11章工业功能模块 · 三槽 SCADA 综合实战EP39–55 · 17课时
  • EP39报警管理系统 · AlarmModel · DataGrid 条件格式 · 声音报警
  • EP40配方管理系统 · JSON 持久化 · ADS 批量写入 · 差异对比
  • EP41历史数据查询 · Excel 导出 EPPlus · PDF 报告 QuestPDF
  • EP42用户权限系统 · 角色模型 · MD5 登录 · 操作日志
  • EP43工艺流程图 · Canvas 绘制 · 管道流向动画 · 设备状态控件
  • EP44仪表盘 Gauge · 状态总览 · 关键参数大字显示
  • EP45设置页面 · appsettings.json · 主题切换 · 首次启动引导
  • EP46打包部署 · self-contained 发布 · Inno Setup · ClickOnce
  • EP47三槽 SCADA EP01:架构设计 · 项目结构 · DI 注册
  • EP48三槽 SCADA EP02:ADS 通信层 · 心跳重连 · Notification
  • EP49三槽 SCADA EP03:主界面 · Canvas 流程图 · 液位动态显示
  • EP50三槽 SCADA EP04:配方页面 + 报警页面完整实现
  • EP51三槽 SCADA EP05:历史趋势图 · 历史回放 · 班产报表
  • EP52三槽 SCADA EP06:上下位机联调 · 全流程功能验证
  • EP53三槽 SCADA EP07:代码 Review · GitHub Release 整理
  • EP54扩展专题:MQTTnet · EMQX · 设备数据云端上报
  • EP55扩展专题:接单开发实战经验 · 报价策略 · 品牌运营
📚 查看课程详情与购买 →