批次与连续流工序各自计时

批次工序按周期以整批装载计时,连续流工序按连续速率计时。把两者塞进同一个模型,混合工艺路线就会计时失准,等待来料的时间从生产排程里消失。

一条工艺路线里的两种物理机制

想象一条你实际运行的工艺路线:一台搅拌机、蒸煮锅、反应釜或烘炉,一次装载整批物料,按固定周期加工,然后整批放出;再往下走一两步,一台灌装机、包装机或烘干线,以稳定的速率接收物料。这两道工序——batch(批次)与 flow(连续流)——向生产排程提出两个不同的问题。批次工序问的是:一批物料在其周期上要花多长时间,这个数量能凑出多少个整批?连续流工序问的是:按这个速率,物料通过需要多长时间?一条工艺路线,两种物理机制。一个用同一套时长模型同时回答这两个问题的生产排程,会以一种具体而可见的方式出错:在批次工序何时完成上出错,在连续流工序实际何时有料可跑上出错。

现状的陷阱:一套时长模型包打一切

陷阱就在于单一的时长模型。一个以同样的方式为每道工序计时的工具(按单位时间,通常再加上准备与清理时间,或者一个单一的按批时间),无法在同一条工艺路线中同时表达这两种物理机制。有一个主流系统,Odoo,把工作中心时长建模为含准备与清理的按单位时间,外加一次并行运行的单位数量,而没有整批周期的概念。这只是一个孤例,作为背景提供,并非市场份额论断。这里的论证更窄,也更强:任何把同一套时长模型强加给两种工序类型的工具,都会把混合工艺路线计时计错,并隐藏等待来料的断料。这种失败有两种形态。按单位时间的模型无法表达批次工序上部分装载的取整:它把三分之一的装载当作三分之一周期,而固定周期的批次工序从不会如此。按批次的模型无法表达连续流工序在数量上的线性:它无法表明,在同样的速率下,两倍的物料要花两倍的时间。两种错误落在同一个地方:生产排程的时间是错的,而这种错误一直不可见,直到物料没有在生产排程所假设的时刻到达。

时长因工序类型而异

批次工序的时长是整批装载的物理机制。装载数等于数量除以批量大小后向上取整(三分之一的装载仍要跑完一个完整周期),工序时长就是装载数乘以批次周期时间。连续流工序的时长是速率的物理机制:数量除以吞吐量,等价于数量乘以每单位分钟数。这是两种不同的模型,而不是同一个模型的两种设置。一个量化,另一个线性。取整是关键所在:用按单位时间的视角看一个批次工序,2,500 kg 是 2.5 个单位的工作量,但设备看到的是 3 个装载。这正是 Schantt 的建模方式。每道工序被标记为批次型或连续流型;批次工序取一个批量大小与批次周期时间;连续流工序取一个产线速度或吞吐量;产品族沿一条有序的路径穿过这两种工序。混合批次与连续流的产线是一等公民,而不是事后硬接上去的特殊情况。

实例:批次搅拌机向连续灌装机供料

下面看看这两个模型对同一个数量各做了什么。下面的算术由上面两个公式推导而来;这是模型的演算实例,不是任何工厂的统计。设定:一台批次搅拌机,批量大小 1,000 kg,批次周期时间 2 h,向一台吞吐量 1,000 kg/h 的连续灌装机供料,并在交接处启用了部分转移,按 1,000 kg 转移(不启用的话,灌装机要等搅拌机整个批次跑完才能启动)。数量为 2,500 kg。

批次工序,用它自己的模型。 2,500 kg ÷ 1,000 kg 是 2.5 个装载,向上取整为 3;3 个装载 × 2 h = 6 h。第三个装载是部分的(500 kg),仍要跑完一个完整周期。

批次工序,压平为按单位时间。 2 h ÷ 1,000 kg = 0.002 h/kg;2,500 kg × 0.002 h/kg = 5 h。压平后的模型把该工序低估了 1 h,因为它看不到部分装载的取整。

连续流工序,用它自己的模型。 按灌装机 1,000 kg/h 的速率,2,500 kg 需要 150 分钟,即 2.5 h。

