1、深入理解、掌握能力需求计划理论, ERP中MRP、工作中心、工艺路线等相关模块的关系,以及ERP系统信息集成的含义。
2、综合运用能力需求计划理论和程序设计技术,设计适合表示能力需求计划参数及计划结果的数据结构,并使用程序设计语言实现。
3、综合运用能力需求计划理论和程序设计技术,设计能力需求计划计算的算法,并使用程序设计语言实现。
4、设计并实现能力需求计划结果显示形式。
5、对于给定的能力需求计划参数实例,制定可行的能力需求计划。
1、设计并实现适合存储能力需求计划参数及计算结果的数据结构。
2、设计并实现能力需求计划计算的算法。
3、设计并实现能力需求计划结果显示形式。
4、根据数据文件的说明完成数据文件的解析,读取计算能力需求计划的相关参数,根据读入的参数完成能力需求计划的计算(具体计算内容包括:已确认和计划MRP的总负荷、余/欠能力、累积余/欠能力),并显示(如表、图等,也可以输出到Excel中)计算结果
1、MRPConfirmed.txt:已确认的MRP。文件可能包含若干行。每行对应一种物料。每行的格式如下:
物料名称 时段1需求量 时段2需求量 ... 时段n需求量
例如
X 10 8 6 12 5 8
表示物料X在 时段1到时段6的需求量分别为10 8 6 12 5 82、MRPPredicted.txt:计划的MRP。文件可能包含若干行。每行对应一种物料。每行的格式如下:
物料名称 时段1需求量 时段2需求量 ... 时段n需求量
例如
X 0 4 5 3 0 2
表示物料X在 时段1到时段6的需求量分别为10 8 6 12 5 83、Routing.txt:工艺路线文件。文件可能包含若干行。每行对应某种物料的一道工序。每行的格式如下:
物料名称 工序总数 该工序的执行顺序 该工序对应的工作中心 额定能力需求
例如
X 2 1 WC01 3
表示物料X一共有2道工序,第一道工序需要在工作中心WC01加工3个小时4、WCRatedCapacity.txt:工作中心额定能力。文件可能包含若干行。每行对应一个工作中心。每行的格式如下:
工作中心名 额定能力(工时)
例如
WC01 90
表示工作中心WC01在一个时段内的额定能力为90小时
1. 能力需求计划是对物料需求计划(MRP)所需能力进行核算的一种计划管理方法。具体地讲,CRP就是对各生产阶段和各工作中心所需的各种资源进行精确计算,得出人力负荷、设备负荷等资源负荷情况,并做好生产能力负荷的平衡工作。
2. 能力需求计划可以解决以下几个问题:
(1)各个物料经过哪些工作中心加工?
(2)各工作中心的可用能力和负荷是多少?
(3)工作中心的各个时段的可用能力和负荷是多少3. 考虑能力需求计划的计算方式时,要把物料需求计划的物料需求量转换为 负荷小时,即把物料需求转换为对能力的需求。不但要考虑MRP的计划订单,还要结合工作中心和生产日历,同时还得考虑工作中心的停工及维修情况,最 后确定各工作中心在各时间段的可用能力,计算模型如图所示。
4. 工作中心加工物品的负荷计算方法下所示:
*负荷=该物品产量X占用该工作中心的标准工时(或台时)
*若能力-负荷>=0,则满足加工要求,能力富余(或刚好)。
*若能力-负荷<0,则不能满足加工要求,能力不足。5. 编制能力需求计划的步骤分述如下:
(1)收集数据
(2)计算负荷
(3)分析负荷情况
(4)能力/负荷调整
(5)确认能力需求计划6. 读取数据文件的方法:
def ReadMatInfo(filepath): with open(filepath,'r') as file: data:List[str] = [line.strip() for line in file.readlines()] return data
from typing import List import xlsxwriter #读取txt信息函数: def ReadMatInfo(filepath): with open(filepath,'r') as file: data:List[str] = [line.strip() for line in file.readlines()] return data #将从文件读取的物料X的已确定的MRP进行处理换行符 temp_confirmed_mrp_X = ReadMatInfo('./data_files/MRPConfirmed.txt')[0].split(' ',-1) #读取物料X的已确定MRP并加入数组 Confirmed_MRP_X = [] for i in range(len(temp_confirmed_mrp_X)-1): Confirmed_MRP_X.insert(i,int(temp_confirmed_mrp_X[i+1])) #将从文件读取的物料Y的已确定的MRP进行处理换行符 temp_confirmed_mrp_Y = ReadMatInfo('./data_files/MRPConfirmed.txt')[1].split(' ',-1) #读取物料Y的已确定MRP并加入数组 Confirmed_MRP_Y = [] for i in range(len(temp_confirmed_mrp_Y)-1): Confirmed_MRP_Y.insert(i,int(temp_confirmed_mrp_Y[i+1])) #将从文件读取的物料X的预测MRP进行处理换行符 temp_pre_mrp_X = ReadMatInfo('./data_files/MRPPredicted.txt')[0].split(' ',-1) #读取物料X的预测MRP Predicted_MRP_X = [] for i in range(len(temp_pre_mrp_X)-1): Predicted_MRP_X.insert(i,int(temp_pre_mrp_X[i+1])) #将从文件读取的物料Y的预测MRP进行处理换行符 temp_pre_mrp_Y = ReadMatInfo('./data_files/MRPPredicted.txt')[1].split(' ',-1) #读取物料Y的预测MRP Predicted_MRP_Y = [] for i in range(len(temp_pre_mrp_Y)-1): Predicted_MRP_Y.insert(i,int(temp_pre_mrp_Y[i+1])) #读取加工车间额定工作能力: #读取车间WC01的额定工作能力: workshop01 = int((ReadMatInfo('./data_files/WCRatedCapacity.txt')[0].split(' ',-1))[1]) #读取车间WC02的额定工作能力: workshop02 = int((ReadMatInfo('./data_files/WCRatedCapacity.txt')[1].split(' ',-1))[1]) #读取文件中工艺路线信息(一共有3条工艺路线) #读取第一条工艺路线X1 X1_process_num = int((ReadMatInfo('./data_files/Routing.txt')[0].split(' ',-1))[1]) X1_process_order = int((ReadMatInfo('./data_files/Routing.txt')[0].split(' ',-1))[2]) X1_workshop = (ReadMatInfo('./data_files/Routing.txt')[0].split(' ',-1))[3] X1_precess_time = int((ReadMatInfo('./data_files/Routing.txt')[0].split(' ',-1))[4]) #读取第二条工艺路线X2 X2_process_num = int((ReadMatInfo('./data_files/Routing.txt')[1].split(' ',-1))[1]) X2_process_order = int((ReadMatInfo('./data_files/Routing.txt')[1].split(' ',-1))[2]) X2_workshop = (ReadMatInfo('./data_files/Routing.txt')[1].split(' ',-1))[3] X2_precess_time = int((ReadMatInfo('./data_files/Routing.txt')[1].split(' ',-1))[4]) #读取第三条工艺路线Y Y_process_num = int((ReadMatInfo('./data_files/Routing.txt')[2].split(' ',-1))[1]) Y_process_order = int((ReadMatInfo('./data_files/Routing.txt')[2].split(' ',-1))[2]) Y_workshop = (ReadMatInfo('./data_files/Routing.txt')[2].split(' ',-1))[3] Y_precess_time = int((ReadMatInfo('./data_files/Routing.txt')[2].split(' ',-1))[4]) #计算过去需求负荷 #计算WC01的过去需求负载 past_demand_load1 = [] for i in range(len(Confirmed_MRP_X)): past_demand_load1.insert(i,Confirmed_MRP_X[i] * X1_precess_time + Confirmed_MRP_Y[i] * Y_precess_time) #计算WC02的过去需求负载 past_demand_load2 = [] for i in range(len(Confirmed_MRP_X)): past_demand_load2.insert(i,Confirmed_MRP_X[i] * X2_precess_time) #计算计划需求负荷 #计算WC01的计划需求负荷 plan_demand_load1 = [] for i in range(len(Confirmed_MRP_X)): plan_demand_load1.insert(i,Predicted_MRP_X[i] * X1_precess_time + Predicted_MRP_Y[i] * Y_precess_time) #计算WC02的计划需求负荷 plan_demand_load2 = [] for i in range(len(Confirmed_MRP_X)): past_demand_load2.insert(i,Predicted_MRP_X[i] * X2_precess_time) #计算总负荷 #计算WC01的总负荷 total_load1 = [] for i in range(len(Confirmed_MRP_X)): total_load1.insert(i,past_demand_load1[i] + plan_demand_load1[i]) #计算WC02的总负荷 total_load2 = [] for i in range(len(Confirmed_MRP_X)): total_load2.insert(i,past_demand_load2[i] + plan_demand_load2[i]) #计算平均能力 #计算WC01的平均能力 average_process_time1 = [] for i in range(len(Confirmed_MRP_X)): average_process_time1.insert(i,workshop01) #计算WC02的平均能力 average_process_time2 = [] for i in range(len(Confirmed_MRP_X)): average_process_time2.insert(i,workshop02) #计算余/欠能力 #计算WC01的余/欠能力 surplus_capacity1 = [] for i in range(len(Confirmed_MRP_X)): surplus_capacity1.insert(i,total_load1[i] - average_process_time1[i]) #计算WC02的余/欠能力 surplus_capacity2 = [] for i in range(len(Confirmed_MRP_X)): surplus_capacity2.insert(i,total_load2[i] - average_process_time2[i]) #计算累计能力 #计算WC01的累计能力 acc_capacity1 = [] acc_capacity1.insert(0,surplus_capacity1[0]) for i in range(1,len(Confirmed_MRP_X)): acc_capacity1.insert(i,surplus_capacity1[i] + surplus_capacity1[i-1]) #计算WC02的累计能力 acc_capacity2 = [] acc_capacity2.insert(0,surplus_capacity2[0]) for i in range(1,len(Confirmed_MRP_X)): acc_capacity2.insert(i,surplus_capacity2[i] + surplus_capacity2[i-1]) #将数据写入到Excel并创建表格 #创建Excel文档 print("正在进行Excel录入中:") wb = xlsxwriter.Workbook("/Users/jayphone/Desktop/calculation_of_CRP.xlsx") #创建WC01计算结果的表单 ws1 = wb.add_worksheet(name="caculation_of_WC01") calculation_item = ['过去需求量','计划需求量','总负荷量','平均能力','余/欠能力','累计能力'] headline = ['周数','1','2','3','4','5','6'] #将数据插入到表格中: ws1.write_row('A1',headline) ws1.write_column('A2',calculation_item) ws1.write_row('B2',past_demand_load1) ws1.write_row('B3',plan_demand_load1) ws1.write_row("B4",total_load1) ws1.write_row('B5',average_process_time1) ws1.write_row('B6',surplus_capacity1) ws1.write_row('B7',acc_capacity1) #创建WC02计算结果的表单 ws2 = wb.add_worksheet(name="caculation_of_WC02") calculation_item = ['过去需求量','计划需求量','总负荷量','平均能力','余/欠能力','累计能力'] headline = ['周数','1','2','3','4','5','6'] #将数据插入到表格中: ws2.write_row('A1',headline) ws2.write_column('A2',calculation_item) ws2.write_row('B2',past_demand_load2) ws2.write_row('B3',plan_demand_load2) ws2.write_row("B4",total_load2) ws2.write_row('B5',average_process_time2) ws2.write_row('B6',surplus_capacity2) ws2.write_row('B7',acc_capacity2) print("Excel录入完毕!!") wb.close() #在控制台简单输出: print("WC01结果:") print("过去需求量是:") print(past_demand_load1) print("计划需求量是:") print(plan_demand_load1) print("总负荷是:") print(total_load1) print("平均能力是:") print(average_process_time1) print("余/欠能力是:") print(surplus_capacity1) print("累计能力是:") print(acc_capacity1) print("WC02结果:") print("过去需求量是:") print(past_demand_load2) print("计划需求量是:") print(plan_demand_load2) print("总负荷是:") print(total_load2) print("平均能力是:") print(average_process_time2) print("余/欠能力是:") print(surplus_capacity2) print("累计能力是:") print(acc_capacity2)
1.在PyCharm控制台输出
2.WC01计算结果输出Excel
3.WC02计算结果输出Excel
链接:https://pan.baidu.com/s/1YyhGcHkreHXq_ePR0R67Ew 密码:byw2