主要内容

制造厂作业调度与资源估计

概述

这个例子向您展示了如何建模制造工厂。工厂由一条装配线组成,装配线根据预先确定的时间表处理工作。这个例子将带领你完成以下工作流程:

  • 分析作业计划对吞吐量的影响

  • 估计工人的数量

模型的结构

制造工厂根据预先设定的时间表生产40种不同的产品。每一种变体都需要两部分,PartA和PartB,与特定的变体相对应。每个部件都要经过一系列的制造步骤。以下建模细节是在模型初始化时读取的Excel文件中指定的:

  • 零件到达工厂的时间表

  • 在装配线上每个站的变异型的操作时间

  • 不同工作人员池中的工作人员数量

  • 检查区拒收率

下面的脚本读取excel文件并初始化所有参数。

%初始化模型中使用的变量excelFile =“seEstimatingAssemblyLineThroughput.xlsx”;时间= xlsread (excelFile,“MfgSchedule”);optim = xlsread (excelFile,“OperationTimes”);参数= xlsread (excelFile,“参数”);numMfgWorkers =参数(1);%生产车间工人人数numInspectWorkers =参数(2);检验区工人人数%discard_rate =参数(4)/ 100;质量废品率%种子= 12345;%随机数种子modelname =“seEstimatingAssemblyLineThroughput”;open_system (modelname);范围= find_system (modelname,“LookUnderMasks”“上”“BlockType”“范围”);cellfun (@ (x) close_system (x)范围);

制造工厂主要由两个区域组成:

  • 生产区域

  • 检验区域

生产面积:工厂收到工作订单这些都是要实现的。一个工作订单指定该特定变体的变体ID和所需数量。实体生成器根据预定义的序列生成部件,该序列满足工作订单.在本例中,序列要么是从MATLAB脚本生成,要么是从excel表中读取。下面的脚本读取工作订单要求从excel文件。

需求= xlsread (excelFile,“需求”);

为了制造特定的变型,与变型相对应的PartA和PartB被一起带入制造区域。部件在离开制造区域之前,要经过以下步骤:

  1. PartA进行下料操作

  2. 零件b进行铣削操作

  3. 然后两部分都被固定

  4. 组装然后通过一个精加工操作

每个变量的平均操作完成时间列在excel表格中。假设作业完成时间有4%的变化。来自制造工人池的工人从铣削和紧固机器上装卸零件。

open_system ([modelname' /铣削Operation1 ']);

close_system ([modelname' /铣削Operation1 ']);

检查面积:成品进入检验区域,在那里产品要么被认证为合格,要么被拒绝并报废。本例假设检查区域的拒绝率为5%。检验工人从三台检验机器上装卸零件。

