跳到主要内容

半导体晶圆搬运 (综合案例)

半导体 EFEM (Equipment Front End Module) 三座大山: SECS/GEM 协议、μs 级抖动、洁净室标准。

Darra 把前两座直接压平: SECS/GEM Server 内置 (E30/E5/E37)Windows 内核级隔离核 + TSC 校准, 实测抖动 ≤ 1μs (p99.9)

本案例给出一套完整的 12 寸晶圆 FOUP 搬运 + 预对准 + 前端模块 (EFEM) 设备方案, 单套含税约 ¥ 380 万, 国产机器人 + 国产 LoadPort + 汇川伺服 + 研华工控机。


一、设备简介

1.1 设备定位

  • 客户: 上海某 28nm 晶圆代工厂 (Fab 8", 自建 12" 新线)
  • 应用: EFEM 前端模块, FOUP 上下料 + 晶圆预对准 + 进入工艺腔
  • 规模: 首期需求 120 套, 每套服务一台工艺机
  • 合规:
    • 符合 SEMI S2 / S8 (人员安全 / 人机工程)
    • 符合 SEMI E30 (GEM) / E5 (SECS-II) / E37 (HSMS)
    • 符合 Class 100 洁净室标准

1.2 设备组成

子系统说明数量
Load PortFOUP 对接口, 国产 LP2002
SCARA 晶圆机械手5 轴 (XYZθ + 翻转), 新松 SC5001
预对准器 (Prealigner)新松 PA300, Notch 识别1
FFU 风机爱发科 FFU-4, 维持 Class 1002
洁净监测粒子 / 温湿度 / 静压1 套
SECS/GEM HostDarra Runtime 内置 Server1
扫码 OCRWafer ID 识别1 相机

1.3 关键指标

指标要求Darra 实测
EtherCAT 周期500 μs500 μs 稳定
周期抖动 p99≤ 0.5 μs0.42 μs
周期抖动 p99.9≤ 1 μs0.78 μs
机械手定位精度≤ 50 μm32 μm
重复定位精度≤ 10 μm6.5 μm
单片搬运节拍≤ 12 s10.8 s
日产能≥ 7,000 片7,200 片
SECS/GEM 响应≤ 100 ms28 ms
MTBF≥ 5,000 h预期 8,000 h+

1.4 "为什么国产可以"

拆解日系 EFEM 整机 (约 ¥ 1,200 万) 成本: 控制软件含 SECS/GEM 占 30%, 这是国产最薄弱环节。Darra 把这 30% 切下来, 硬件由国产集成 (新松 / 乐创) 承担, 整体降到 ¥ 380 万/套。


二、项目模块组成

2.1 工艺流程

  1. FOUP 到位 (AGV 送入 Load Port)
  2. LP 开盒 + 气密性检查 + Slot Mapping (25 槽位有无片)
  3. SCARA 进入 FOUP 抓第 N 片
  4. OCR 读取 Wafer ID (可选)
  5. 搬到预对准器 → 识别 Notch (凹口) → 旋转到 0° 基准
  6. SCARA 再次取片 → 送入工艺腔 (Chamber)
  7. 工艺腔处理 (不属本系统) → 返回片
  8. 返回 FOUP 原槽 → 关盒 → AGV 带走

单片循环 ≤ 12 秒, 双 FOUP 交替 (一个在卸一个在装)。

2.2 子系统职责

子系统职责
Darra RuntimeEtherCAT 主站 / 状态机 / SECS Server / HMI 发布
SECS/GEM对 MES 提供 E30 合规接口
SCARA 控制5 轴 CSP 模式, 位置环由伺服完成, PLC 发目标
Prealigner相机识别 Notch, 计算旋转角度
Load PortSMIF / FOUP 机械动作, SEMI E84 / E87 合规
FFU / 洁净闭环控制静压, 粒子超标停机

三、机械装配架构

3.1 整机布局 (俯视)

                 ┌──────────────── 工艺腔 (Chamber) ────────────────┐
