2. TwinCAT工程搭建
在 TwinCAT 3 中,一个可维护、可扩展的复杂产线顺控工程,其质量往往在“工程搭建”阶段就已经决定了大半。很多后期难以排查的故障——例如任务抖动导致联锁响应延迟、库版本不一致导致编译通过但运行异常、变量命名混乱导致跨工位引用出错——根源都在项目创建与配置阶段。本节围绕新建 PLC 项目、任务与周期配置、库引用、变量命名规范与版本管理五个关键环节展开,目标是搭建一个结构清晰、周期合理、依赖可控、命名统一、可追溯的工程骨架。
一、新建 PLC 项目与解决方案结构
在 TwinCAT XAE 中,工程以 Solution(解决方案)为顶层容器,一个 Solution 下可包含多个 TwinCAT Project。对于复杂产线,建议按“设备/产线”划分 Project,而不是把所有逻辑塞进一个 PLC 项目。典型做法是:新建一个 TwinCAT XAE Project,然后在 PLC 节点下右键添加“Standard PLC Project”,命名为 PLC_Main;若产线包含多个独立控制域(如主输送、分拣、包装),可再添加 PLC_Sorter、PLC_Packer 等子项目,通过 ADS 或共享变量通信。
新建 PLC 项目后,系统会自动生成 MAIN (PRG)、PlcTask (Task)、Untitled1 (Library) 等默认对象。此时不要急于写逻辑,而应先规划 POU 分层:建议至少划分 01_IO(输入输出映射)、02_Device(单设备功能块)、03_Sequence(顺控步序)、04_Interlock(联锁逻辑)、05_HMI(人机接口数据)五类文件夹。这种分层能让后续的任务分配和库引用有明确的归属。
二、任务与周期配置
TwinCAT 的任务系统决定了 PLC 程序的执行节拍。默认的 PlcTask 周期通常为 10 ms,但对于复杂产线,单一周期往往不够:高速信号(如安全门、急停、编码器)需要更短周期,而慢速逻辑(如温度 PID、报表统计)可以放宽周期以节省 CPU。合理的做法是按“响应要求”划分任务,而不是按“功能模块”划分。
例如,可配置三个任务:PlcTask_Fast 周期 2 ms,用于急停链、安全联锁和高速计数;PlcTask_Main 周期 10 ms,用于顺控步序和普通联锁;PlcTask_Slow 周期 50 ms,用于 HMI 刷新、数据记录和非实时计算。在 TwinCAT 中,通过双击 System → Tasks 添加任务,设置 Cycle Time,然后在 PLC 项目的 Task 节点下把对应 POU 拖入任务。需要注意:同一 POU 不应同时挂在多个任务下,否则会出现数据竞争;跨任务共享变量应使用 VAR_GLOBAL 并配合 AT %I*/AT %Q* 或 Volatile 语义,必要时加互锁标志。
任务优先级(Priority)也需关注:数值越小优先级越高。通常 Fast 任务优先级设为 0~2,Main 设为 5~10,Slow 设为 15~20。若 Fast 任务执行时间超过其周期,会导致任务溢出(Task Overrun),此时应在 System → Real-Time 中查看 CPU 负载,并优化代码或调整周期。
三、库引用管理
TwinCAT 的库分为系统库(如 Tc2_Standard、Tc2_System、Tc3_Module)和自定义库。新建 PLC 项目后,默认已引用 Tc2_Standard 和 Tc2_System。对于顺控与联锁工程,通常还需要引用 Tc2_Utilities(时间戳、字符串处理)、Tc3_JsonXml(若涉及配方)以及安全库 Tc3_Safety(若使用 TwinSAFE)。
库引用的关键原则是“显式、固定版本”。在 PLC → References 中右键添加库时,应选择具体版本号(如 Tc2_Standard 3.3.4.0),而不是“最新版本”。否则当工程迁移到另一台装有不同 TwinCAT 版本的电脑时,可能因库版本自动升级导致编译错误或行为变化。对于自定义库,建议将 .library 文件随工程一起纳入版本管理,并在 References 中使用相对路径或库仓库(Library Repository)方式引用。
四、变量命名规范
复杂产线中变量数量可达数千个,命名规范直接决定可读性和可维护性。推荐采用“前缀_设备_功能_类型”的结构,例如 iConv1_Speed、bDoor2_Closed、fbSorter_State。前缀遵循 IEC 61131-3 常见约定:b 布尔、i 整型、r 实型、s 字符串、t 时间、fb 功能块实例、st 结构体。设备名使用英文缩写并保持全局一致,例如 Conv 表示输送机、Sorter 表示分拣机、Robot 表示机器人。
对于联锁信号,建议在变量名中体现“安全方向”,例如 bEStop_Active、bGuard1_Closed、bSafetyOK。对于 HMI 交互变量,统一加 hmi 前缀,如 hmiStartCmd、hmiModeSel,便于在 HMI 变量表中批量筛选。所有全局变量集中在 GVL_Global、GVL_IO、GVL_HMI 等全局变量列表中,禁止在 POU 内部随意定义全局变量。
五、版本管理
TwinCAT 工程本质上是文件集合,适合用 Git 或 SVN 管理。但需注意:.tsproj、.plcproj 等工程文件是 XML 文本,可正常 diff;而 .tpy、.compiled 等编译产物应加入 .gitignore。推荐忽略规则包括:*.tpy、*.compiled、_Boot、_CompileInfo、*.~u。每次提交前,应在 TwinCAT 中执行“Clean Solution”并重新编译,确保提交的是源码而非中间产物。
对于库和第三方组件,建议使用 Git Submodule 或 NuGet 方式管理,避免直接复制文件导致版本漂移。工程根目录下可放置 README.md,记录 TwinCAT 版本、库版本、任务周期配置和变量命名约定,使团队成员在克隆工程后能快速对齐环境。
完成以上五步后,工程骨架即具备可扩展性:新增设备时按命名规范添加变量和功能块,按响应要求挂入对应任务,按需引用库并锁定版本,所有变更通过版本管理留痕。这样的工程在后续顺控步序扩展、联锁逻辑增加和多人协作时,才能保持稳定与可追溯。