2. MES工艺路线数据模型解析

在MES系统中,工艺路线不是一张“工序清单”,而是一套以工艺路线版本为根、向下挂接工序、工步、资源与物料约束的树状数据模型。迁移失败往往不是数据搬不过去,而是没有识别出实体之间的主外键依赖与版本归属关系。理解这套模型,是后续做迁移映射、切换验证和回滚设计的前提。

一、核心实体的层级与主键约定

典型MES工艺路线模型包含六类核心实体,它们通过业务主键而非数据库自增ID建立关联,迁移时必须保留业务主键的稳定性:

  • 工艺路线(Routing):业务主键通常为 RoutingCode + Version,例如 RT-ASM-001 / V2。它绑定物料编码、工厂、有效期,是迁移的顶层对象。
  • 工序(Operation):主键为 RoutingCode + Version + OpSeq,如 OpSeq=20。工序定义工作中心、标准工时、报工方式、是否关键工序。
  • 工步(Step):主键为 OpSeq + StepSeq,如 20-01。工步是操作级指令,承载参数、检验点、设备程序号。
  • 资源(Resource):包括设备、工装、人员技能,通过 ResourceType + ResourceCode 关联到工序或工步。
  • BOM与物料清单:BOM是产品结构,物料清单是BOM在具体版本下的展开结果。工序与物料的关联通过投料点(Issue Point)表达,即某物料在哪道工序投入。
  • 工艺路线版本:控制生效日期与状态(草稿/发布/冻结),迁移时需明确目标版本。

这六类实体的关系可以用下面的结构图表示。注意:工序与物料之间不是直接外键,而是通过投料点这一关联实体连接,这是迁移中最容易丢失的中间层。

工艺路线 Routing RoutingCode + Version + 工厂 + 有效期 工艺路线版本 状态:草稿/发布/冻结 工序 Operation OpSeq + 工作中心 + 标准工时 + 报工方式 关键工序标识 / 检验要求 1 : N 工步 Step StepSeq + 参数 + 设备程序号 检验点 / 采集项 / 防错规则 1 : N 资源 Resource 设备 / 工装 / 人员技能 ResourceType + Code 绑定 BOM 产品结构 父件 + 子件 + 用量 + 损耗率 BOM版本 + 生效日期 物料清单 BOM展开结果 + 物料编码 替代料组 + 批次要求 展开 投料点 Issue Point OpSeq + 物料编码 + 用量 + 投料方式 倒冲 / 扫描 / 手工确认 关联 引用 迁移核心实体 Routing / Operation / Step Resource / IssuePoint / BOM 图例 层级包含(1:N) 业务引用/绑定 迁移范围标注

二、关联关系中的三个关键约束

第一,工序与物料的关联必须落在投料点上。很多迁移方案只搬了BOM和工序,却漏掉投料点,导致切换后系统不知道“这个螺丝在哪道工序装”。投料点的业务主键是 RoutingCode + Version + OpSeq + MaterialCode,迁移时要与工序、物料清单双向核对。

第二,资源绑定存在工序级与工步级两种粒度。工序级资源表示“这道工序需要某类设备”,工步级资源表示“这个动作必须用某台具体设备或某个程序号”。迁移时若把工步级资源降级为工序级,会丢失设备程序号,切换后首件就可能报错。

第三,BOM版本与工艺路线版本必须成对迁移。BOM版本决定物料清单展开结果,工艺路线版本决定工序顺序。两者版本不匹配时,投料点引用的物料可能在目标BOM中不存在。建议在迁移前建立版本配对表,例如 RT-ASM-001/V2 ↔ BOM-ASM-001/V3。

三、迁移涉及的核心数据实体清单

从迁移工程角度,需要按依赖顺序处理以下实体。下表给出实体、业务主键、依赖对象和迁移注意点,可直接作为迁移范围核对表使用:

实体 业务主键 依赖对象 迁移注意点
工艺路线 RoutingCode + Version 物料编码、工厂 先确认目标工厂是否存在该物料
工序 RoutingCode + Version + OpSeq 工艺路线、工作中心 工作中心编码需在目标系统存在
工步 OpSeq + StepSeq 工序、设备程序号 程序号需与设备主数据对齐
资源绑定 ResourceType + ResourceCode + OpSeq 工序/工步、资源主数据 区分工序级与工步级,不可降级
BOM BOMCode + Version 父件、子件物料 与工艺路线版本配对迁移
物料清单 BOMCode + Version + MaterialCode BOM、物料主数据 替代料组需完整保留
投料点 RoutingCode + Version + OpSeq + MaterialCode 工序、物料清单 最易遗漏,需双向核对

四、一个可执行的迁移前核对示例

假设要把 RT-ASM-001/V2 从测试环境迁移到生产环境,目标BOM为 BOM-ASM-001/V3。迁移前可按以下顺序做一次依赖核对,示例参数如下:

-- 示例:核对投料点引用的物料是否都在目标BOM中
SELECT ip.OpSeq, ip.MaterialCode, bm.MaterialCode AS BomMaterial
FROM IssuePoint ip
LEFT JOIN BomMaterial bm
  ON bm.BomCode = 'BOM-ASM-001'
 AND bm.Version = 'V3'
 AND bm.MaterialCode = ip.MaterialCode
WHERE ip.RoutingCode = 'RT-ASM-001'
  AND ip.Version = 'V2'
  AND bm.MaterialCode IS NULL;

-- 预期结果:返回0行,表示投料点物料全部命中目标BOM
-- 若返回非空,则这些物料需要先补入目标BOM或调整投料点

核对通过后,再按“工艺路线 → 工序 → 工步 → 资源绑定 → BOM → 物料清单 → 投料点”的顺序写入目标系统。每写入一层,用业务主键回查一次,确认父子关系完整。例如写入工序后,执行 SELECT COUNT(*) FROM Operation WHERE RoutingCode='RT-ASM-001' AND Version='V2',与源系统数量比对。

迁移顺序不能颠倒:投料点依赖工序和物料清单,物料清单依赖BOM,BOM又依赖物料主数据。先建主数据,再建结构,最后建关联,可以避免大量外键悬挂。
不要用数据库自增ID做迁移映射。MES中工艺路线的业务主键是 RoutingCode + Version,自增ID在源库和目标库必然不同。迁移映射表应以业务主键为键,否则回滚时无法定位原对象。

理解这套模型后,后续的迁移映射、切换验证和回滚设计就有了统一的坐标:任何一条数据都能回答“它属于哪个工艺路线版本、挂在哪道工序、引用哪个物料清单条目”。这也是判断迁移是否完整的最终依据。