现在把两道工序放在一起,看释放的节奏。搅拌机每 2 h 完成一个装载:1,000 kg 在 t = 2 h,1,000 kg 在 t = 4 h,最后 500 kg 在 t = 6 h。灌装机在第一次释放时启动,到 t = 3 h 耗尽,然后等 1 h,到 t = 4 h 才等到第二个装载。

时间 批次搅拌机的释放 灌装机的状态
t = 0 h 等待第一个装载
t = 2 h 1,000 kg 开始灌装
t = 3 h 第一个装载耗尽;等待来料
t = 4 h 1,000 kg 恢复灌装
t = 6 h 500 kg 灌装最后一个装载

压平的误差主要不在总时间上,而在释放曲线:按单位时间的生产排程让灌装机的供料看起来是连续的,于是 t = 3 h 与 t = 4 h 之间那 1 h 的等待,永远不会出现在生产排程里。

生产排程显示什么:等待来料的暂停

当下游工序在下一批来料落地之前把物料耗尽时,生产排程会把它显示出来:在该工序的行上出现一个等待来料的暂停,直到下一次到达。这是生产排程的时间,不是库存。这里没有任何关于库存水位或缓冲大小的内容;它只关乎生产排程在每一个时刻说这道工序能做什么。由于批次工序按块放出物料(启用部分转移后,在交接处一次放出整批、按周期间隔进行),直接由它供料的连续流工序就受这一节奏支配。两道工序之间没有缓冲时,下游工序只能在装载完成的时刻取料;无论它自己的速率多稳定,都不能跑到释放之前。关掉部分转移,交接就更严格了:下游工序要等上游工序整个批次跑完才开始。由按单位时间时长构建的生产排程恰恰隐藏了这一点。它的算术永远产生不了断料窗口,所以窗口不会出现;生产排程显示灌装机在加工那些——在模型世界里——尚未到达的物料。部分转移按交接处设置,而不是全局设置,所以一条工艺路线可以混合整批完成交接与重叠启动;它改变的是交接时机,而不是物理机制。等待来料的暂停,仍是这篇文章所依托的那个可见后果。

这一论证不是什么

这是关于两种时长模型的论断,而不是说真实工序的行为完美无缺。批次工序各有差异(批量大小可变、并行罐体、部分转移),连续流产线会爬坡启动,也会为清洗而停机。模型使用计划员设定的基线值:固定的批量大小、批次周期时间与吞吐量。真实工厂各不相同;这个论证是一种模型选择,而不是放之四海而皆准的物理。压平误差也有其适用范围。它在数量不是装载的整数倍、且批次周期相对下游消耗较长时才咬人。一个快速批次工序向一条慢速产线供料,确实可以用速率很好地近似,这时单一模型几乎不损失什么。工序之间的缓冲或缓冲容量是真实工厂的做法,它位于生产排程模型之外:在这里提到它只是提供背景,而不是一个被建模的功能。而正如全文所述,断料是生产排程的时间问题。这篇文章没有任何内容是库存管理或库存控制建议。

结论:一个三问测试,以及 Schantt 的做法

拿你正在用的工具做一次三问测试。一:在批次工序上,它是否把部分装载向上取整为完整周期?二:生产排程是用上游的完成来喂养下游每道工序,还是假设物料随时可用?三:当一道工序把物料耗尽时,生产排程是把它显示出来(一个可见的等待来料的暂停),还是让计时错误一直不可见?第一个问题答不上来的工具,根本无法为批次工序计时;第二、第三个问题答不上来,它就无法告诉你混合工艺路线会在哪一刻真的断料。Schantt 的回答直截了当:用装载数与批次周期时间为批次工序建模;用速率为连续流工序建模;把混合批次与连续流的产线当作一等公民;当供料时机落后于需求时,在生产排程上显示等待来料的暂停;并在每个交接处提供部分转移。这些没有一条是配置上的琐碎小事。这些选择之所以存在,是因为生产排程的职责是在所有作业上最小化总生产时间,而一个起步于错误时长模型的时间,无论生产排程其余部分构建得多好,在混合工艺路线上都不可信。

准备好优化您的生产排程了吗?

免费试用 Schantt——无需信用卡。60 分钟内从电子表格迈向优化后的甘特图。

免费试用 Schantt