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 消息同步到主机。
1.4 Alarm 生命周期与上报流程
一个完整的 Alarm 生命周期包含以下步骤:
- 条件检测:设备内部传感器或软件模块检测到异常条件。
- 状态转换:Alarm 状态从 Clear 切换为 Set。
- 消息上报:设备发送 S6F11(Alarm Report)消息给主机,包含 Alarm ID、Alarm Text 和 Set/Clear 标志。
- 主机确认:主机回复 S6F12(Alarm Acknowledge)确认收到。
- 设备响应:设备根据 Alarm 类别执行相应动作(停止、暂停或继续运行)。
- 条件恢复:异常条件解除后,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 数据结构的工程实现要点。