4. TwinCAT PLC编程基础与产线控制逻辑
在 TwinCAT 产线虚拟调试工程中,PLC 程序是整条产线动作逻辑的“大脑”。虚拟调试阶段,PLC 代码往往先于真实设备完成,通过仿真轴、虚拟 I/O 与数字孪生模型联动,提前验证启停、互锁、模式切换等逻辑是否正确。因此,掌握 TwinCAT PLC 编程基础,尤其是变量与数据类型、任务与周期、ST 语言、状态机、互锁与使能、启停与模式管理,是后续虚拟调试能否顺利推进的关键。
变量与数据类型:先定义清楚,再谈逻辑
TwinCAT PLC 支持 IEC 61131-3 标准数据类型。产线控制中最常用的包括:BOOL(按钮、传感器、使能位)、INT/DINT(计数、位置、速度)、REAL(模拟量、速度给定)、TIME(延时、超时)、STRING(配方名、工位号)。此外,TwinCAT 还提供 LREAL、WORD、BYTE 等类型,用于与硬件或通信映射。
变量按作用域分为全局变量(GVL)和局部变量(POU 内 VAR)。产线项目中,建议把跨工位共享的信号(如急停、模式、总启停)放入 GVL,把仅本工位使用的中间变量留在功能块内部。变量命名建议采用“区域_对象_功能”结构,例如 Stn1_Cylinder_Extend、Line_AutoMode,便于虚拟调试时快速定位。
需要特别注意的是,BOOL 在 TwinCAT 中默认占 8 位,若大量使用会浪费内存;对位操作密集的场合可用 BIT 或 WORD 打包。模拟量处理时,INT 与 REAL 的转换要显式书写,例如 rSpeed := INT_TO_REAL(iRaw) * 0.01;,避免隐式转换带来的精度问题。
任务与周期:决定逻辑“多久跑一次”
TwinCAT 的任务(Task)决定 PLC 程序的执行节奏。常见任务类型有:PlcTask(默认循环任务)、PlcTask_1ms、PlcTask_10ms 等。产线控制中,急停、安全互锁应放在快速任务(如 1 ms 或 2 ms),普通逻辑、HMI 刷新可放在 10 ms 或 20 ms 任务。任务周期越短,响应越快,但 CPU 负载越高。
在虚拟调试中,任务周期还会影响仿真轴与 PLC 的同步效果。若仿真轴周期为 1 ms,而 PLC 任务为 10 ms,则位置给定更新会滞后,导致虚拟模型动作“发顿”。因此,建议将运动控制相关 POU 分配到与仿真轴同周期或整数倍周期的任务中。
ST 语言基础:结构化文本的写法
ST(Structured Text)是 TwinCAT 中最适合表达复杂逻辑的语言。基本结构包括赋值 :=、比较 =、<>、逻辑 AND/OR/NOT、条件 IF...ELSIF...ELSE...END_IF、分支 CASE...END_CASE、循环 FOR...END_FOR。产线逻辑中,CASE 常用于状态机,IF 常用于互锁判断。
IF bEStop AND bGuardClosed THEN
bEnable := TRUE;
ELSE
bEnable := FALSE;
END_IF;
CASE eState OF
IDLE: IF bStart THEN eState := RUNNING; END_IF
RUNNING: IF bStop OR NOT bEnable THEN eState := IDLE; END_IF
END_CASE
编写 ST 时,建议每个 POU 只做一件事,输入输出用 VAR_INPUT/VAR_OUTPUT 明确声明,避免使用全局变量做隐式耦合。这样在虚拟调试中替换仿真信号时,只需改接口,不必改内部逻辑。
状态机编程:让产线动作有“章法”
产线控制最忌讳“一堆 IF 嵌套”。状态机(State Machine)把设备行为划分为若干状态,如 IDLE、HOMING、READY、RUNNING、PAUSED、FAULT,每个状态只处理“进入条件、执行动作、退出条件”。TwinCAT 中可用 CASE 实现,也可用 StateMachine 库或自定义 FB。
以一段输送线为例:IDLE 等待启动;HOMING 回零;READY 等待物料;RUNNING 输送;FAULT 等待复位。状态切换必须由明确条件触发,且每个状态都要有超时监控,防止卡死。虚拟调试时,可以手动强制状态变量,观察虚拟模型是否按预期动作。
互锁与使能逻辑:安全第一,动作第二
互锁(Interlock)是防止设备冲突或危险动作的条件集合。例如:气缸伸出前必须确认工件到位、安全门关闭、急停未触发。使能(Enable)则是允许设备运行的总开关,通常由安全回路、模式选择、电源就绪共同决定。
在 ST 中,互锁通常写成“与”条件:bCylExtend := bWorkpieceReady AND bGuardClosed AND bEStopOK AND bAutoMode;。使能则作为状态机的入口条件:IF bEnable THEN ... END_IF。虚拟调试时,可以逐条强制互锁条件,观察哪些动作被正确禁止,哪些被误放行。
产线启停与模式管理:从单机到整线
产线启停不是简单的一个按钮。通常包括:总启动、总停止、急停、复位、暂停/继续。模式管理则包括手动、自动、单步、维护等。TwinCAT 中可用一个 eMode 枚举和 eState 状态机组合实现。
建议的启停顺序:先确认安全回路正常,再进入 READY,然后按工位顺序启动,最后整线联动。停止时反向:先停进料,再停输送,最后停出料。虚拟调试中,可以模拟“急停按下—所有输出归零—虚拟模型停止”的完整链路,验证停机逻辑是否彻底。
上图把使能条件、模式选择与状态机放在同一张图中,便于理解“使能是入口、模式是分支、状态是执行”的关系。虚拟调试时,可以按图中条件逐项强制,观察状态迁移是否符合预期。
eState 和 eMode 加入 Watch 窗口,并开启“在线写入”。这样可以在不停止 PLC 的情况下强制状态,快速验证虚拟模型的动作序列。综合来看,TwinCAT PLC 编程基础并不是孤立的知识点,而是围绕“变量定义—任务分配—ST 实现—状态机组织—互锁保护—启停与模式管理”形成的一条完整链路。在虚拟调试工程中,这条链路越清晰,后续与数字孪生模型联调时就越容易定位问题。建议在编写每个工位程序时,先画出状态机草图,再定义变量表,最后用 ST 实现,并预留强制接口,方便虚拟调试阶段逐点验证。