这个例子说明了如何制造工厂模型。该工厂包括一个装配线的,基于一个预先确定的调度进程的作业。这个例子指导您完成一个工作流程:
分析作业计划对吞吐量的影响
估计工人的人数
根据预先确定的时间表,制造厂可生产40种不同的产品。每一种变体需要两部分,对应于该特定变体的PartA和PartB。每个零件都要经过一系列的制造步骤。下面的建模细节是在一个Excel文件中指定的,在模型初始化时读取该文件:
零件到达工厂的时间表
生产线上每个工位的变型操作时间
不同工作器池中的工作器数量
检查区域的不合格率
下面的脚本读取excel文件并初始化所有参数。
初始化模型中使用的变量excelFile = [matlabroot…' /工具箱/ slde /例子/ seExampleEstimatingAssemblyLineThroughput.xlsx '];时间= xlsread (excelFile,“MfgSchedule”);optim = xlsread (excelFile,“OperationTimes”);参数= xlsread (excelFile,“参数”);numMfgWorkers =参数(1);制造业地区的工人人数。numInspectWorkers =参数(2);检查区域内工人人数%discard_rate =参数(4)/ 100;质量废品率%种子= 12345;%的随机数种子modelname =“seExampleEstimatingAssemblyLineThroughput”;open_system (modelname);范围= find_system (modelname,“LookUnderMasks”,“上”,“BlockType”,“范围”);cellfun (@ (x) close_system (x)范围);
制造工厂主要由两个区域组成:
生产区域
检验区域
生产面积:工厂收到工作订单那是要被实现的。一个工作订单指定变量ID和该特定变量所需的数量。实体生成器根据预定义的序列生成满足的部件工作订单。在本例中,序列是从MATLAB脚本生成的,或者是从excel表格读取的。以下脚本读取工作订单来自excel文件的需求。
需求= xlsread (excelFile,'要求');
为了制造一种特殊的变体,与该变体对应的PartA和PartB被一起带入制造领域。零件在离开制造区域之前要经过以下步骤:
零件经过冲裁操作
零件经过铣削加工
然后把这两个部件固定起来
然后,程序集将完成一个完成操作
每个变量的平均操作完成时间列在excel表中。假设运行完成时间有4%的变化。从制造工人池装卸零件从铣削和紧固机器。
open_system ([modelname' /铣削Operation1 ']);
close_system ([modelname' /铣削Operation1 ']);
检查面积:成品进入检验区域,产品被确认为合格或被拒收和报废。这个例子假设检查区域的拒收率为5%。检验工人池的工人从三台检验机器上装卸零件。
open_system ([modelname“/检查机”]);
close_system ([modelname“/检查机”]);
以满足工作订单需求与最佳吞吐量,可以产生不同的时间表。在这个例子中,生产量是工厂生产的好产品的总数。s manbetx 845名为“MfgSchedule”的表格显示了一些时间表,满足工作订单。以下脚本生成作业调度基于某些标准:
排料机最短作业时间:
该规程把落料机上运行时间最短的工序放在首位,最后运行时间最长的工序放在首位。这里的想法是把尽可能多的部件尽早放入工厂。然后检查吞吐量:
idx = 1;S1 = sortrows(optimes(:, [1 2]), 2);为i = 1:长度(S1)重复=需求(S1(i), 2);为j = 1:repeat 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:repeat 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);为重复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;sum(optimes(:, [2 3 5 6]), 2)], 2);为i=1:长度(累计量)repeat =需求(累计量(i), 2);为j = 1:repeat newSchedule(idx) =累计量(i);idx = idx + 1;结束结束scheduleID = size(schedule, 2) + 1;schedule(:, scheduleID) = newSchedule';
sim (modelname);open_system ([modelname/好的部分生成的]);
close_system ([modelname/好的部分生成的]);
安排5到8:随机安排:
表5到表8都是随机的表,满足工作订单。这些调度可以通过从任何调度开始并使用RANDPERM函数生成随机排列来生成。以下是“Schedule 8”的结果:
scheduleID = 9;sim (modelname);open_system ([modelname/好的部分生成的]);
close_system ([modelname/好的部分生成的]);
模拟以上所有的策略意味着时间表与“最短的工作首先在固定机器上”有关,“计划3”为我们提供了最佳的吞吐量。
在选择最佳调度之后,将估算两个worker池中所需的worker数量。我们首先有三个工人在制造区工作,三个在检查区工作。
numMfgWorkers = 3;numInspectWorkers = 3;sim (modelname);open_system ([modelname“使用中的制造业工人”]);open_system ([modelname“/正在使用的检验工人”]);open_system ([modelname/好的部分生成的]);
close_system ([modelname“使用中的制造业工人”]);close_system ([modelname“/正在使用的检验工人”]);close_system ([modelname/好的部分生成的]);
从范围中我们看到,在任何给定的时间点,生产和检验池中使用的最大工人人数很少超过两个。将工人数量减少到两个表明在更好的工人利用率下对吞吐量没有影响。
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参数;
实体发生器|实体服务器|队列|资源收购方|资源池|资源发布人