3. 车间现场对象建模

MES 工单与设备状态联动的第一步,不是写接口,而是把车间现场"翻译"成一套可被系统识别、可被工单引用的对象模型。如果对象模型建得含糊,后面所有联动逻辑都会变成"猜":工单到底占用哪台设备、设备停机时哪些工单受影响、人员换班后责任归属谁,都说不清楚。本节围绕对象层级、对象关系、工单与设备的关联结构三件事展开,并给出一份可直接参考的建模样例。

一、对象层级:从物理位置到可执行单元

车间对象建模通常分两层理解:物理位置层和执行单元层。物理位置层描述"东西在哪里",执行单元层描述"活在哪里干"。

物理位置层一般是:车间 → 产线 → 工位。产线是物流与节拍的载体,工位是人员、设备、物料的汇聚点。执行单元层则是:工序 → 设备 → 工装/模具。工序是工艺路线上的一道加工步骤,设备是完成该工序的物理资源,工装/模具是设备上可更换的适配件。

两层之间通过"工位—设备"绑定关系连接:一个工位可以安装一台或多台设备,一台设备也可以在不同时段服务于不同工位(例如移动式检测仪)。因此,工位与设备之间是多对多关系,且带时间有效性。这一点在建模时最容易被忽略,却直接决定工单派工时能否正确解析出"当前可用设备"。

物料与人员则作为"资源"挂接到执行单元上:物料按批次(Lot)或序列号(SN)绑定到工单,人员按班组(Shift)和技能资质(Skill)绑定到工位。人员不是简单挂在产线上,而是挂在"工位—班次"这个组合上,因为同一工位不同班次可能是不同的人。

二、对象关系:谁引用谁,谁约束谁

对象之间不是简单的树,而是"树 + 交叉引用"的混合结构。核心关系可以归纳为四类:

  • 归属关系:产线归属车间,工位归属产线,设备归属产线(或设备组),这是层级树。
  • 绑定关系:工位绑定设备、工位绑定人员、工位绑定物料暂存区,这是带时间窗的多对多关系。
  • 工艺关系:工序定义在工艺路线上,工序指定设备类型或具体设备,工单按工艺路线展开为工序任务。
  • 执行关系:工单任务引用工序、工位、设备、物料批次、人员,形成一条可追溯的执行记录。

其中最关键的是工艺关系与执行关系的衔接。工艺路线上的工序通常只指定"设备类型"(如"注塑机 80T~120T"),而工单派工时必须落到"具体设备"(如"注塑机 #3")。这个从类型到实例的解析过程,就是工单与设备关联的核心动作。

三、工单与设备关联的数据结构设计

工单与设备的关系不能只用一个 equipment_id 字段草草了事,因为实际生产中会出现:一台设备同时被多个工单争用、工单执行中途换设备、设备维修期间工单挂起、同一工单多道工序使用不同设备。建议采用"工单—工序任务—设备占用"三层结构:

WorkOrder(工单)
  wo_id, product_code, qty, route_id, status, plan_start, plan_end

WoOperation(工单工序任务)
  wo_op_id, wo_id, seq_no, operation_id, required_equip_type,
  assigned_equip_id, assigned_station_id, status, actual_start, actual_end

EquipOccupation(设备占用记录)
  occ_id, wo_op_id, equip_id, occupy_start, occupy_end,
  occupy_type(计划/实际), release_reason

这样设计的好处是:工单不直接持有设备,而是通过工序任务间接引用设备。当设备状态变化时,系统只需扫描 EquipOccupation 中 occupy_end IS NULL 的记录,就能立刻定位到受影响的工单工序任务,进而决定是挂起、改派还是报警。这正是"工单与设备状态联动"的数据基础。

下面这张图展示了对象层级、对象关系以及工单—设备关联结构的整体视图。图中左侧是物理位置层与执行单元层,右侧是工单侧的数据结构,中间通过"工序任务—设备占用"这条链路连接。

物理位置层 车间 产线 工位 执行单元层 工序 设备 工装/模具 绑定(多对多/带时间窗) 物料批次 人员/班组 工单侧数据结构 WorkOrder 工单 wo_id / product / qty / route_id WoOperation 工序任务 wo_op_id / seq_no / operation_id required_equip_type / assigned_equip_id EquipOccupation 设备占用 occ_id / wo_op_id / equip_id occupy_start / occupy_end / type 引用具体设备实例 占用/释放 设备状态变化 → 联动 停机/故障: 扫描未释放占用记录 → 定位受影响工序任务 → 挂起 / 改派 / 报警 恢复运行: → 释放占用,恢复工单 建模要点 ① 工位—设备为多对多且带时间窗;② 工单不直接持有设备,通过工序任务间接引用; ③ 设备占用记录是状态联动的唯一入口;④ 物料批次与人员班组挂接到工位—班次组合。

四、建模落地时的三个关键判断

第一,设备类型与设备实例要分开建。工艺路线引用的是设备类型(如"CNC-3轴"),工单派工解析的是设备实例(如"CNC-07")。如果只建实例不建类型,工艺路线就无法复用;如果只建类型不建实例,工单就无法精确占用。两者都要有,且通过 equip_type_id 关联。

第二,占用记录必须区分计划占用与实际占用。计划占用来自排产,实际占用来自开工/完工报工。设备状态联动时,通常以实际占用为准判断"当前是否真的在用",以计划占用为准判断"未来是否会冲突"。字段 occupy_type 就是为此设计的。

第三,释放原因要可追溯。设备占用结束不一定是正常完工,可能是换设备、工单取消、设备故障强制释放。release_reason 记录这些原因后,后续做设备利用率分析、工单延误归因时才有数据支撑。

建模阶段建议先用一张 Excel 把"产线—工位—设备—工序"四列对齐,逐行确认每个工位当前安装哪些设备、每台设备能执行哪些工序。这张表确认无误后再落库,比直接在数据库里改字段效率高得多。
常见错误:把设备直接挂在产线上,忽略工位这一层。结果是同一产线上多台设备无法区分归属工位,人员排班、物料配送、工单派工都失去落点。工位是车间执行的最小管理单元,不能省。