4. MES系统功能架构与数据模型
在《生产领料退料与MES协同工程》中,MES不是一张“功能菜单的集合”,而是一套围绕事务数据运转的执行系统。领料、退料、倒冲、报废、调拨,本质上都是对库存与工单关系的“记账”。如果数据模型设计得含糊,功能界面再漂亮,账也永远对不上。本节从功能架构入手,逐层拆解工单、物料、库存、批次、序列号与事务这六类核心数据对象,并说明它们如何通过事务模型咬合在一起。
一、功能架构:从执行层到事务层
MES的功能架构通常可以划分为四层:执行层(工单派工、报工、领退料操作)、事务层(库存事务、批次事务、序列号事务)、模型层(物料主数据、BOM、工艺路线、库存组织)与集成层(与ERP、WMS、设备接口)。其中事务层是MES区别于普通报表系统的关键:它保证每一次物料移动都有“谁、在哪个工单、从哪个库位、到哪个库位、多少数量、哪个批次、什么时间、什么原因”的完整记录。
功能架构与数据模型是同一件事的两面。功能决定“能做什么”,数据模型决定“做完之后留下什么”。领料退料场景中,最常出问题的不是按钮点不动,而是事务记录缺少批次或工单维度,导致后续无法追溯、无法倒冲、无法对账。
二、工单:事务的“容器”
工单是MES中最重要的业务对象,它把“要生产什么、生产多少、用什么料、在哪个产线”固定下来。工单主数据通常包含:工单号、物料编码、计划数量、已完工数量、状态(下达/开工/完工/关闭)、产线、计划起止时间。领退料事务必须挂在工单号下,否则无法计算工单的实际耗料与损耗。
工单与物料的关系通过BOM展开。例如工单WO-20240612-001生产成品FG-A,计划1000件,BOM中每件需要原料RM-B 2.5kg、辅料RM-C 0.1kg。系统据此计算理论需求:RM-B 2500kg、RM-C 100kg。领料时按理论需求发放,退料时按实际剩余退回,两者之差就是工单的实际消耗。这个“理论—实发—实退—实耗”的链条,是后续差异分析的基础。
三、物料、库存与批次:三个不同粒度的对象
物料是“是什么”,库存是“在哪里、有多少”,批次是“这一批从哪来、到哪去”。三者不能混为一谈。物料主数据定义编码、名称、规格、单位、是否批次管理、是否序列号管理;库存记录定义物料在某个库位上的可用量、锁定量、在途量;批次记录定义同一物料不同生产批的区分,包含批次号、生产日期、供应商、有效期、质检状态。
在领退料场景中,批次是追溯的关键。假设RM-B有两个批次:B240601(供应商A,有效期2024-12-01)和B240605(供应商B,有效期2024-11-15)。如果领料时不指定批次,系统按先进先出(FIFO)自动分配,可能先出B240601。但如果生产订单有客户指定要求,就必须手工指定批次。退料时同样要记录退回的是哪个批次,否则批次库存会出现“有数量、无来源”的脏数据。
四、序列号:单件级追溯
序列号是比批次更细的粒度,用于单台、单件、单板级的追溯。典型场景包括:电子产品的主板、汽车零部件、医疗器械。序列号管理的物料,每一次领料都要扫描序列号,系统记录该序列号从入库、领料、装配到成品下线的完整路径。
序列号与批次的关系是:批次是“一批”,序列号是“一件”。一个批次可以包含多个序列号,但一个序列号只能属于一个批次。在MES数据模型中,序列号表通常包含:序列号、物料编码、批次号、当前状态(在库/已领/已装配/已报废)、当前位置、关联工单。领料时扫描序列号,系统校验其状态是否为“在库”,校验通过后才允许过账。
五、事务数据模型:把动作变成可追溯的记录
事务模型是MES数据模型的核心。一次领料操作,在数据库中不是“修改库存数量”这么简单,而是生成一条事务头加若干事务行。事务头记录事务号、事务类型(领料/退料/倒冲/报废/调拨)、工单号、操作人、时间戳、状态;事务行记录物料编码、数量、批次号、序列号、来源库位、去向库位。
以领料为例,事务类型为ISSUE,来源库位为原料仓A-01,去向库位为线边仓L-03,工单号为WO-20240612-001。过账后,系统同时更新库存表:原料仓A-01的RM-B减少2500kg,线边仓L-03的RM-B增加2500kg。如果后续发生退料,事务类型为RETURN,方向相反,来源为线边仓,去向为原料仓,数量为实际退回量。
事务模型的价值在于不可篡改与可冲销。已过账的事务不能直接删除,只能通过反向事务冲销。这样任何一次库存变化都有据可查,审计时能还原出完整的物料流动路径。
六、六类对象的咬合关系
把六类对象放在一起看:工单是容器,物料是内容,库存是位置,批次是来源,序列号是单件身份,事务是连接它们的“胶水”。一次领料事务,同时引用工单号、物料编码、来源库位、去向库位、批次号和序列号。缺少任何一个维度,追溯链就会断裂。
| 数据对象 | 关键字段 | 在领退料中的作用 |
|---|---|---|
| 工单 | 工单号、物料、计划量、状态 | 绑定领退料归属,计算理论需求 |
| 物料 | 物料编码、单位、批次/序列号标识 | 确定是否需批次或序列号管理 |
| 库存 | 物料、库位、可用量、锁定量 | 校验领料是否超可用库存 |
| 批次 | 批次号、供应商、有效期、质检状态 | FIFO分配与追溯 |
| 序列号 | 序列号、状态、当前位置、工单 | 单件级领料校验与装配追溯 |
| 事务 | 事务号、类型、来源、去向、数量 | 记录每一次物料移动,支持冲销 |
七、实操示例:一次领料的事务生成过程
假设工单WO-20240612-001需要领用RM-B 2500kg,仓库按FIFO分配批次B240601 2000kg、B240605 500kg。操作员在MES中执行领料,系统生成如下事务记录(示例数据):
事务头:
事务号:TXN-20240612-0007
类型:ISSUE(领料)
工单号:WO-20240612-001
操作人:张工
时间:2024-06-12 09:15:32
状态:已过账
事务行1:
物料:RM-B
数量:2000 kg
批次:B240601
来源库位:原料仓A-01
去向库位:线边仓L-03
事务行2:
物料:RM-B
数量:500 kg
批次:B240605
来源库位:原料仓A-01
去向库位:线边仓L-03
过账后,库存变化为:原料仓A-01的RM-B减少2500kg,线边仓L-03的RM-B增加2500kg。批次库存同步更新:B240601减少2000kg,B240605减少500kg。如果后续发现其中500kg未使用,执行退料,系统生成反向事务,批次B240605的500kg从线边仓退回原料仓,库存恢复。
八、数据模型设计的三条底线
第一,事务不可覆盖。库存数量是事务的累计结果,不是独立维护的字段。任何直接改库存数量的做法都会破坏可追溯性。第二,批次与序列号必须贯穿始终。从入库、领料、退料到成品下线,批次号不能断链。第三,工单维度不可缺失。领退料事务必须挂工单,否则无法计算工单实际耗料,也无法做差异分析。
理解这六类对象及其咬合关系,是后续设计领退料流程、配置MES事务类型、排查库存差异的基础。数据模型清晰了,功能实现才有稳固的地基。