4. 生产系统建模基础

排程规则工程的第一步不是写规则,而是把生产系统“翻译”成可计算的结构。如果产品、工艺路线、工作中心、资源、日历、换型矩阵和约束条件各自散落在 Excel、ERP 和老师傅的经验里,任何优先级规则都会因为输入不一致而失效。本节讨论如何把这些对象组织成一套彼此引用、可校验、可扩展的模型,并用一个贯穿全节的示例说明结构化表达的关键取舍。

一、七类建模对象及其引用关系

生产系统建模可以归纳为七类核心对象:产品(要做什么)、工艺路线(按什么顺序做)、工作中心(在哪类能力上做)、资源(具体由哪台设备或哪个人做)、日历(什么时候能做)、换型矩阵(从一种状态切到另一种状态要付多少代价)、约束条件(哪些组合根本不允许)。它们不是并列的清单,而是层层引用的关系网:产品引用工艺路线,工艺路线引用工作中心,工作中心包含资源,资源绑定日历,换型矩阵作用于资源或工作中心上的相邻任务,约束条件则横跨以上所有对象。

结构化表达的核心原则是“先定义主数据,再定义关系,最后定义规则”。主数据回答“有哪些对象”,关系回答“谁引用谁”,规则回答“在什么条件下允许或禁止”。排程引擎读取的是关系与规则,而不是自然语言描述,因此每个对象都必须有稳定且唯一的编码。

生产系统建模对象引用关系图 产品 Product P-1001 减速器壳体 工艺路线 Routing R-1001 五道工序 工作中心 WorkCenter WC-CNC 数控加工 资源 Resource CNC-01 / CNC-02 日历 Calendar 两班制 06:00–22:00 换型矩阵 Setup A→B 45min / B→A 30min 约束条件 Constraint 设备互斥 / 工序顺序 引用 归属 包含 绑定 作用于 约束 约束 相邻任务 实线:主数据引用关系 虚线:规则/代价作用关系 编码唯一 · 引用可校验

二、工艺路线:把工序写成可计算的行

工艺路线是建模中最容易含糊的部分。自然语言写“先粗车再精车,然后钻孔”,排程引擎无法直接使用。结构化表达要求把每道工序写成一行记录,至少包含:工序号、工序名称、工作中心编码、标准工时、准备工时、是否关键工序、可选资源集合。以示例产品 P-1001 为例,其路线 R-1001 可表达为:

工序号  工序名    工作中心   单件工时  准备工时  可选资源
OP10   粗车      WC-CNC    12 min    20 min   CNC-01, CNC-02
OP20   精车      WC-CNC    18 min    15 min   CNC-01, CNC-02
OP30   钻孔      WC-DRILL   8 min    10 min   DRL-01
OP40   热处理    WC-HT     240 min     0 min   HT-01
OP50   精磨      WC-GRIND  25 min    30 min   GRD-01, GRD-02

这里有两个关键约定。第一,工时单位统一为分钟,避免小时与分钟混用导致排程结果偏差。第二,可选资源集合决定了排程的自由度:OP10 和 OP20 可在两台 CNC 之间选择,OP30 只有一台钻床,OP40 热处理是瓶颈且不可并行。工序之间的顺序约束由工序号隐含,但若存在并行工序或可选分支,必须显式写出前置工序编码,不能依赖工序号大小推断。

三、工作中心与资源:能力层与执行层分离

工作中心代表能力类型,资源代表具体执行单元。WC-CNC 是一个工作中心,CNC-01 和 CNC-02 是它下面的两台资源。这种分离带来两个好处:排程规则可以按工作中心统一配置(例如“WC-CNC 上优先安排交期最近的任务”),而具体派工再落到资源层。资源需要携带的属性包括:所属工作中心、日历编码、额定产能系数、可用状态。若 CNC-02 因精度不足不能加工 OP20 的精车要求,则必须在资源上标注能力标签,而不是在排程时临时判断。

四、日历:可用时间的结构化表达

日历决定“什么时候能做”,必须与资源绑定。一个日历至少包含:工作日模式、班次区间、休息与停机时段、例外日期。示例中 CNC-01 采用两班制,周一至周五 06:00–14:00 与 14:00–22:00,周六单班 06:00–14:00,周日停机。热处理 HT-01 是连续炉,采用 24 小时连续运行,仅每月第一个周一 00:00–06:00 停炉保养。日历的粒度建议精确到分钟,并统一使用同一时区。若不同资源使用不同日历,排程引擎在计算工序开始时间时必须先取资源日历,再叠加工序时长,不能直接用自然日累加。

五、换型矩阵:从“有换型”到“换型多久”

换型矩阵描述同一资源上相邻两个任务之间的切换代价。它通常是一个二维表,行是“前一个任务的产品族或状态”,列是“后一个任务的产品族或状态”,单元格是换型时间。示例中 WC-CNC 上加工产品族 A(壳体类)与产品族 B(端盖类):

前 \ 后A 壳体B 端盖C 法兰
A 壳体0 min45 min60 min
B 端盖30 min0 min40 min
C 法兰55 min35 min0 min

注意矩阵不一定对称:A→B 是 45 分钟,B→A 只有 30 分钟,因为从壳体切到端盖需要更换更多夹具。排程规则若忽略方向性,会把换型时间算错。换型矩阵可以挂在工作中心上,也可以细化到资源上;若同一工作中心内不同设备的换型能力不同,应下沉到资源级。此外,换型时间是否占用资源日历、是否可与准备工时重叠,必须在模型中明确声明,否则同一份数据在不同规则下会得到不同结果。

六、约束条件:把“不允许”写清楚

约束条件分为硬约束与软约束。硬约束不可违反,例如:同一资源同一时刻只能执行一个任务;工序必须按路线顺序执行;热处理炉装炉量上限为 500 kg。软约束可以违反但需付出代价,例如:尽量不安排周日加班;尽量把同族产品连续排产以减少换型。结构化表达要求每条约束都有唯一编码、类型、作用对象和参数。例如:

  • C-001 资源互斥(硬):同一资源上任务时间区间不得重叠。
  • C-002 工序顺序(硬):OP20 开始时间 ≥ OP10 结束时间。
  • C-003 装炉量(硬):HT-01 单炉总重量 ≤ 500 kg。
  • C-004 换型最小化(软):同族连续排产,权重 0.6。
  • C-005 交期优先(软):逾期任务优先,权重 0.8。
建模检查建议:每个产品至少有一条路线;每条路线的每道工序都指向存在的工作中心;每个工作中心至少有一台可用资源;每台资源都绑定日历;换型矩阵覆盖所有可能相邻的产品族组合;每条硬约束都有可验证的判定表达式。任何一项缺失,排程结果都不可信。

七、结构化表达的落地顺序

实际建模时,建议按“产品 → 工艺路线 → 工作中心 → 资源 → 日历 → 换型矩阵 → 约束条件”的顺序推进,因为后面的对象依赖前面的编码。每完成一层,就用一个小批量订单做一次引用完整性检查:能否从订单找到产品、从产品找到路线、从路线找到工作中心与资源、从资源找到日历、从相邻任务找到换型时间、从约束找到判定条件。只有这条链路完整贯通,优先级与排程规则才有稳定的数据基础。模型不是一次建完的,而是随着产品族增加、设备更新和班次调整持续维护的活文档;把变更入口收敛到主数据层,才能避免规则层被频繁改写。