此示例显示了如何建模制造工厂。该工厂包括基于预先确定的计划处理作业的装配线。此示例浏览您的工作流程:
分析工作时间表对吞吐量的影响
估计工人的数量
该制造厂根据预定判定的时间表达到40种不同的产品变体的生产。每个变体需要与该特定变体相对应的两个部分,PARTA和PARTB。每个部分都经过一系列制造步骤。以下建模详细信息在模型初始化期间读取的Excel文件中指定:
零件到达工厂的时间表
沿着装配线的每个站的变体的操作时间
不同工人池的工人数量
检查区域的废品率
下面的脚本读取excel文件并初始化所有参数。
模型中使用的变量的%初始化excelfile =.'seestimatingassemblylinethroughput.xlsx';schedule = xlsread(Excelfile,'mfgschedule');Optims = XLSRead(Excelfile,“OperationTimes”);参数= XLSREAD(Excelfile,'参数');numMfgWorkers =参数(1);百分比制造领域的工人数量NumInspactworkers =参数(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将一起带入制造区域。零件在离开制造区域前要经过以下步骤:
零件经过冲裁操作
partb经历铣削操作
然后零件都紧固
然后组件通过整理操作
每个变种的平均操作完成时间列在excel表格中。假设作业完成时间有4%的变化。生产车间的工人从铣床和紧固机上装卸零件。
open_system ([modelname'/铣削操作1']);
close_system ([modelname'/铣削操作1']);
检查区域:成品进入检验区域,要么被认定为合格,要么被拒绝报废。本例假设检查区域的废品率为5%。检验工人池的工人从三台检验机器上装卸零件。
open_system ([modelname'/检查机器']);
close_system ([modelname'/检查机器']);
见面工作订购具有最佳吞吐量的需求,可以生成不同的时间表。在本例中,吞吐量是工厂生产的好产品的总数。s manbetx 845名为“MfgSchedule”的表单显示了一些满足工作订购。以下脚本根据某些标准生成作业计划:
附表1:消隐机上最短的工作首先:
该计划将在消隐机上的最短运行时间和最后一个最长的操作进行操作。这里的想法是尽早将尽可能多的零件推入植物中。然后检查吞吐量:
idx = 1;S1 = sortross (optimes(:,[2]), 2); / /买入对于i = 1:长度(S1)重复=要求(S1(i),2);对于j = 1:repeat newSchedule(idx) = 1;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:重复新闻编组(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(Optims(:, [1 5]),2);对于i = 1:长度(S4)重复=要求(S4(i),2);对于J = 1:重复新闻编组(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;umulationsum = sortrows([ofterims(:,1)和(优化时间(:, [2 3 5 6]),2)],2);对于i = 1:长度(累积率)重复=要求(Cumulativeum(i),2);对于J = 1:重复新闻编辑(IDX)= Cumulativesum(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函数生成随机排列来生成。以下是“附表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'/好的部件生成']);
从范围内,我们看到,在任何给定时间点使用的制造和检查池中的最大工作数很少超过两个。减少工人的数量表明,没有对更好的工人使用的吞吐量没有影响。
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);清晰的nummfgworkers.NumInspectworkers.型号名称excelfile.…时表discard_rate范围时间表要求…种子悬on参数;
实体生成器|实体服务器|队列|资源收货人|资源池|资源发布人