│ │
│ (此区域不属本系统) │
│ │
└──────────────────┬────────────────────────────────┘
│ 晶圆进出口
┌───────────────────────────────────┴───────────────────────────────┐
│ │
│ ╔═══════════════╗ │
│ ║ FFU 风机 (2) ║ Class 100 洁净空间 │
│ ╚═══════════════╝ │
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Load Port 1 │ │ Load Port 2 │ │
│ │ (FOUP 对接) │ │ (FOUP 对接) │ │
│ │ │ SCARA 5 轴 │ │ │
│ │ [25 片] │ 机械手臂展 500mm │ [25 片] │ │
│ └───┬──────────┘ ┌─────────┐ └───────┬──────┘ │
│ │ │ │ │ │
│ └──────────────┤ ├─────────────┘ │
│ │ SCARA │ │
│ └─────────┘ │
│ │ │
│ ┌────▼────┐ │
│ │ Pre- │ │
│ │ Align │ (Notch 识别 + 旋转) │
│ └─────────┘ │
│ │
│ ┌──────────────────┐ ┌──────────────┐ ┌──────────┐ │
│ │ 洁净监测 (粒子/ │ │ 电柜 + Darra │ │ 触摸屏 │ │
│ │ 温湿度/静压) │ │ Runtime IPC │ │ 21.5" │ │
│ └──────────────────┘ └──────────────┘ └──────────┘ │
│ │
└────────────────────────────────────────────────────────────────────┘
AGV 通道 (FOUP 进出)

3.2 工件流向

FOUP (25 片晶圆) → LP → SCARA → Prealigner (单片校准) → SCARA → Chamber → 回 SCARA → 回 FOUP 原槽。

全流程 无人工接触, 洁净度等级 Class 100。

3.3 机械精度要求

位置重复精度说明
SCARA 抓片位 (FOUP 槽)≤ 10 μm槽间距 10 mm, 不允许碰片
Prealigner 旋转≤ 0.1°Notch 对齐
Chamber 送片位≤ 50 μm工艺腔入口公差
Load Port 对接≤ 100 μmFOUP 导销定位

四、程序架构

4.1 OB 分层

4.2 FB 清单

FB周期职责
FB_Safety500 μs急停 / 门锁 / 光幕 / 气压 检查
FB_Motion500 μs5 轴 CSP 目标位置 + Prealigner + LP
FB_WaferStateMachine2 ms每片晶圆状态机
FB_CleanroomMonitor2 ms粒子 / 静压 / 温湿度 闭环
FB_SECSHandler10 ms解析 MES 命令 + 上报事件
FB_WaferOCR10 ms触发相机 + 读 Wafer ID
FB_HMIUpdate100 ms画面刷新
FB_EventLog100 ms事件日志
FB_EnvSample1 s洁净参数定时入库

4.3 多对象协调

本案例是单设备, 不需要多 PLC 同步。但同一 Runtime 内多个 FB 之间通过共享 UDT 协调:

  • g_Wafers[1..25] — 每片晶圆状态 (在 FOUP / 在 SCARA / 在 PA / 在 Chamber)
  • g_Efem — 整机状态 + 环境参数
  • g_Robot — SCARA 5 轴
  • g_PreAlign — Prealigner 状态
  • g_SecsMsgQueue — SECS 消息队列 (来自 MES)

五、硬件 BOM

5.1 机械平台 (国产集成)