open_system ([modelname' /检查机器的]);

close_system ([modelname' /检查机器的]);

作业计划对吞吐量的影响分析

以满足工作订单具有最佳吞吐量的需求,可以生成不同的调度。在这个例子中,吞吐量是工厂生产的好产品的总数。下载188bet金宝搏名为“MfgSchedule”的工作表显示了几个满足工作订单.下面的脚本根据某些条件生成作业调度:

  • 附表1:冲裁机最短工作时间:

该计划将运行时间最短的工序放在落料机上,最长的工序放在最后。这里的想法是尽早将尽可能多的部件推进工厂。然后检查吞吐量:

idx = 1;S1 = sortrows(optimes(:, [1 2]), 2);i = 1:length(S1) repeat = requirements(S1(i), 2);j = 1:重复newSchedule(idx) = S1(i);Idx = Idx + 1;结束结束scheduleID = size(schedule, 2) + 1;schedule(:, scheduleID) = newSchedule';sim (modelname);open_system ([modelname/好的部分生成的]);

close_system ([modelname/好的部分生成的]);
  • 附表2:铣床最短工作时间:

这个时间表把运行时间最短的工序放在铣床上,最长的工序放在最后。同样的想法是尽早将尽可能多的部件从工厂的另一个起始分支推送到工厂。然后检查吞吐量:

idx = 1;S2 = sortrows(optimes(:, [1 3]), 2);i = 1:length(S2) repeat = requirements(S2(i), 2);j = 1:重复newSchedule(idx) = S2(i);Idx = Idx + 1;结束结束scheduleID = size(schedule, 2) + 1;schedule(:, scheduleID) = newSchedule';sim (modelname);open_system ([modelname/好的部分生成的]);

close_system ([modelname/好的部分生成的]);
  • 附表3:先完成紧固机的最短工作:

该计划将运行时间最短的工序放在紧固机的前面,最长的工序放在最后。这里的想法是尽早将零件从瓶颈机器中推出。然后检查吞吐量:

idx = 1;S4 = sortrows(optimes(:, [1 5]), 2);i = 1:length(S4) repeat = requirements(S4(i), 2);j = 1:重复newSchedule(idx) = S4(i);Idx = Idx + 1;结束结束scheduleID = size(schedule, 2) + 1;schedule(:, scheduleID) = newSchedule';sim (modelname);open_system ([modelname/好的部分生成的]);

close_system ([modelname/好的部分生成的]);%%
  • 附表4:使用累积制造时间的最短工作优先:

这个调度考虑了所有机器上的累积运行时间。累积运行时间最短的操作放在最前面,最长的操作放到最后。然后检查吞吐量:

idx = 1;cumulativeSum = sortrows([optimes(:, 1) sum(optimes(:, [2 3 5 6]), 2)], 2);i=1:length(cumulativeSum) repeat = requirements(cumulativeSum(i), 2);j = 1:重复newSchedule(idx) = cumulativeSum(i);Idx = Idx + 1;结束结束scheduleID = size(schedule, 2) + 1;schedule(:, scheduleID) = newSchedule';
sim (modelname);open_system ([modelname/好的部分生成的]);

close_system ([modelname/好的部分生成的]);
  • 日程5 - 8:随机日程:

excel表格中的时间表5到8都是随机的,满足工作订单.这些调度可以通过使用RANDPERM函数从任何调度开始并生成随机排列来生成。以下是“附表8”的结果:

scheduleID = 9;sim (modelname);open_system ([modelname/好的部分生成的]);

close_system ([modelname/好的部分生成的]);

模拟上述所有策略表明,时间表与“在紧固机上最短的工作优先”有关,“附表3”给了我们最好的吞吐量。

估算工人人数

在选择最佳调度之后,将估计两个工作池中所需的工作人员数量。我们从三个在制造区工作的工人和三个在检查区工作的工人开始。

numMfgWorkers = 3;numInspectWorkers = 3;sim (modelname);open_system ([modelname“/使用中的制造工人”]);open_system ([modelname'/正在使用的检验工人']);open_system ([modelname/好的部分生成的]);

close_system ([modelname“/使用中的制造工人”]);close_system ([modelname'/正在使用的检验工人']);close_system ([modelname/好的部分生成的]);

从范围中我们看到,在任何给定的时间点,制造和检验池中使用的工人的最大数量很少超过两个。将worker的数量减少到2个,表明使用更好的worker利用率对吞吐量没有影响。

numMfgWorkers = 2;numInspectWorkers = 2;sim (modelname);open_system ([modelname“/使用中的制造工人”]);open_system ([modelname'/正在使用的检验工人']);open_system ([modelname/好的部分生成的]);

close_system ([modelname“/使用中的制造工人”]);close_system ([modelname'/正在使用的检验工人']);close_system ([modelname/好的部分生成的]);

结论

这个例子展示了我们如何使用SimEvents来建模一个工作车间。使用MATLAB脚本可以让我们进行实验,并达到最佳的时间表。

下面的脚本关闭并清理模型bdclose (modelname);清晰的numMfgWorkersnumInspectWorkersmodelnameexcelFile...scheduleIDdiscard_rate作用域时间表需求...种子optim参数

另请参阅

|||||

相关的话题