1. Alarm 管理基础概念

在半导体设备自动化系统中,Alarm(报警)管理是 SECS/GEM 协议中保障设备安全、稳定运行的核心机制。Alarm 不仅用于通知操作员设备异常,还驱动设备状态机转换、触发数据上报以及影响生产流程的暂停或终止。本章从基础概念出发,系统讲解 Alarm 的定义、分类与状态机模型。

1.1 Alarm 定义

在 SECS/GEM 协议中,Alarm 是设备向主机(Host)报告异常条件或故障状态的标准化消息。每个 Alarm 由唯一的 Alarm ID 标识,并关联一个 Alarm Text 描述。Alarm 的触发与清除由设备内部逻辑控制,并通过 S6F11/S6F12 消息对进行上报。

关键术语:
  • Alarm ID:设备定义的唯一数字标识,范围通常为 1–65535。
  • Alarm Text:人类可读的报警描述,用于操作员界面显示。
  • Alarm Set:报警条件成立,设备进入报警状态。
  • Alarm Clear:报警条件解除,设备退出报警状态。

1.2 Alarm 类别

SECS/GEM 标准将报警分为三个类别:Alarm、Error 和 Warning。三者在严重程度、处理方式和对设备状态的影响上存在显著差异。

类别 严重程度 对设备状态的影响 典型示例 是否需要主机确认
Alarm 高 设备停止运行,进入 Idle 或 Down 状态 腔体真空泄漏、机械臂碰撞 是
Error 中 当前操作失败,设备保持可运行状态 参数校验失败、通信超时 否
Warning 低 不影响设备运行,仅提示操作员关注 温度接近上限、维护周期将至 否
工程实践提示: 在设备开发中,建议将 Alarm 类别与设备状态机严格绑定。Alarm 应触发状态迁移,Error 和 Warning 仅记录日志或发送通知,避免不必要的状态切换影响生产效率。

1.3 Alarm 状态机

每个 Alarm 实例在设备内部维护一个简单的两状态状态机:Set(激活) 和 Clear(清除)。状态转换由设备内部检测逻辑驱动,并通过 SECS 消息同步到主机。

Alarm 状态机模型 Clear 报警条件解除 Set 报警条件成立 异常发生 S6F11 上报 异常恢复 S6F11 上报 状态转换说明 Set 和 Clear 状态必须通过 S6F11 消息上报主机 主机可通过 S2F17/S2F18 查询当前 Alarm 列表

1.4 Alarm 生命周期与上报流程

一个完整的 Alarm 生命周期包含以下步骤:

  1. 条件检测:设备内部传感器或软件模块检测到异常条件。
  2. 状态转换:Alarm 状态从 Clear 切换为 Set。
  3. 消息上报:设备发送 S6F11(Alarm Report)消息给主机,包含 Alarm ID、Alarm Text 和 Set/Clear 标志。
  4. 主机确认:主机回复 S6F12(Alarm Acknowledge)确认收到。
  5. 设备响应:设备根据 Alarm 类别执行相应动作(停止、暂停或继续运行)。
  6. 条件恢复:异常条件解除后,Alarm 状态从 Set 切换为 Clear,再次上报 S6F11。
常见工程陷阱: 部分设备在 Alarm Clear 时不发送 S6F11 消息,导致主机侧 Alarm 状态长期处于 Set。务必在 Alarm 状态机中强制要求 Clear 时也上报,保持主机与设备状态一致。

1.5 Alarm 与设备状态机的关联

Alarm 的 Set/Clear 状态直接影响设备的状态机迁移。下表展示了典型设备状态与 Alarm 类别的对应关系:

设备状态 允许的 Alarm 类别 Alarm 触发后的目标状态 备注
Idle(空闲) Alarm, Error, Warning Down(停机) Alarm 导致设备不可用
Running(运行) Alarm, Error, Warning Idle 或 Down Alarm 强制停止当前批次
Paused(暂停) Error, Warning Paused(保持) Error/Warning 不改变状态
Down(停机) Alarm Down(保持) 需人工干预清除 Alarm

1.6 Alarm 管理的数据模型

在 SECS/GEM 实现中,Alarm 管理通常包含以下数据结构:

// Alarm 数据结构示例(C 语言风格)
typedef struct {
    uint16_t    alarm_id;       // Alarm ID,范围 1-65535
    char        alarm_text[64]; // 报警描述字符串
    uint8_t     alarm_state;    // 0=Clear, 1=Set
    uint8_t     alarm_class;    // 0=Alarm, 1=Error, 2=Warning
    uint32_t    timestamp;      // 触发时间戳(Unix 时间戳)
    uint8_t     ack_required;   // 是否需要主机确认
} AlarmRecord;

// Alarm 状态机转换函数
void alarm_set(AlarmRecord *alarm) {
    if (alarm->alarm_state == 0) {
        alarm->alarm_state = 1;
        alarm->timestamp = get_current_timestamp();
        send_s6f11(alarm);  // 上报 Set 事件
    }
}

void alarm_clear(AlarmRecord *alarm) {
    if (alarm->alarm_state == 1) {
        alarm->alarm_state = 0;
        alarm->timestamp = get_current_timestamp();
        send_s6f11(alarm);  // 上报 Clear 事件
    }
}
设计要点:
  • Alarm ID 必须在设备范围内唯一,建议使用枚举或宏定义管理。
  • Alarm Text 应包含足够的信息,便于操作员快速定位问题。
  • 状态转换函数必须保证幂等性:重复调用 Set 或 Clear 不应产生副作用。
  • 上报消息中必须包含时间戳,便于主机侧进行时序分析。

1.7 本章小结

Alarm 管理是 SECS/GEM 协议中设备与主机交互的关键环节。通过本章的学习,应掌握以下核心概念:

  • Alarm 的定义及其在设备自动化中的作用。
  • Alarm、Error、Warning 三类报警的区别与适用场景。
  • Alarm 状态机(Set/Clear)的转换逻辑与上报流程。
  • Alarm 与设备状态机的关联关系。
  • Alarm 数据结构的工程实现要点。