型号数量单价 (¥)小计 (¥)
EFEM 机架 (洁净, 定制)沈阳新松 定制1380,000380,000
FFU 风机 (洁净)爱发科 FFU-4232,00064,000
晶圆 SCARA (5 轴, 12")新松 SIASUN SC5001380,000380,000
预对准器新松 PA3001120,000120,000
Load Port (FOUP 对接)上海微电子 LP2002150,000300,000
洁净粒子监测华控 PM01218,00036,000
温湿度 / 气压传感康宝41,2004,800

5.2 控制电气

型号数量单价 (¥)小计 (¥)
工控机 (实时)研华 ARK-3520 定制 BIOS (i7-9700 / 32GB ECC / NVMe)115,80015,800
HMI 触摸屏研华 TPC-1881WP 21.5"16,5006,500
伺服驱动汇川 SV660N (CiA 402 CSP)53,60018,000
伺服电机汇川 ISMH 系列 绝对值53,20016,000
远程 IO汇川 GL10-EC 16DI/16DO/8AI23,6007,200
安全 IO (FSoE)汇川 GL10-FSO15,6005,600
光幕 + 门锁SICK C40001 批28,00028,000
真空 / 气压传感喜开力 (进口 EFEM 标准)61,80010,800
Wafer OCR 相机海康 MV-CA013 + 镜头18,5008,500

5.3 辅件

型号数量单价 (¥)小计 (¥)
工业交换机华为 S1700-8G1960960
UPS 在线式山特 C3K14,8004,800
电柜 + 风冷定制145,00045,000
线缆 / 气路菲尼克斯 + SMC1 批18,00018,000
安装调试3 工程师 × 30 天1180,000180,000

5.4 Darra 软件

说明单价 (¥)小计 (¥)
Darra Runtime 实时版 (含 SECS/GEM)单设备永久45,00045,000
Darra IDE工程师授权15,00015,000
DarraCloud 企业版 (年)远程运维 + 数据备份6,0006,000

5.5 总预算

大项小计 (¥)
机械平台1,284,800
控制电气116,400
辅件248,760
Darra 软件66,000
硬件 + 软件小计1,715,960
集成服务 + 差旅120,000
风险预留150,000
硬件阶段合计≈ 1,985,960
现场工艺调试 (晶圆厂陪调 2 月)300,000
合规认证 (SEMI S2/S8, 洁净等级)200,000
集成商利润680,000
对外含税报价≈ ¥ 3,800,000 (380 万)

六、IO 模块配置

6.1 IO 模块清单

位置模块型号DIDOAIAO安全
LP + SCARA 电控IO-A汇川 GL10-EC161680
PA + 洁净IO-B汇川 GL10-EC161680
安全模块SAFE-1汇川 GL10-FSOFSoE 8 路

合计: 32 DI + 32 DO + 16 AI + 8 FSoE 安全通道。

6.2 IO 地址分配

地址类型符号说明
%IX0.0FSIg_Safety.bEStop急停 (硬接 FSoE)
%IX0.1FSIg_Safety.bDoorClosed机架门关
%IX0.2FSIg_Safety.bLightCurtain光幕 OK
%IX0.3FSIg_Safety.bAirPressureOK气源压力 OK
%IX10.0DIg_LP1.bFoupPresentLP1 有 FOUP
%IX10.1DIg_LP1.bDockedLP1 已对接
%IX10.2DIg_LP1.bOpenDoneLP1 开盒完成
%IX10.3DIg_LP1.bMapDoneLP1 Slot 映射完成
%IX11.0-%IX11.24DIg_LP1.bSlot[1..25]LP1 每槽位有无片 (25 个光电)
%IX20.0DIg_PA.bHomeOKPA 回零完成
%IX20.1DIg_PA.bWaferPresentPA 工位有片
%IX20.2DIg_PA.bNotchFoundNotch 已识别
%IW100AIg_Efem.rStaticPressure洁净静压 (Pa)
%IW102AIg_Efem.rParticleCount粒子数 / m³
%IW104AIg_Efem.rTemperature°C
%IW106AIg_Efem.rHumidity%RH
%QX0.0DOg_LP1.bOpenCmdLP1 开盒命令
%QX0.1DOg_LP1.bCloseCmdLP1 关盒命令
%QX10.0DOg_FFU.bFanRunFFU 风机运行
%QX10.1DOg_WarnLight.bGreen状态灯绿

6.3 IO 用途分工 (SECS/GEM + 机械 握手)

交接上游信号下游信号方式
MES → EFEMS2F41 RemoteCommandSECS Server → PLC 队列HSMS TCP
EFEM → MESS6F11 EventReportPLC → SECS ServerHSMS TCP
FOUP 映射 → SCARALP1.bSlot[1..25] + LP1.bMapDoneRobot.bReadyToPick本地变量
SCARA → PARobot.bArrived_PAPA.bStart本地变量 + DC 同步
PA → SCARAPA.bDone + PA.rMeasuredAngleRobot.bPickFromPA本地变量
安全 → 全局FSoE 通道 bLineSafe所有 FB 检查FSoE
洁净 → 工艺Efem.rParticleCount > 阈值Efem.bRequestPause闭环

6.4 数据绑定 (单设备, 无多 PLC 同步)

虽然 EFEM 是单 Runtime, 但多台 EFEM 对 MES 是多设备场景。每台 EFEM 有独立的 HSMS 会话, 分配不同的 DeviceID:

# Darra SECS 配置
secs:
device_id: 12 # MES 分配的 DeviceID
session_id: 0
hsms:
mode: Passive # EFEM 是被动方, MES 主动连
port: 5000
t3_timeout: 45 # Reply timeout
t5_timeout: 10 # Connect separation
t6_timeout: 5 # Control message timeout
t7_timeout: 10 # NOT_SELECTED timeout
t8_timeout: 6 # Network intercharacter
events:
- id: 1001
name: WaferStart
link_vars: [g_CurrentWafer.sId, g_CurrentWafer.nFoupSlot, g_CurrentWafer.sRecipe]
- id: 1002
name: WaferInChamber
link_vars: [g_CurrentWafer.sId]
- id: 1003
name: WaferDone
link_vars: [g_CurrentWafer.sId, g_CurrentWafer.rThickness]
- id: 2001
name: AlarmCleanroomAnomaly
link_vars: [g_Efem.rParticleCount, g_Efem.rStaticPressure]
status_variables:
- id: 1
name: EFEMState
bind: g_Efem.eState
- id: 2
name: RobotPosition
bind: g_Robot.rPos

多台 EFEM 各自拿不同 device_id (12, 13, 14...), MES 按 DeviceID 区分。


七、核心数据结构

7.1 晶圆信息

TYPE T_Wafer :
STRUCT
sId : STRING(16); // Wafer ID (OCR 读取或 FOUP 分配)
nFoupId : INT; // 来自哪个 FOUP (1/2)
nFoupSlot : INT; // FOUP 内槽位 1..25
eState : E_WaferState;
dtStartTime : DT;
dtEndTime : DT;
rNotchAngle : REAL; // Notch 测量角度
sRecipe : STRING(32); // 工艺配方
rThickness : REAL; // 膜厚 (Chamber 返回)
sFailReason : STRING(80); // 如果 NG
END_STRUCT
END_TYPE

TYPE E_WaferState :
(
Idle := 0,
InFoup := 1,
InRobot_ToPA := 2,
InPA := 3,
InRobot_ToCh := 4,
InChamber := 5,
InRobot_ToFp := 6,
Done := 7,
NG := 9
);
END_TYPE

7.2 EFEM 整机状态

TYPE T_EFEM :
STRUCT
eState : E_EFEMState; // Init / Idle / Running / Paused / Alarm / Maint
bFFUOn : BOOL;
rStaticPressure : REAL; // Pa (Class 100 需要 > 5 Pa)
rParticleCount : REAL; // 粒子数 /m³ (> 100 需要停机)
rTemperature : REAL; // °C
rHumidity : REAL; // %RH
nFoupLoaded : ARRAY[1..2] OF BOOL;
bPreAlignReady : BOOL;
sCurrentRecipe : STRING(32);
nTotalWafers : DINT; // 累计处理片数
rUptimeHours : REAL;
END_STRUCT
END_TYPE

TYPE E_EFEMState :
(
Init := 0,
Idle := 1,
Running := 2,
Paused := 3,
Alarm := 9,
Maint := 10
);
END_TYPE

7.3 机械手 (SCARA 5 轴)

TYPE T_Robot :
STRUCT
rPos : ARRAY[1..5] OF REAL; // X/Y/Z/θ/Flip
rTarget : ARRAY[1..5] OF REAL;
rVel : ARRAY[1..5] OF REAL;
bVacuumOn : BOOL;
bVacuumSensor : BOOL; // 真空吸附反馈
bHomed : BOOL;
bReady : BOOL;
bBusy : BOOL;
nCurrentWafer : INT; // 当前持有的晶圆索引
eMotionState : E_MotionState;
sFaultMsg : STRING(120);
END_STRUCT
END_TYPE

7.4 SECS 消息

TYPE T_SECSMessage :
STRUCT
nStream : INT; // S1, S2, ...
nFunction : INT; // F1, F2, ...
bReply : BOOL; // Wait Reply flag
nSystemBytes : DINT; // 消息 ID
abData : ARRAY[0..2047] OF BYTE;
nDataLen : INT;
dtRecv : DT;
END_STRUCT
END_TYPE

7.5 工艺配方

TYPE T_WaferRecipe :
STRUCT
sId : STRING(32); // "RCP_OX_ETCH_001"
sName : STRING(64);
sChamberType : STRING(16);
rEtchPower : REAL;
rEtchTime : REAL;
rCoolTime : REAL;
nLoops : INT;
bValid : BOOL;
END_STRUCT
END_TYPE

八、核心程序代码

8.1 主循环 (500μs 周期)

PROGRAM OB1
VAR
END_VAR

// 1) 安全联锁
FB_Safety();
IF NOT g_Safety.bLineSafe THEN
Robot_StopAll(g_Robot);
g_Efem.eState := E_EFEMState.Alarm;
RETURN;
END_IF;

// 2) 运动更新 (CSP 模式下, PLC 发目标位置, 位置环在伺服)
IF g_Efem.eState = E_EFEMState.Running THEN
Robot_Update(g_Robot);
PA_Update(g_PreAlign);
LP_Update(g_LP1);
LP_Update(g_LP2);
END_IF;

// 3) 洁净环境实时阈值判断
IF g_Efem.rStaticPressure < 5.0 THEN
Alarm_Raise(AlarmId.LowStaticPressure, '洁净静压低 Pa=' + REAL_TO_STR(g_Efem.rStaticPressure));
Efem_RequestPause();
END_IF;
IF g_Efem.rParticleCount > 100.0 THEN
Alarm_Raise(AlarmId.HighParticle, '粒子超标 /m³=' + REAL_TO_STR(g_Efem.rParticleCount));
Efem_RequestPause();
END_IF;
END_PROGRAM

8.2 晶圆搬运状态机

FUNCTION_BLOCK FB_Wafer_Pickup
VAR_IN_OUT
w : T_Wafer;
END_VAR
VAR
target : ARRAY[1..5] OF REAL;
END_VAR

CASE w.eState OF
E_WaferState.InFoup:
// 从 FOUP 第 N 槽抓片
target := FOUP_GetSlotPos(w.nFoupId, w.nFoupSlot);
Robot_MoveAbs(g_Robot, target, 500.0); // 500 mm/s
IF Robot_Reached(g_Robot) THEN
Robot_VacuumOn(g_Robot);
WAIT_MS(150);
IF NOT g_Robot.bVacuumSensor THEN
Alarm_Raise(AlarmId.VacuumFail, '真空吸附失败 slot=' + INT_TO_STR(w.nFoupSlot));
w.eState := E_WaferState.NG;
RETURN;
END_IF;
w.eState := E_WaferState.InRobot_ToPA;
w.dtStartTime := NOW();
SECS_SendEvent(1001, w); // WaferStart 事件
END_IF;

E_WaferState.InRobot_ToPA:
// 搬到预对准器
target := PA_GetInPos();
Robot_MoveAbs(g_Robot, target, 800.0);
IF Robot_Reached(g_Robot) THEN
Robot_VacuumOff(g_Robot);
WAIT_MS(100);
PA_Start(g_PreAlign, w);
w.eState := E_WaferState.InPA;
END_IF;

E_WaferState.InPA:
IF g_PreAlign.bDone THEN
w.rNotchAngle := g_PreAlign.rMeasuredAngle;
// 二次取片 + 送入 Chamber
Robot_VacuumOn(g_Robot);
WAIT_MS(120);
target := Chamber_GetInPos();
Robot_MoveAbs(g_Robot, target, 500.0);
w.eState := E_WaferState.InRobot_ToCh;
END_IF;

E_WaferState.InRobot_ToCh:
IF Robot_Reached(g_Robot) THEN
Robot_VacuumOff(g_Robot);
WAIT_MS(100);
w.eState := E_WaferState.InChamber;
SECS_SendEvent(1002, w); // WaferInChamber
END_IF;

E_WaferState.InChamber:
// 等 Chamber 工艺完成 (通过 SECS 通知)
IF g_ChamberReturn[w.nFoupSlot].bDone THEN
w.rThickness := g_ChamberReturn[w.nFoupSlot].rThickness;
w.eState := E_WaferState.InRobot_ToFp;
END_IF;

E_WaferState.InRobot_ToFp:
// 回 FOUP 原槽
Robot_VacuumOn(g_Robot);
target := FOUP_GetSlotPos(w.nFoupId, w.nFoupSlot);
Robot_MoveAbs(g_Robot, target, 500.0);
IF Robot_Reached(g_Robot) THEN
Robot_VacuumOff(g_Robot);
w.dtEndTime := NOW();
w.eState := E_WaferState.Done;
SECS_SendEvent(1003, w); // WaferDone
g_Efem.nTotalWafers := g_Efem.nTotalWafers + 1;
END_IF;
END_CASE
END_FUNCTION_BLOCK

8.3 SECS/GEM 消息处理

FUNCTION_BLOCK FB_SECSHandler
VAR_IN_OUT
msg : T_SECSMessage;
END_VAR

// 按 Stream × 100 + Function 散转
CASE msg.nStream * 100 + msg.nFunction OF
101: // S1F1 "Are You There"
SECS_Send_S1F2(msg.nSystemBytes);

103: // S1F3 Selected Equipment Status Request
SECS_Send_S1F4_StatusData(msg);

1301: // S1F13 Establish Communications
SECS_Send_S1F14(msg.nSystemBytes, 0); // COMMACK=0 accept

213: // S2F13 Equipment Constant Request
SECS_Send_S2F14_ECData(msg);

241: // S2F41 Host Command Send (START / STOP / PAUSE)
CASE SECS_ParseRCMD(msg) OF
'START':
g_Efem.eState := E_EFEMState.Running;
SECS_Send_S2F42(msg.nSystemBytes, 0); // HCACK=0
'STOP':
g_Efem.eState := E_EFEMState.Idle;
SECS_Send_S2F42(msg.nSystemBytes, 0);
'PAUSE':
g_Efem.eState := E_EFEMState.Paused;
SECS_Send_S2F42(msg.nSystemBytes, 0);
ELSE
SECS_Send_S2F42(msg.nSystemBytes, 5); // HCACK=5 unknown command
END_CASE;

305: // S3F17 Recipe Upload
Recipe_Upload(SECS_ParseRecipeID(msg), msg.abData);
SECS_Send_S3F18(msg.nSystemBytes, 0);

501: // S5F1 Alarm Report Send
// EFEM 主动发, 不会收到

611: // S6F11 Event Report Send
// EFEM 主动发

701: // S7F1 Process Program Load Inquire
SECS_Send_S7F2(msg.nSystemBytes, 0);
ELSE
// 不支持的消息, 回 S9F13 (Unrecognized Function)
SECS_Send_S9F3(msg.nSystemBytes);
END_CASE
END_FUNCTION_BLOCK

8.4 洁净环境闭环

FUNCTION_BLOCK FB_CleanroomMonitor
VAR
rSetPressure : REAL := 15.0; // 目标 15 Pa
rError : REAL;
rPidOut : REAL;
END_VAR

// 粒子报警
IF g_Efem.rParticleCount > 100.0 THEN
Alarm_Raise(AlarmId.Particle, 'Class 100 粒子超标');
g_Efem.eState := E_EFEMState.Alarm;
END_IF;

// 静压 PID 闭环控制 FFU 转速
rError := rSetPressure - g_Efem.rStaticPressure;
FFU_PID(rError, rPidOut);
g_FFU.rSpeedSet := LIMIT(rPidOut, 60.0, 100.0); // 60~100% 转速

// 每 1s 采样入库
IF IS_TICK_1HZ() THEN
DB_Insert('tbl_cleanroom', NOW(),
g_Efem.rStaticPressure, g_Efem.rParticleCount,
g_Efem.rTemperature, g_Efem.rHumidity);
END_IF;
END_FUNCTION_BLOCK

8.5 Wafer OCR

FUNCTION_BLOCK FB_WaferOCR
VAR_IN_OUT
w : T_Wafer;
END_VAR
VAR
resp : T_CameraResponse;
END_VAR

// 机器人把晶圆送到 OCR 工位 (在 SCARA 到 PA 的路径上)
IF w.eState = E_WaferState.InRobot_ToPA
AND Robot_AtOCRPos(g_Robot) THEN
Camera_Trigger(1, 1000); // Exposure 1ms
WAIT_UNTIL(Camera_Ready(1));
resp := Camera_GetResponse(1);
IF resp.bSuccess THEN
w.sId := resp.sReadText;
ELSE
w.sId := 'UNKNOWN_' + DT_TO_STR(NOW());
Alarm_Raise(AlarmId.OCRFail, 'Wafer OCR 读取失败');
END_IF;
END_IF;
END_FUNCTION_BLOCK

九、运行与调试

9.1 上电顺序

  1. UPS 合闸, 工控机开机
  2. Darra Runtime 启动, 加载工程
  3. 伺服驱动上电, 等待 OP 状态
  4. FFU 启动, 静压升至 15 Pa
  5. SCARA 回零, PA 回零, LP 回零
  6. HSMS 监听 5000 端口, 等待 MES 连接
  7. MES 发 S1F1 → EFEM 回 S1F2, 通讯建立
  8. MES 发 S2F41 "START" → EFEM 进入 Running

9.2 μs 级抖动调优

作用
BIOS C-StateDisabled禁止 CPU 进入低功耗
BIOS Hyper-ThreadingDisabled减少核心调度抖动
Windows 电源方案高性能禁止 CPU 降频
核隔离IsolatedCore=1专供 EtherCAT 主站
NIC 中断Bind 到核 0避免跨核
驱动DarraRT.sys + DarraRT_Eth.sys内核级零拷贝
TSC 校准启动时自动纳秒级时间基准

9.3 调试工具

工具作用
EtherCAT 诊断每从站 WKC / DC Diff
抖动监视器p50 / p99 / p99.9 histogram
SECS Spy抓取 HSMS 数据包
Wireshark + hsms.lua解析 SECS-II 数据
DbgView内核驱动 DbgPrint 日志
Darra IDE 变量监视实时 UDT 字段

9.4 典型故障与处理

现象可能原因处理
抖动 p99.9 > 1μs核隔离未生效BCDEDIT /enum 确认 BootProcNum
FOUP 映射错 (slot)光电偏位重新标定 Load Port
Notch 识别失败光源 / 曝光调整 PA 相机参数
SCARA 撞片示教点不准重新 TCP + FOUP 坐标系校准
HSMS 连接断网络 / MES 重启等 T5 超时后自动重连
粒子频繁超标FFU 过滤器需换维护记录 → 8,000h 更换
静压不稳门未关严检查气密性

十、Darra 功能对照表

项目需求Darra 功能模块
500μs EtherCATDarra EtherCAT Master + 核隔离驱动层
μs 级抖动DarraRT.sys (TSC 校准 + 内核隔离)驱动层
SECS/GEM E30Darra SECS Server 内置Runtime
SECS-II E5Darra SECS 消息库Runtime
HSMS E37Darra HSMS TCP 实现Runtime
5 轴 CSPDarra MC + 伺服对象Runtime
Notch 识别Darra Vision + OpenCV FFI插件
Wafer OCRDarra Camera Trigger + OCR FFI插件
洁净监控Darra AnalogIn + PID内置
FSoE 安全Darra FSoE 从站对接驱动层
本地 HMIDarra HMIIDE
远程运维DarraCloud 反向隧道云服务
配方管理Darra Recipe 对象IDE
追溯入库Darra SQLite / PostgreSQL数据库插件
事件日志Darra EventLog内置

十一、项目总结

11.1 交付结果

  • 首批 12 套已经在客户 28nm 产线试产
  • 单套抖动 p99.9 = 0.78 μs (要求 ≤ 1 μs)
  • 单片节拍 10.8 s (要求 ≤ 12 s)
  • 日产 7,200 片/套
  • 8,000 小时 MTBF 压力测试通过
  • 与晶圆厂上层 MES 完整 E30 合规测试通过

11.2 产品价值体现

  • SECS/GEM 零授权: 对比 Cimetrix ¥ 45 万 / Inficon ¥ 60 万, 单套节省 30~60 万
  • 抖动可观测: 内置直方图, 客户可以随时抽查指标, 不用盲信
  • 国产硬件替代: 新松 / 上海微电子 / 汇川 都是国产, 120 套采购链不卡脖子
  • 调试周期: 晶圆厂陪调 2 月, 对比日系设备 6~12 月 联调
  • 二次开发友好: 客户可以自己改工艺 FB, 不再依赖设备厂商工程师上门

11.3 关键经验

  1. 核隔离 + TSC 校准是抖动达成的关键, 纯应用层优化到不了 1μs
  2. SECS/GEM 的 T3 回复超时默认 45s, 但实际需要降到 5s 否则故障传播慢
  3. FOUP Slot 映射必须做 双光电交叉验证, 单光电会被晶圆反射误触
  4. 粒子超标要区分瞬时 vs 持续, 瞬时直接报, 持续 30s 再停机
  5. Prealigner 的 Notch 角度测量要留 ±2° 容差, 否则对 0 度 / 180 度晶圆无法判定

11.4 下一步扩展

  • 增加 双 SCARA 并行搬运, 节拍压到 7 s
  • 集成 FOUP 自动清洗 (SMIF 升级)
  • 接入 智能报警预测: 基于真空反馈曲线预判吸附失败
  • DarraCloud 用于跨工厂设备运行数据聚合, 形成行业基准

相关案例: 汽车发动机装配线 | 智能产线总控