这周收到一个半导体产线 MES 系统的二次开发需求,即,增加一个 Hold 信息报表,展示预 Hold、在制 Hold、解 Hold 信息,信息展示包括时间、人、Hold 原因、解 Hold 解释、Hold 状态、类型等。
我大概理解是什么是 Hold 状态,但是这个预 Hold 又是什么呢?我查了一下。
Hold 状态
在 MES(制造执行系统)里,Hold 通常翻译为 “冻结”、“锁定”或“留置”,我们这里叫“在制 Hold”。可以理解为:给一个批次或单个产品贴上“暂停流转”的标签。即,把产品挡在当前工序,阻止其继续生产、检验或发货。核心目的:在不确定产品状态时,防止不良品继续生产、减少损失,并争取决策时间。
举个例子,在我们的系统中,当某个工序站点的良率低于设定的阈值 98% 时,系统会自动生成一条 Event 事件,类型为 Hold,原因类型为 “出站良率低于设定值”。这个时候,这个批次就进入了 Hold 状态,无法继续流转到下一个工序站点,直到这个 Hold 状态被解除。
Hold 的典型应用场景
- 质量异常:过程参数超差、SPC 报警、QC 抽样发现不良趋势。
- 设备问题:设备故障可能已影响该批次产品质量。
- 材料疑虑:怀疑原料用错或有效成分过期。
- 等待检验:生产完成但检验结果未出(先 Hold 住,合格再放行)。
- 人为触发的待判定:操作员或主管发现螺丝松动、外观异常等,主动冻结。
- 系统规则触发:系统自动判断某物料已过期,直接置为 Hold。
预 Hold 状态
即,Pre Hold, 翻译为预冻结 / 预留置。在数据库中的状态字段可能是 Hold_P 之类的缩写。是在正式 Hold 之前的一种过渡性、预警性状态。它的核心作用是:在最终判定质量异常之前,先把物料“软锁定”起来,避免它继续流转,同时等待进一步检验或评审。可以把 Pre-Hold 理解为一种 “软冻结”(Soft Lock),而正式的 Hold 是 “硬冻结”(Hard Lock)。
我疑惑的点是,在我们的 MES 系统中,近 2000 个 Hold 状态,但是只有 2 个 Pre Hold 状态。而且看起来是第一次部署验收系统时的测试数据。感觉是使用人员对 Pre Hold 的概念没有理解正确。上面提到的系统自动将良率低于设定值的批次置为 Hold 状态,从概念上看应该是先置为 Pre Hold 状态,等待人工评审后再置为正式的 Hold 状态。我昨天特意问了一下产线人员,他们说直接设置为 Hold 状态,没有问题。我这里存疑。
这里有个对比表格,非常直观:

实际应用示例,场景:汽车零部件压铸工序
- 设备每生产 10 个产品,自动抽检 1 个测量尺寸。
- 测到某个尺寸接近上公差(99% 规格限)→ MES 自动对该批次(如最近生产的 50 个)打 Pre-Hold。
- 同时在车间大屏和质检员手机上推送消息:“#2310 批次尺寸偏上限,请复测”。
- 质检员 10 分钟内复测 5 个产品,数据均合格 → 一键释放 Pre-Hold,批次继续流转。
- 如果复测发现 2 个超差 → 点击“转为 Hold”,QA 启动不合格品处理流程。
- 没有 Pre-Hold 的情况:系统直接打正式 Hold → 必须走评审会议、填写处置单,浪费时间。有了 Pre-Hold,大部分虚惊一场的情况可以快速恢复。
解 Hold
即,Release Hold, 放行。QA 或主管对 Hold 批次做评审,有几种处理方式:
- Release(放行):判定合格,恢复流转。
- Scrap(报废):判定报废,冻结后转入报废流程。
- Rework(返工):需进行返工,先生成返工单,再解除 Hold。
对应的批次事件状态,即 Release 状态。
一些奇怪的流转记录
因为要实现这个 Hold 信息报表的前端展示,我担心数据并非跟我想象的一致,即,一条 Hold / Pre Hold 对应一条 Release 记录。如果不是一一对应的关系,我就无法通过 table 的一行来同时展示 Hold 和 Release 的信息了。所以,我特意查询了一下数据库,发现有一些奇怪的流转记录:
- 某个 lot 批次站点,出现了 3 轮 Hold / Release 的反复记录。即,Hold → Release → Hold → Release → Hold → Release。
- 另一个 lot 批次站点,出现了 Hold → Hold → Release。看起来是第一条 Hold 是系统自动标记的,然后操作员在解除 Hold 时,误操作又点击了 Hold 按钮,导致又多了一条 Hold 记录。
- 还有的时两轮 Hold / Release 反复记录
- 系统 Hold 时,只自动标注了原因类型,例如良率低于设定值,但没有标注事件说明。即,具体不良的原因。而是在 Release 的时候,才在事件说明里标注了具体的原因,例如,来料不良。可以理解为第一次 Hold 为系统自动判断,没有标记原因;而 Release 时是人工评审的结果,所以才标注了具体的原因。
总体看上去,Hold 相关的功能,目前的使用人员还没有一套规范,导致数据看起来很奇怪。估计这也是找我开发这个 Hold 信息报表的原因吧。
关于作者 🌱
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式