PackML · 半导体设备

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

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

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

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

标准状态机的好处:新工程师上手快、MES 系统对接有标准接口、设备状态一目了然。

二、17 个状态总览

三、Stopping vs Aborting 核心差异

这是 PackML 中最常被误用的两个状态:

⚠️ 半导体设备关键点:晶圆在卡盘上时触发 Aborting 会使主轴在任意位置急停,可能导致晶圆碎片。应在 Aborting 逻辑中判断主轴位置,优先让主轴退到安全高度再停止。

四、TwinCAT 3 完整 FB 实现(核心状态)

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