奶酪生产排程意味着协调工厂中的巴氏杀菌、罐加工、压制、盐渍和包装等环节,涉及多个并行罐、依赖顺序的清洗周期以及时间敏感的凝乳到压制交接。本指南展示了如何在Schantt中为一个真实的奶酪工厂建模,设置具有正确参数的工序和设备,并生成尊重奶酪制作独特工艺约束的排程。
本指南基于行业研究构建了一家虚构的综合公司;所有名称、参数和数字均为示意用途。
行业背景
奶酪制造通过一系列受控加工步骤将液态奶转化为成品奶酪。生产过程从巴氏杀菌开始(将原料奶加热以消灭病原菌),然后经过凝固、凝乳加工、压制、盐渍,最后包装。每个步骤都有其自身的时间约束——有些连续运行,有些按离散批次进行——工序间的交接对时间敏感。
本场景中的工厂每年处理约15,000,000 L原料奶,每天两次收奶,每次约20,000 L。工厂占地约3,200 m²,雇佣约85名员工,其中包括一个2人排程团队。两种季节性模式影响吞吐量:标准季节和春季高峰期(3月至5月),期间奶源供应大幅增加。
巴氏杀菌是第一个生产工序,由一台额定产能10,000 L/hr的巴氏杀菌设备完成。从那里,牛奶流入罐厅,六个罐(每个容量12,000 L)处理凝固和凝乳加工阶段。罐周期因产品族而异:Fresh需要1,200 kg批次240分钟,Pasta-Filata需要1,200 kg批次270分钟,Semi-Hard需要1,000 kg批次390分钟。这些周期时间包括培养、添加凝乳酶、凝固、切割凝乳和加热——每个步骤由各类奶酪的制作技术决定节奏。
罐加工后,凝乳转移到压制,由四台压机成型和压实。压制周期为:Fresh 150分钟(1,200 kg),Pasta-Filata 90分钟(1,200 kg),Semi-Hard 240分钟(1,000 kg)。压制后的奶酪进入盐渍,由四个盐渍罐服务于所有产品族:Fresh 15分钟通过(干盐步骤),Pasta-Filata每1,200 kg盐渍120分钟,Semi-Hard每1,000 kg盐渍720分钟。最后,切割与包装在两条产线上运行——1号线(flow-wrap,流动包装)产能500 kg/hr,2号线(vacuum-pack,真空包装)产能400 kg/hr。半硬质奶酪在包装后转入熟化库存,持续4至12周;熟化过程在排程之外管理。乳清处理作为重要的副产品流,在专用的独立设备上运行,不在奶酪线范围内排程。
工厂在一年大部分时间遵循标准工作日历(周一至周五,06:00至22:00),在3月至5月春季高峰期切换为延长的高峰期工作日历(周一至周六,05:00至00:00)。适用三个日历例外:元旦、国际劳动节以及12月24日至12月31日的年末停工。
Stone Mill Creamery在约3,200 m²的工厂中运营约85名员工,生产3个产品族,跨越5个生产工序,由一个2人排程团队制定排程。
工艺概览
flowchart LR P["巴氏杀菌<br/>(Flow)"] V["罐加工<br/>(Batch)"] R["压制<br/>(Batch)"] B["盐渍<br/>(Batch)"] C["切割与包装<br/>(Flow)"] P --> V V --> R R --> B B --> C
奶酪生产场景中建模的五个生产工序——巴氏杀菌(连续流)、罐加工(批次)、压制(批次)、盐渍(批次)和切割与包装(连续流)。所有三个产品族(Fresh、Pasta-Filata、Semi-Hard)都经过全部五个工序,具有类别特定的批量大小、周期时间和停留时间。
排程挑战及Schantt如何应对
生产清单——要生产哪些产品、数量多少、何时完成——是此场景中每个排程的驱动力。排程员从周度或日度生产计划中手动录入订单;Schantt不预测需求,也不区分备货生产和按单生产。需求输入来自ERP集成、销售预测或其他计划节奏的读者可将此方法适配到自己的数据源。
Schantt优化总生产时间:它从选定的开始日期向前排程,对作业和设备分配进行排序,以最小化完成生产清单所需的时间。对于提前一到两周运行的工厂,这提供了一个符合典型奶酪制作订单簿的实际计划视野。排程算法以两种模式运行。Auto模式从生产清单、设备和约束条件生成完整优化的排程,无需在录入订单之外的任何人工干预。Semi-Auto模式让排程员将特定作业分配到特定设备或重新排序所选序列,同时算法填充剩余分配——当排程员需要为客户订单预留罐或基于车间知识推翻算法的建议时,这非常有用。
Schantt擅长的方面
- 多工序顺序生产——一次定义巴氏杀菌到切割与包装;每个产品族经过其类型所需的工序,每对连续工序之间设有转移时间。
- 并行设备工序——罐加工有6个罐,压制有4台压机,盐渍有4个罐。Schantt在并行设备间分配作业以最小化总生产时间。
- 依赖顺序的换线——每个产品族对的方向性清洗时长(同类冲洗15分钟,标准跨类清洗30分钟,Semi-Hard后深度清洗40–45分钟)。算法偏向于最小化总清洗时间的排序。
- 混合批次与连续流管线——罐加工、压制和盐渍是Batch工序(填充、加工、排空,按周期循环);巴氏杀菌和包装是Flow工序(连续吞吐)。一条工艺路线混合了两种类型,排程自动解决下游时间影响。
- 多产品工艺路线与工序跳过——所有三个产品族共享相同的五工序顺序,但具有类别特定的批量大小、周期时间和停留时间——在单一流程内参数各异。Schantt独立处理每个产品族的工艺路线。
- 重叠操作的部分转移——凝乳从罐逐步排放到压机。启用部分转移可在罐继续排放的同时开始第一模具的压制,减少工序间总体延迟。
Schantt如何应对每个挑战
1. 清洗与换线排序。
罐换线并非同等耗时:同类冲洗15分钟,标准跨类清洗30分钟,Semi-Hard后深度清洗40–45分钟。当在六个罐上运行所有三个产品族时,总清洗时间严重依赖生产顺序。手动排序的排程员往往低估不利转换的累积效应。
Schantt在每个设备上为每个产品族对建模方向性换线时间。当你输入每对时长——Fresh到Fresh 15分钟,Fresh到Pasta-Filata或Fresh到Semi-Hard 30分钟,以及离开Semi-Hard的较长时长——算法将这些时间纳入其搜索,寻找最小化总生产时间的排序。生成的排程将兼容产品族分类排列,尽可能避免高清洗转换。由于Schantt按设备而非按共享资源应用换线时间,排程员需查看甘特图以确保多个罐同时清洗时不会发生CIP滑架重叠。
2. 并行罐分配。
面对六个罐和从240分钟(Fresh)到390分钟(Semi-Hard)不等的类别特定批次周期,将每个作业分配到特定罐并决定如何在罐厅中排列三个产品族的顺序并非易事。手动方法往往导致部分罐闲置而另一些过载,或者以造成下游瓶颈的方式排列作业顺序。
Schantt将每个罐视为罐加工工序上的独立设备。当你在每个罐上配置每类产品的批量大小和周期时间时,算法将所有六个罐视为可用的并行资源,并将每个作业分配到可减少总完工时间的罐和位置。同样的逻辑适用于四台压机和四个盐渍罐。结果是并行工序间设备利用率均衡,算法解决了手动管理繁琐的分配冲突。
3. 罐到压制的无等待交接。
罐加工后,凝乳必须在较窄的时间窗口内到达压机——Fresh 30分钟,Pasta-Filata 10分钟,Semi-Hard 60分钟——否则批次质量下降。这种无等待约束将两个工序紧密耦合:罐排空延迟会将压制开始时间推至可接受窗口之外。
Schantt通过两种机制处理这一问题。首先,罐加工到压制工艺路线上的30分钟转移时间模拟了预期的交接延迟。其次,为所有三个产品族在罐到压制的工艺路线上启用部分转移:凝乳排放时即可开始压制第一模具,无需等待整个罐排空。这种重叠启动减少了有效延迟,使压制周期保持在典型批量的无等待窗口内。由于该约束是近似而非硬性强制执行的,排程员需在甘特图上验证交接时间。
4. 混合批次与连续流管线。
产线混合了两种加工物理模式:巴氏杀菌以10,000 L/hr连续流运行,罐加工以离散的240–390分钟批次周期运行,压制和盐渍也是Batch工序,包装以400–500 kg/hr的Flow运行。任何工序的延迟或速率变化都会根据工序类型以不同方式在管线中向前传播。
Schantt以正确的生产类型建模每个工序——巴氏杀菌和包装为Flow,罐加工、压制和盐渍为Batch。Flow工序使用吞吐速率,Batch工序使用周期时间和批量大小。排程模拟将每个作业沿其工艺路线推进,将物料数量转换为每个工序类型的时间,并用定义的转移时间将它们连接起来。下游Flow工序以上游工序供应的速率接收物料,当Batch工序无法足够快地向下一Flow工序供料时,甘特图显示等待物料段出现的位置。
5. 季节性产能波动。
在春季高峰期(3月至5月),原料奶供应增加,工厂需要更长的生产时间和第六个工作日来处理额外产量。手动每周逐一调整每台设备的可用性容易出错且耗时。
Schantt允许你定义多个工作日历并在特定日期范围之间切换。标准工作日历(周一至周五,06:00至22:00)覆盖一年大部分时间。高峰期工作日历(周一至周六,05:00至00:00)在3月至5月期间适用。在排程中,你分配适当的工作日历时段,算法会尊重这些周的延长工时和额外工作日。增加多少额外产能由排程员决定——Schantt不预测供应增长或推荐日历——但一旦设定了日历,排程会自动使用正确的可用工时。
在Schantt中建模的内容
五个一级实体构成了Schantt中此场景的核心。
| Entity | Count | Notes |
|---|---|---|
| Stage | 5 | 巴氏杀菌(连续流)、罐加工(批次)、压制(批次)、盐渍(批次)、切割与包装(连续流) |
| Machine | 17 | 1台巴氏杀菌设备、6个罐、4台压机、4个盐渍罐、2条包装线 |
| Product Class | 3 | Fresh、Pasta-Filata、Semi-Hard——每种都有自己的批量大小、周期时间和停留时间 |
| Product | 3 | Cream Cheese(Fresh)、Fresh Mozzarella(Pasta-Filata)、Gouda(Semi-Hard)——每类一个代表产品 |
| Calendar | 2 | 标准(Mon–Fri 06:00–22:00)和高峰期(Mon–Sat 05:00–00:00,3月–5月) |
子配置对象——每类工艺路线、换线时间、转移时间、日历例外和设备停机——在这些实体的详情页上设置。
分步设置
1. 按顺序创建工序。 按生产车间中出现的顺序添加五个工序:巴氏杀菌(flow)、罐加工(batch)、压制(batch)、盐渍(batch)、切割与包装(flow)。在每个工序的详情页上,设置到下一工序的转移时间——巴氏杀菌到罐加工0分钟(直接管道连接),罐加工到压制30分钟,压制到盐渍15分钟,盐渍到切割与包装15分钟。
2. 为每个工序添加设备。 将物理设备分配到其工序:
- 巴氏杀菌: 1台设备——pasteuriser-1
- 罐加工: 6台设备——vat-1至vat-6
- 压制: 4台设备——press-1至press-4
- 盐渍: 4台设备——brine-tank-1至brine-tank-4
- 切割与包装: 2台设备——pack-1(flow-wrap)和pack-2(vacuum-pack)
3. 创建产品族并定义其工艺路线。 添加三个产品族——Fresh、Pasta-Filata、Semi-Hard——每个以kg为单位。在每个产品族的详情页上按顺序定义工艺路线工序。所有三个产品族都经过全部五个工序。对于罐加工到压制段,在所有三个产品族上启用部分转移(允许部分转移,数量1),从而在第一个模具填充时开始压制,无需等待整个罐排空。
4. 添加产品。 每类创建一个代表性产品:Cream Cheese(Fresh类)、Fresh Mozzarella(Pasta-Filata类)、Gouda(Semi-Hard类)。每个产品继承其产品族的工艺路线和加工参数。
5. 设置设备产能参数和换线时间。 在每台设备的详情页上配置:
- Batch工序(罐加工、压制、盐渍): 为设备处理的每个产品族设置批量大小和周期时间——例如,在任何罐中的Fresh为1,200 kg/240分钟;在任何罐中的Semi-Hard为1,000 kg/390分钟。
- Flow工序(巴氏杀菌、切割与包装): 设置吞吐速率——pasteuriser-1为所有产品族10,000 L/hr,pack-1为Fresh 500 kg/hr,pack-2为Pasta-Filata和Semi-Hard 400 kg/hr。
- 换线: 在罐加工设备上,为每个产品族对输入方向性换线时间:同类转换15分钟,标准跨类转换30分钟,以及离开Semi-Hard的40–45分钟。在压机和盐渍设备上应用相同模式。
6. 配置工作日历、例外和停机。 创建标准工作日历(周一至周五,06:00–22:00)并将其设为默认。创建高峰期工作日历(周一至周六,05:00–00:00)。添加三个日历例外:元旦(非工作日)、国际劳动节(非工作日)和年末停工(12月24日至31日,非工作日)。在pasteuriser-1上设置两个收奶重复停机时段(每日06:00–07:00和14:00–15:00),以及所有罐上一个工厂范围的日终清洗停机(每日21:00–00:00)。
关于如何在Schantt中配置上述各项的分步说明,请参阅Schantt文档。
常见错误
1. 使用单一统一换线时间。 对所有转换应用相同的清洗时长忽略了15分钟同类冲洗和离开Semi-Hard的45分钟深度清洗之间的差异。如果所有转换使用相同值,算法无法偏向低清洗排序——它对每个换线一视同仁,失去了将兼容产品族分组排列的机会。解决方法: 在每台设备上输入方向性逐对换线时间,使排程反映真实的清洗时长,算法可以通过智能排序最小化总清洗时间。
2. 将六个罐建模为一个聚合设备。 将罐厅表示为单个产能扩大六倍的Batch设备,丢失了一个罐清洗时另一个可加工的并行性。排程会持有所有作业直到聚合设备空闲,造成人为等待。解决方法: 在罐加工工序上创建六个独立的罐设备,每个具有标准1,200 kg(或Semi-Hard为1,000 kg)的批量大小和类别特定的周期时间。
3. 在罐到压制的工艺路线上禁用部分转移。 没有部分转移,压制必须等待整个罐批次排放完毕才能开始。30分钟转移时间加上完全排放延迟可能将压制开始推至Pasta-Filata(10分钟)和Fresh(30分钟)的无等待窗口之外。解决方法: 在所有三个产品族的罐到压制工艺路线上启用数量为1的部分转移,使压制与排放重叠。
4. 将巴氏杀菌视为Batch工序。 在pasteuriser上设置批量大小和周期时间错误地表示了连续热处理过程,并迫使排程将收到的牛奶视为离散批次,这与实际流通物理不符。解决方法: 将pasteuriser的生产类型设置为Flow并输入其吞吐速率(10,000 L/hr),而不是批次参数。
5. 全年使用单一工作日历。 在春季高峰期运行标准工作日历(66小时/周)忽略了3月至5月可用的额外周六班次和延长工时。排程显示作业超出可用工时,并标记出高峰期工作日历本可解决的产能冲突。解决方法: 创建高峰期工作日历,并将其作为排程工作日历段分配给3月至5月窗口。
好的排程是什么样的
一个运行三个产品族、六个罐、四台压机、四个盐渍罐和两条包装线的奶酪工厂的优化排程,相比手动排序计划显示出明显的改进。排程员可以在甘特视图中一目了然地看到差异。
Before(白板启发式方法):
- 清洗时间不一致:换线不加区分地统一应用,每次切换增加30分钟,即使较短冲洗就足够
- 罐利用率不均:部分罐连续运转而其他闲置,因为分配遵循排程员的心理地图而非均衡负载
- 压制开始延迟:未启用部分转移时,每个罐批次的凝乳在压制开始前完全排放完毕,将交接推至更严格类别的无等待窗口之外
- 春季意外产能冲突:排程在3月至5月使用标准工时,作业溢出22:00边界,且没有高峰期工作日历
After(Schantt Auto模式):
- 每日清洗时间减少60–90分钟:算法对作业排序,偏向同类和低清洗转换,在不可避免时才安排深度清洗
- 罐负载均衡:作业分布在所有六个罐上,Semi-Hard批次(较长周期)与较短的Fresh批次交错,使没有设备空闲而其他排队
- 压制更早开始:部分转移使凝乳排放时即开始第一模具,保持交接在每类窗口内,避免下游延迟
- 工作日历感知排程:高峰期工作日历在3月至5月激活,自动扩展可用工时,消除虚假产能冲突
在Schantt中尝试
注册Schantt并加载内置示例数据集,亲自构建本场景——本指南中的所有工序、设备、产品族、产品和工作日历,及其工艺路线、换线时间、转移时间和停机均已配置完毕,随时可以排程。你的配置和排程将限定在你的Team账户范围内。要深入了解任何步骤,请参阅Schantt文档。