在现代制造业中,生产排产(Production Scheduling)是工厂运营的核心环节。一个糟糕的排产计划会导致机器闲置、在制品(WIP)堆积、交货延期以及成本飙升;而一个优秀的排产计划则能最大化资源利用率,确保准时交货,并显著减少生产瓶颈。
制定一份能够避免瓶颈与延期的排期表,不能仅靠经验或简单的Excel表格,而需要结合科学的方法论、数据驱动的分析以及合适的工具。以下是制定高效生产排产计划的详细指南。
一、 基础数据准备:垃圾进,垃圾出
排产计划的准确性完全取决于输入数据的质量。在制定计划前,必须建立完善的基础数据库。
1. 精确的物料清单(BOM)与工艺路线(Routing)
- BOM(Bill of Materials): 必须明确生产一个成品需要哪些原材料、零部件,以及它们的消耗比例。
- Routing(工艺路线): 定义产品经过哪些工序、在哪些机器上加工、标准工时是多少。
- 目的: 确保排产时能反向推导出何时需要备料,以及每个工序的预计耗时。
2. 实时的资源能力数据
- 设备能力: 机器的最大产出率(件/小时)、良品率、是否需要模具更换(Setup Time)。
- 人员技能: 哪些工人能操作哪些机器,是否存在人员短缺风险。
- 目的: 避免将任务排产到不存在的资源上,或高估产能。
3. 准确的库存状态
- 原材料库存: 现有量、安全库存、在途量(PO未交)。
- 半成品/成品库存: 现有量,是否可以直接满足部分订单。
- 目的: 避免因缺料导致的生产中断(瓶颈)。
二、 排产策略的选择:决定效率的关键
在数据准备好的基础上,你需要决定如何安排顺序。这是避免瓶颈的核心逻辑。
1. 优先级策略(Prioritization)
- FCFS(First Come First Served): 先到先做。简单,但容易导致急单被延误。
- EDD(Earliest Due Date): 按照客户交期最早优先。这是避免延期交货最直接的策略。
- SPT(Shortest Processing Time): 优先做时间最短的工序。这能快速减少在制品数量,提高设备周转率,但可能忽略交期。
- CR(Critical Ratio): 关键比率法。计算公式为:(交期 - 当前时间) / 剩余加工时间。CR < 1 表示延期风险高,必须优先排产。
2. 约束理论(TOC)与瓶颈管理
根据高德拉特的约束理论,系统的产出由瓶颈工序决定。
- 识别瓶颈: 找出产能最低或需求最高的工序(如注塑、喷涂)。
- 保护瓶颈: 在瓶颈工序前设置“缓冲库存”(Buffer),确保瓶颈机器永远有活干,不因缺料而停机。
- 非瓶颈工序配合: 非瓶颈工序的排产不能快于瓶颈工序,否则会造成堆积。
三、 解决生产瓶颈的具体战术
瓶颈是生产排产中的“堵点”,必须提前规划解决。
1. 负荷平衡(Load Leveling)
不要将所有相似的订单集中在同一时间段生产。
- 做法: 将大订单拆分,或者将不同产品的生产穿插进行,平滑对特定设备的需求曲线。
- 例子: 如果工厂只有一台丝印机,而A产品和B产品都需要它。不要先做完A的所有订单再做B,而应该按A-B-A-B的节奏排产,防止B订单积压太久。
2. 设备预维护与备机计划
- 做法: 在排期表中预留“设备保养时间”,而不是等到机器坏了才停。
- 缓冲: 对于关键瓶颈设备,如果可能,准备备用机器或寻找外协(外包)作为Plan B。
3. 缩换模时间(SMED)
- 做法: 如果瓶颈设备需要频繁更换模具或夹具,推行快速换模(SMED)。
- 排期优化: 将需要相同模具的订单排在一起(Batching),减少换模次数,增加有效生产时间。
四、 避免延期交货的排期表制定流程
1. 产能与需求的粗能力计划(RCCP)
在生成详细排期表之前,先进行宏观检查。
- 计算: 总订单需求工时 vs 总可用工时。
- 预警: 如果需求 > 产能,必须立即采取行动:与销售沟通延期、增加班次(加班)、或外包部分工序。
2. 详细排程(Detailed Scheduling)
使用甘特图(Gantt Chart)思维进行可视化排程。
- 时间轴: 精确到小时甚至分钟。
- 锁定关键路径: 确定从原材料到成品的最长路径,优先保障该路径上的物料和设备到位。
3. 动态调整机制
排产表不是死的。必须建立重排(Rescheduling)机制。
- 插单处理: 当急单进入时,计算其对现有计划的影响(延期风险),只插入那些对整体影响最小的位置。
- 缺料预警: 每天检查未来3-7天的物料到位情况。
五、 实战案例:如何用代码逻辑模拟排产(Python示例)
虽然工厂通常使用ERP或APS(高级计划与排程)系统,但理解其背后的逻辑非常重要。以下是一个简化的Python示例,展示如何根据交期紧迫程度(EDD策略)来自动排序生产任务,从而避免延期。
假设我们有一组待排产的订单,我们需要计算它们的紧迫程度并生成排产顺序。
from datetime import datetime, timedelta
class ProductionOrder:
def __init__(self, order_id, product_name, due_date, process_time, priority_score=0):
self.order_id = order_id
self.product_name = product_name
self.due_date = datetime.strptime(due_date, "%Y-%m-%d") # 交期
self.process_time = process_time # 预计加工时间(小时)
self.priority_score = priority_score
def __repr__(self):
return f"订单ID: {self.order_id}, 产品: {self.product_name}, 交期: {self.due_date.strftime('%Y-%m-%d')}, 需时: {self.process_time}小时"
def calculate_priority(orders, current_date):
"""
计算关键比率 (Critical Ratio) 和紧迫因子
CR = (交期 - 当前时间) / 剩余加工时间
CR越小,越紧急
"""
scheduled_list = []
for order in orders:
# 计算距离交期的天数
days_until_due = (order.due_date - current_date).days
# 计算关键比率 (简化版:如果剩余时间小于加工时间,视为极度紧急)
if days_until_due * 24 < order.process_time: # 假设每天工作8小时
order.priority_score = 1 # 极度紧急
elif days_until_due * 24 < order.process_time * 2:
order.priority_score = 2 # 紧急
else:
order.priority_score = 3 # 正常
scheduled_list.append(order)
# 排序:先按优先级(数字小的在前),再按交期早的在前
scheduled_list.sort(key=lambda x: (x.priority_score, x.due_date))
return scheduled_list
# --- 模拟场景 ---
# 当前日期
today = datetime(2023, 10, 27)
# 待排产订单列表
orders_data = [
ProductionOrder("PO-001", "齿轮A", "2023-10-30", 12), # 交期近,需时短 -> 紧急
ProductionOrder("PO-002", "外壳B", "2023-11-05", 40), # 交期远,需时长 -> 正常
ProductionOrder("PO-003", "轴承C", "2023-10-29", 20), # 交期非常近 -> 极度紧急
ProductionOrder("PO-004", "底座D", "2023-11-02", 10), # 交期中等 -> 紧急
]
# 执行排产逻辑
final_schedule = calculate_priority(orders_data, today)
# 输出排产计划表
print(f"--- {today.strftime('%Y-%m-%d')} 生产排产计划表 ---")
print(f"{'优先级':<8} {'订单号':<10} {'产品名称':<10} {'交期':<12} {'预估工时':<8}")
print("-" * 55)
for order in final_schedule:
priority_str = "紧急" if order.priority_score == 1 else "预警" if order.priority_score == 2 else "正常"
print(f"{priority_str:<8} {order.order_id:<10} {order.product_name:<10} {order.due_date.strftime('%Y-%m-%d'):<12} {order.process_time:<8}小时")
# 结果分析:
# 1. 轴承C (PO-003) 交期最近,排第一。
# 2. 齿轮A (PO-001) 交期次近,排第二。
# 3. 底座D (PO-004) 交期稍远,排第三。
# 4. 外壳B (PO-002) 交期最远,排最后。
# 这种逻辑能有效防止急单漏做导致的延期交货。
代码逻辑解析: 这段代码演示了基于约束和交期的动态排序。在实际工厂中,你会将机器容量(Capacity)作为约束加入循环。如果某天的累计工时超过8小时,系统会自动将订单顺延到第二天。这正是APS系统的核心算法之一。
六、 工具与技术栈建议
为了执行上述策略,建议根据工厂规模选择工具:
Excel(适用于小型工厂):
- 使用甘特图模板。
- 利用条件格式(Conditional Formatting)高亮显示延期风险。
- 缺点: 无法处理复杂的资源冲突,手动调整耗时。
ERP系统(适用于中型工厂):
- 如SAP, Oracle, 金蝶, 用友。
- 提供MRP(物料需求计划)自动计算采购。
- 缺点: 通常偏向于计划,而非详细的现场调度。
APS(高级计划与排程系统)(适用于大型/复杂工厂):
- 如西门子Opcenter, Asprova, PlanetTogether。
- 功能: 考虑有限产能(Finite Capacity),自动进行启发式算法排程,支持插单模拟。
- 优势: 能真正解决瓶颈问题,实现可视化排程。
七、 总结:制定排期表的“黄金法则”
要避免瓶颈与延期,制定排期表时请反复核对以下三点:
- 料到才排: 确保物料齐套(齐套检查),不排“无米之炊”。
- 瓶颈优先: 所有非瓶颈资源必须服从瓶颈资源的节奏。
- 留有余地: 在计划中预留5%-10%的缓冲时间(Buffer)应对突发异常(如设备故障、员工请假)。
通过遵循以上步骤,结合数据的准确性和科学的排序逻辑,工厂可以显著提升排产计划的执行力,从而从根本上消除生产瓶颈,确保准时交货。
