半导体设备控制逻辑复杂,状态繁多,如果用自定义状态机,不同工程师写出来的结构各不相同,维护和交接成本极高。ISA-88 PackML 标准定义了一套通用的 17 状态机,已被 OMAC 组织采纳,成为工业设备控制的事实标准。
标准状态机的好处:新工程师上手快、MES 系统对接有标准接口、设备状态一目了然。
这是 PackML 中最常被误用的两个状态:
⚠️ 半导体设备关键点:晶圆在卡盘上时触发 Aborting 会使主轴在任意位置急停,可能导致晶圆碎片。应在 Aborting 逻辑中判断主轴位置,优先让主轴退到安全高度再停止。
FUNCTION_BLOCK FB_PackMLStateMachine VAR_INPUT cmdStart : BOOL; cmdStop : BOOL; cmdAbort : BOOL; cmdClear : BOOL; cmdReset : BOOL; bStopDone : 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: // 此处添加预热/安全检查逻辑 eState := E_PackMLState.Execute; 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。