引言半导体制造中追溯Traceability是MES系统最核心的功能之一。从晶圆进料到成品出货每一片Wafer经过了哪些工序、在哪些设备上加工、用了什么Recipe、测试结果如何——这些信息必须完整记录才能支撑良率分析和质量追溯。当客户投诉某批次产品存在质量问题时MES系统需要在几分钟内追溯出这批产品用了哪批晶圆、在什么时间经过了哪些设备、当时的工艺参数是什么。这就是Genealogy族谱追溯的价值。本文从数据模型、WaferID管理、追溯链路设计三个维度拆解封测MES批次追溯的实现方案。文章也会结合益普科技SiFactory平台在封测产线中的追溯模块设计经验标注实际工程中的关键决策点。一、追溯数据模型1.1 核心实体关系封测MES追溯涉及的核心实体Lot (批次)├── Wafer (晶圆)│ ├── ProcessStep (工序记录)│ │ ├── Equipment (加工设备)│ │ ├── Recipe (工艺配方)│ │ └── TestData (测试数据)│ │ ├── DieResult (芯片级结果)│ │ │ ├── X坐标│ │ │ ├── Y坐标│ │ │ └── Binning (分级)│ │ └── ParameterLog (参数日志)│ └── SplitMergeHistory (拆合批历史)└── Material (物料关联)├── Substrate (基板)├── Die (芯片来源)└── Wire (金线)1.2 数据库表设计以PostgreSQL为例核心表结构-- 批次表CREATE TABLE mes_lot (lot_id VARCHAR(32) PRIMARY KEY,lot_type VARCHAR(16) NOT NULL, -- Production/Engineering/Retestproduct_id VARCHAR(32) NOT NULL,customer_id VARCHAR(32),wafer_qty INTEGER NOT NULL,status VARCHAR(16) NOT NULL, -- Waiting/Running/Completed/Holdstart_time TIMESTAMP,complete_time TIMESTAMP,parent_lot_id VARCHAR(32), -- 拆批来源create_time TIMESTAMP DEFAULT NOW());-- Wafer表CREATE TABLE mes_wafer (wafer_id VARCHAR(32) PRIMARY KEY,lot_id VARCHAR(32) NOT NULL REFERENCES mes_lot(lot_id),slot_no INTEGER NOT NULL, -- 晶圆盒中的槽位wafer_number VARCHAR(8), -- W01-W25status VARCHAR(16) NOT NULL,current_step VARCHAR(32), -- 当前工序bin_summary JSONB, -- Binning汇总 {Pass:18000,Fail:234}create_time TIMESTAMP DEFAULT NOW());-- 工序记录表CREATE TABLE mes_process_step (step_id BIGSERIAL PRIMARY KEY,wafer_id VARCHAR(32) NOT NULL REFERENCES mes_wafer(wafer_id),operation_no VARCHAR(16) NOT NULL, -- 工序号 10/20/30...operation_name VARCHAR(64) NOT NULL, -- 工序名称equipment_id VARCHAR(32) NOT NULL,recipe_id VARCHAR(64) NOT NULL,operator_id VARCHAR(16),start_time TIMESTAMP NOT NULL,end_time TIMESTAMP,status VARCHAR(16) NOT NULL, -- Running/Pass/Fail/Scrappass_count INTEGER DEFAULT 0,fail_count INTEGER DEFAULT 0);-- 芯片级测试结果表分区表按月分区CREATE TABLE mes_die_result (result_id BIGSERIAL,step_id BIGINT NOT NULL REFERENCES mes_process_step(step_id),wafer_id VARCHAR(32) NOT NULL,die_x SMALLINT NOT NULL, -- X坐标die_y SMALLINT NOT NULL, -- Y坐标bin_code VARCHAR(8) NOT NULL, -- Binning代码 1/2/3...test_time_ms INTEGER, -- 单颗测试耗时test_date DATE NOT NULL,PRIMARY KEY (result_id, test_date)) PARTITION BY RANGE (test_date);芯片级测试数据量大一片Wafer可能有上万颗Die必须用分区表否则查询和写入都会成为瓶颈。二、WaferID管理2.1 WaferID编码规则WaferID是追溯链的起点必须全局唯一且可识别。常见编码规则格式[工厂代码][年月日][流水号][Wafer序号]示例SZ2607170001W03SZ - 工厂代码深圳260717 - 日期2026年7月17日0001 - 当日流水号W03 - 晶圆盒中第3片代码实现from datetime import datetimeclass WaferIDGenerator:def __init__(self, factory_code, sequence_key):self.factory_code factory_codeself.sequence_key sequence_key # Redis key for daily counterdef generate(self, wafer_number):生成WaferIDtoday datetime.now().strftime(%y%m%d)# 从Redis获取当日流水号原子递增import redisr redis.Redis()seq r.incr(f{self.sequence_key}:{today})wafer_id f{self.factory_code}{today}{seq:04d}{wafer_number}return wafer_iddef parse(self, wafer_id):解析WaferIDreturn {factory: wafer_id[0:2],date: wafer_id[2:8],sequence: int(wafer_id[8:12]),wafer_no: wafer_id[12:]}2.2 二维码与RFID物理层面WaferID需要通过载体与物理Wafer关联二维码激光打标在Wafer边缘设备通过读码器识别RFID晶圆盒内置RFID标签存储盒内所有WaferID设备端的读码流程1. 操作员将晶圆盒放入设备2. 设备读取RFID获取盒内Wafer列表3. 机械手取片前读码器扫描二维码验证WaferID4. EAP将WaferID上报MES系统5. MES校验WaferID与工单匹配性6. 匹配通过后设备开始加工三、追溯链路设计3.1 正向追溯正向追溯从原材料到成品追踪所有加工路径。def forward_trace(lot_id):正向追溯批次 → Wafer → 工序 → 测试结果lot db.query(SELECT * FROM mes_lot WHERE lot_id %s, lot_id)wafers db.query(SELECT * FROM mes_wafer WHERE lot_id %s ORDER BY slot_no, lot_id)result {lot: lot,wafers: []}for wafer in wafers:steps db.query(SELECT ps.*, e.equipment_nameFROM mes_process_step psJOIN mes_equipment e ON ps.equipment_id e.equipment_idWHERE ps.wafer_id %sORDER BY ps.operation_no,wafer[wafer_id])wafer_detail {wafer_id: wafer[wafer_id],status: wafer[status],steps: []}for step in steps:die_count db.query(SELECT bin_code, COUNT(*) as cnt FROM mes_die_result WHERE step_id %s GROUP BY bin_code,step[step_id])wafer_detail[steps].append({operation: step[operation_name],equipment: step[equipment_name],recipe: step[recipe_id],start: step[start_time],end: step[end_time],status: step[status],binning: die_count})result[wafers].append(wafer_detail)return result3.2 逆向追溯逆向追溯从成品追溯到原材料用于质量问题排查。典型场景客户反馈某批产品失效需要追溯该批次用了哪些晶圆、加工过程中有没有异常。def backward_trace(product_lot_id):逆向追溯成品批次 → 加工设备 → 晶圆来源 → 异常事件# 1. 获取成品批次的所有Waferwafers db.query(SELECT * FROM mes_wafer WHERE lot_id %s, product_lot_id)trace_result {product_lot: product_lot_id, wafers: []}for wafer in wafers:wafer_trace {wafer_id: wafer[wafer_id]}# 2. 查询所有加工工序steps db.query(SELECT * FROM mes_process_stepWHERE wafer_id %s AND status ! PassORDER BY start_time,wafer[wafer_id])# 3. 找出有异常的工序anomalies []for step in steps:if step[status] in (Fail, Scrap):anomalies.append({step: step[operation_name],equipment: step[equipment_id],status: step[status],time: step[start_time]})# 4. 查询该Wafer加工期间的设备报警for step in steps:alarms db.query(SELECT * FROM mes_alarm_logWHERE equipment_id %sAND alarm_time BETWEEN %s AND %sORDER BY alarm_time,step[equipment_id],step[start_time],step[end_time])if alarms:anomalies.extend([{type: alarm,equipment: a[equipment_id],code: a[alarm_code],text: a[alarm_text],time: a[alarm_time]} for a in alarms])wafer_trace[anomalies] anomalies# 5. 追溯晶圆来源拆合批历史source db.query(SELECT parent_lot_id FROM mes_lot WHERE lot_id %s,wafer[lot_id])if source and source[0][parent_lot_id]:wafer_trace[source_lot] source[0][parent_lot_id]trace_result[wafers].append(wafer_trace)return trace_result3.3 Genealogy族谱查询Genealogy追溯是正向和逆向的结合——从任意节点出发向上追溯所有上游来源向下追溯所有下游去向。原材料批次 A ──→ 加工批次 X ──→ 半成品批次 M ──→ 成品批次 Z原材料批次 B ──→ 加工批次 Y ──→ 半成品批次 M ──→ 成品批次 Z──→ 成品批次 W原材料批次 C ──→ 加工批次 Y实现Genealogy需要记录每个批次的父批次和子批次关系。在封测中主要的拆合批操作Split一个批次拆成两个子批次如返工批和正常批Merge两个批次合并成一个批次如多批晶圆合并到一起封装-- 拆合批关系表CREATE TABLE mes_split_merge_log (log_id BIGSERIAL PRIMARY KEY,operation_type VARCHAR(8) NOT NULL, -- SPLIT/MERGEsource_lot_ids TEXT[] NOT NULL, -- 源批次列表target_lot_id VARCHAR(32) NOT NULL, -- 目标批次operation_time TIMESTAMP NOT NULL,operator_id VARCHAR(16) NOT NULL,reason_code VARCHAR(32) -- 拆合批原因);四、性能优化4.1 测试数据查询优化芯片级测试数据量大查询时必须注意-- ❌ 错误全表扫描SELECT * FROM mes_die_resultWHERE wafer_id SZ2607170001W03;-- ✅ 正确带日期分区键SELECT bin_code, COUNT(*) FROM mes_die_resultWHERE wafer_id SZ2607170001W03AND test_date BETWEEN 2026-07-17 AND 2026-07-20GROUP BY bin_code;-- ✅ 正确先查工序ID再查测试数据WITH target_steps AS (SELECT step_id FROM mes_process_stepWHERE wafer_id SZ2607170001W03)SELECT d.bin_code, COUNT(*)FROM mes_die_result dWHERE d.step_id IN (SELECT step_id FROM target_steps)GROUP BY d.bin_code;4.2 追溯结果缓存完整追溯涉及多表关联查询耗时可能较长。建议对追溯结果做缓存import jsonimport redisdef get_trace_with_cache(lot_id, trace_typeforward):cache_key ftrace:{trace_type}:{lot_id}r redis.Redis()# 先查缓存cached r.get(cache_key)if cached:return json.loads(cached)# 缓存不存在执行查询if trace_type forward:result forward_trace(lot_id)else:result backward_trace(lot_id)# 缓存1小时追溯数据不变时可复用r.setex(cache_key, 3600, json.dumps(result, defaultstr))return result五、系统选型考量批次追溯系统的设计需要考虑产线规模、追溯精度要求和数据保留周期。如果封测产线设备种类多、追溯粒度要求到芯片级从零开发的成本和风险都很高——光是数据一致性、分区表性能调优、追溯查询优化这些细节就需要大量工程积累。这种情况下选择有半导体行业经验的mes厂家合作是更高效的选择。以益普科技SiFactory平台为例其追溯模块实现了Lot→Wafer→ProcessStep→DieResult的全链路数据模型支持正向追溯、逆向追溯和Genealogy族谱查询三种模式。在国星光电封测产线的实际部署中SiFactory追溯系统支撑了芯片级Die数据的秒级查询同时与QMS模块联动实现质量异常的自动追溯和根因分析。在评估半导体mes厂家的追溯能力时建议重点关注几个维度是否支持芯片级追溯精度、Die数据量百万级时的查询性能、拆合批Genealogy的完整性、以及追溯数据与质量管理的联动能力。更多半导体mes厂家的方案对比可以参考这个选型页面。六、总结封测MES批次追溯的核心设计要点WaferID全局唯一编码规则清晰物理载体可靠二维码RFID数据模型分层Lot → Wafer → ProcessStep → DieResult芯片级数据分区存储双向追溯正向原材料→成品 逆向成品→原材料全覆盖Genealogy记录拆合批操作完整记录支撑任意节点追溯性能优化分区表缓存分步查询避免大表全扫描追溯系统的价值不在于平时而在于出问题时能快速定位根因。一个设计良好的追溯系统可以在几分钟内完成从客户投诉到根因定位的全过程。对于正在选型的团队半导体mes厂家的追溯模块成熟度是一个核心评估指标——有实际封测产线落地经验的厂家在数据模型设计和性能优化上会有明显优势。欢迎在评论区交流封测追溯系统设计中的实际经验和问题。