2. 生产排程的核心要素与数据基础
生产排程不是把订单按交期排个队那么简单。它本质上是在一组有限资源上,为每道工序确定开始时间和占用资源,使交期、产能、成本等目标尽可能好。要建立可计算的排程模型,第一步是把车间里的“人、机、料、法、模”翻译成结构化的数据对象,并明确它们之间的约束关系。本节围绕资源对象、工艺路线与BOM、各类时间参数、约束条件以及数据质量五个方面展开。
一、资源对象:排程模型的“演员表”
排程模型中的资源对象至少包括订单、工序、机器、人员、模具和物料六类。订单是需求载体,通常带有订单号、产品、数量、交期、优先级等属性;工序是订单在工艺上的分解单元,一道工序对应一次资源占用;机器是主要产能资源,需要描述其可加工的工序类型、可用日历和产能;人员决定某些工序能否开工,尤其是需要特定技能等级的岗位;模具和工装是典型的“共享且需换装”的资源,同一模具在不同机器间切换需要安装与拆卸时间;物料则决定工序能否开始,存在齐套约束。
这些对象之间不是孤立的。一个订单包含多道工序,每道工序指定可用机器集合、所需人员技能、所需模具和物料清单。排程时真正被“占用”的是机器时间段、人员班次、模具时间段和物料库存。建模时建议为每类资源建立独立的资源表,再用关联字段把工序与资源连接起来,而不是把所有信息塞进一张宽表。
二、工艺路线与BOM:结构与数量的双重约束
工艺路线描述“怎么做”:工序顺序、每道工序的加工内容、可选设备、标准工时、换型关系。BOM描述“用什么做”:父件与子件的数量关系。两者共同构成排程的结构基础。工艺路线决定工序之间的先后约束(串行、并行、可选路径),BOM决定物料需求的计算逻辑——只有子件齐套,父件工序才能开工。
实际建模中要注意工艺路线的“可选性”。同一道工序可能有多台机器可选,也可能存在替代工艺路线。若把可选机器简单写成一台,模型会失去优化空间;若写成任意机器,又可能引入不可行组合。合理做法是为每道工序维护“可用机器集合”,并在模型中用分配变量选择其一。BOM则要注意层级展开与提前期,多层BOM需要逐层计算物料可用时间,而不是只看最终产品的库存。
三、时间参数:加工、换型、准备与批量
排程模型里最容易出错的是时间口径。加工时间通常指单件加工时间,工序总加工时间等于单件时间乘以批量;准备时间与换型时间不同,准备时间往往与批次相关(如开机预热、首件检验),换型时间则取决于前后两个任务的属性差异,例如从产品A切换到产品B需要更换模具和调整参数,而从A切换到同族产品C可能只需简单调整。
换型时间具有“顺序依赖”特征,这是排程建模的难点。若忽略顺序依赖,模型会低估换型损失;若对每对产品都单独建模,变量规模会迅速膨胀。工程上常用换型矩阵表达:行和列分别是前后任务的产品族,矩阵元素为换型时间。对于同族内换型可设较小值,跨族设较大值,从而在精度与规模之间取得平衡。
批量与转移批量也需要区分。加工批量决定一次投入多少件,转移批量决定多少件完成后可以流向下道工序。若转移批量小于加工批量,工序之间可以重叠进行,形成“重叠生产”,缩短总周期。建模时若把两者混为一谈,会高估生产周期。示例性地,某工序加工批量为100件、单件工时2分钟,若转移批量为25件,则每25件完成即可转移,下道工序可提前开工,而不是等100件全部完成。
四、约束条件:交期、优先级与加班
交期是最常见的硬约束或软约束。硬约束要求完工时间不晚于交期,软约束则允许拖期但计入惩罚。优先级用于在产能冲突时决定谁先占用资源,通常与交期、客户等级、订单金额相关。允许加班则是产能的弹性扩展:在正常班次之外增加可用工时,但需要付出加班成本,且加班时长有上限。
建模时建议把交期分为“承诺交期”和“内部计划交期”,前者对外刚性,后者可留缓冲。优先级不要只用一个整数,而应结合拖期惩罚权重,使模型在冲突时能自动权衡。加班变量应显式建模为决策变量,并设置上限和单位成本,而不是在数据预处理阶段直接把产能放大,否则会失去成本与产能之间的权衡能力。
五、数据采集与清洗:模型可信度的地基
排程模型的效果高度依赖数据质量。常见问题包括:工时数据来自理论值而非实际统计、换型矩阵缺失或过时、机器可用日历未扣除保养和故障、物料库存与在途数据不同步、订单交期频繁变更但未留版本。这些问题会让模型输出“数学上最优、现场不可行”的方案。
清洗时应遵循几条原则:工时数据优先使用近期实际统计的中位数而非平均值,以降低异常停机的影响;换型矩阵按产品族维护,并定期用实际换型记录校正;机器日历要区分计划保养、临时故障和正常可用;物料数据要区分现有库存、在途量和已分配量。对于缺失值,不要简单填零,而应标记为“待确认”,并在排程结果中提示风险工序。
把上述要素组织起来,排程模型的输入可以概括为:订单表、工艺路线表、BOM表、资源表(机器、人员、模具)、时间参数表、日历表和库存表。输出则是每道工序的开始时间、结束时间和资源分配。数据基础越扎实,后续的优化算法才有意义;反之,再精巧的模型也只是在错误的数据上做运算。