4. 工单数据模型设计
工单不是一张“大表”,而是一组围绕生产执行逐步展开的对象集合。MES 中一个工单从下达到完工,会同时牵动工序、物料、工艺路线、资源需求、状态与版本六类信息。如果把它们全部塞进一张宽表,字段会迅速膨胀到上百列,且不同产品、不同工艺的差异只能靠大量空字段和特殊判断来兼容。可扩展的工单对象模型,核心思路是:把工单拆成“主数据 + 明细结构 + 状态与版本”三层,用稳定的主键和引用关系把变化隔离在各自的边界内。
一、工单主数据:稳定标识与业务属性分离
工单主数据承担“这个工单是谁、要做什么、做多少”的职责。建议至少包含以下字段:
| 字段 | 示例值 | 说明 |
|---|---|---|
| work_order_id | WO-20240612-0017 | 系统内唯一主键,不可变 |
| order_no | MO20240612017 | 业务单号,可读、可追溯 |
| material_code | FG-A1001 | 产出物料编码 |
| plan_qty | 1200 | 计划数量 |
| uom | PCS | 计量单位 |
| route_id | RT-A1001-V3 | 引用的工艺路线版本 |
| bom_id | BOM-A1001-V5 | 引用的物料清单版本 |
| status | RELEASED | 当前状态 |
| version | 2 | 工单自身版本号 |
关键设计原则是:主数据只放“不随执行过程频繁变化”的字段。实际产出数量、报废数量、当前工序进度等动态数据,应放在执行记录或工序实例中,而不是反复更新主表。这样主表更新频率低,锁竞争小,历史追溯也更清晰。
二、工序与工艺路线:把“怎么做”结构化
工艺路线描述从原材料到成品的加工顺序,工序是路线上的节点。一个可扩展的工序对象通常包含:工序号、工序名称、工作中心、标准工时、前置工序、是否关键工序、检验要求。例如:
route_id: RT-A1001-V3
op_seq: 10 op_name: 下料 work_center: WC-CUT-01 std_time: 0.5 min/pcs
op_seq: 20 op_name: 冲压 work_center: WC-PRS-02 std_time: 1.2 min/pcs
op_seq: 30 op_name: 焊接 work_center: WC-WLD-01 std_time: 2.0 min/pcs
op_seq: 40 op_name: 检验 work_center: QC-01 std_time: 0.8 min/pcs
工序之间通过 op_seq 和 pre_op_seq 建立有向依赖,而不是靠数组下标隐式表达。这样在插入临时工序、并行工序或返修工序时,不需要重排整个列表,只需新增节点并调整引用。工艺路线本身应带版本号,工单引用的是“路线版本”而非“路线名称”,这是后续版本控制的基础。
三、物料清单与资源需求:输入与能力的双向约束
物料清单(BOM)回答“每个工单需要消耗什么、消耗多少”。在工单对象模型中,BOM 不应直接复制到工单主表,而应通过 bom_id 引用,并在工单下达时生成一份工单级物料需求快照。快照记录:物料编码、单位用量、计划用量、已发料量、已消耗量。这样即使 BOM 后续升版,已下达工单仍按原快照执行,避免“中途换料”导致的数量混乱。
资源需求则回答“需要什么设备、模具、人员或能源”。它通常与工序绑定,字段包括:资源类型、资源编码、需求数量、占用时长、是否可替代。资源需求与工序是多对多关系,因此应独立成表,用 op_seq + resource_id 作为联合引用,而不是在工序表里堆叠多个资源字段。
四、状态机:用显式迁移约束执行路径
工单状态不能靠一个 status 字段随意赋值,而应定义明确的状态集合与合法迁移。推荐状态集合:DRAFT → RELEASED → IN_PROGRESS → PAUSED → COMPLETED → CLOSED,并允许 IN_PROGRESS → CANCELLED。每次状态变更都应记录:原状态、目标状态、操作人、时间戳、原因码。这样状态机既是控制逻辑,也是审计线索。
五、版本控制:让“变更”不破坏“已执行”
版本控制要解决三个问题:工艺路线升版后,已下达工单是否跟着变?BOM 换料后,已发料工单如何追溯?工单自身修改数量或交期后,如何保留历史?推荐做法是:路线和 BOM 各自独立版本化,工单引用具体版本号;工单自身也保留版本号,每次关键字段变更生成新版本记录,旧版本只读。
例如,工单 WO-20240612-0017 初始引用 RT-A1001-V3。当工艺部门发布 RT-A1001-V4 时,该工单仍按 V3 执行,除非计划员显式执行“升版”操作。升版时系统生成工单版本 2,记录新路线版本、变更人、变更时间和原因。这样既支持工程变更,又不会让在制品突然“换工艺”。
六、可扩展性的落地检查
判断一个工单对象模型是否可扩展,可以用四个问题检验:新增一种资源类型,是否需要改主表?新增一道临时工序,是否需要重排已有工序号?BOM 升版后,已下达工单是否仍能按原快照追溯?状态新增一个“待料暂停”,是否只需增加迁移规则而不改业务代码?如果答案都是“不需要大改”,模型就具备了工程可用的扩展性。
最后需要强调,工单对象模型不是一次设计完就固定不变的。随着产线增加、工艺变化、质量追溯要求提高,模型需要定期评审。评审的重点不是“字段够不够多”,而是“变化是否被隔离在正确的边界内”。主数据稳定、结构明细可扩展、状态与版本可追溯,这三条同时成立,工单才能真正支撑 MES 的执行闭环。