主要内容

制造车间作业调度与资源估计

概述

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

  • 分析作业调度对吞吐量的影响

  • 估计工人的数量

模型结构

该制造工厂根据预先定义的时间表生产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,“需求”);

为了制造一种特殊的改型,与改型相对应的零件a和零件b被一起带入生产区域。零件在离开制造区域之前要经过以下步骤:

  1. PartA进行落料操作

  2. b部分进行铣削加工

  3. 然后把两个部分都固定好

  4. 然后,程序集执行一个finish操作

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

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

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

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

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

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

分析作业调度对吞吐量的影响

以满足工作订单具有最佳吞吐量的需求,可以生成不同的计划。在这个例子中,吞吐量是工厂生产的好产品的总数。2022世界杯八强谁会赢?名为“MfgSchedule”的表显示了一些满足工作订单.以下脚本基于某些标准生成作业计划:

  • 附表1:冲裁机上最短的工序优先:

该计划将冲裁机运行时间最短的工序排在第一位,最长的工序排在最后。这里的想法是尽早将尽可能多的零件送入工厂。然后检查吞吐量:

idx = 1;S1 = sortrows(optimes(:, [1 2]), 2);i = 1:长度(S1)重复=需求(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:长度(S2)重复=需求(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:长度(S4)重复=需求(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(cumativesum) repeat = requirements(cumativesum (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/好的部分生成的]);

从范围中我们可以看到,在任何给定的时间点,在Manufacturing和Inspection池中使用的工人的最大数量很少超过两个。将工作人员的数量减少到两个表明在更好的工作人员利用率下不会对吞吐量产生影响。

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参数

另请参阅

|||||

相关的话题

Baidu
map