主要内容

制造工厂的作业调度和资源估计

概述

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

  • 分析工作时间表对吞吐量的影响

  • 估计工人人数

模型的结构

该制造厂根据预定判定的时间表达到40种不同的产品变体的生产。每个变体需要与该特定变体相对应的两个部分,PARTA和PARTB。每个部分都经过一系列制造步骤。以下建模详细信息在模型初始化期间读取的Excel文件中指定:

  • 零件抵达的时间表

  • 沿着装配线的每个站的变体的操作时间

  • 不同工人池的工人数量

  • 检查区域的拒绝率

以下脚本读取Excel文件并初始化所有参数。

初始化模型中使用的变量excelfile =.'seestimatingassemblylinethroughput.xlsx';schedule = xlsread(Excelfile,'mfgschedule');Optims = XLSRead(Excelfile,'operations');参数= XLSREAD(Excelfile,'参数');nummfgworkers =参数(1);百分比制造领域的工人数量NumInspactworkers =参数(2);%检查区域的工人数量discard_rate =参数(4)/ 100;%质量拒绝率种子= 12345;%随机数种子modelname =.'seestimatingassemblylinethroughtrough's;Open_System(ModelName);scopes = find_system(modelname,'看起来蒙布斯克'在''blocktype''范围');cellfun(@(x)close_system(x),范围);

制造工厂主要包括两个区域:

  • 制造区

  • 检查区域

制造区:该工厂收到了工作命令即将完成。一种工作命令指定该变体ID和该特定变体所需的数量。实体生成器基于满足的预定义序列生成零件工作命令。在该示例中,序列是从MATLAB脚本生成的,或者从Excel表读取。以下脚本读取工作命令Excel文件的要求。

要求= XLSREAD(Excelfile,“需求”);

为了制造特定的变型,与变型对应的PARA和PARTB一起被纳入制造区域。在离开制造区之前,部件介绍以下步骤:

  1. Parta经历了消隐操作

  2. partb经历铣削操作

  3. 然后零件都紧固

  4. 然后组件通过整理操作

每个变体的平均操作完成时间在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 = sortrows(Optims(:, [1 2]),2);为了i = 1:长度(S1)重复=要求(S1(i),2);为了j = 1:重复新闻编组(Idx)= s1(i);idx = idx + 1;结尾结尾SentutSid =大小(计划,2)+ 1;计划(:,,安排)= newschedule';sim(modelname);Open_System([ModelName/好的部分生成的]);

close_system([modelname/好的部分生成的]);
  • 附表2:在铣床上首先是最短的工作:

该计划将在铣床上首先和最终的最长的操作在铣床上具有最短的运行时间。该想法再次是尽早将尽可能多的零件从植物的其他起始分支推入植物中。然后检查吞吐量:

Idx = 1;s2 = sortrows(Optims(:, [1 3]),2);为了i = 1:长度(S2)重复=要求(S2(i),2);为了J = 1:重复新闻编组(IDX)= S2(i);idx = idx + 1;结尾结尾SentutSid =大小(计划,2)+ 1;计划(:,,安排)= 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;结尾结尾SentutSid =大小(计划,2)+ 1;计划(:,,安排)= 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;结尾结尾SentutSid =大小(计划,2)+ 1;计划(:,,安排)= newschedule';
sim(modelname);Open_System([ModelName/好的部分生成的]);

close_system([modelname/好的部分生成的]);
  • 计划5到8:随机时间表:

Excel纸张中的时间表5至8是满足的所有随机计划工作命令。可以通过从任何计划开始生成这些计划,并使用RANDPERM功能生成随机排列。以下是“附表8”的结果:

ScheyID = 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);清除numMfgWorkersNumInspectworkers.型号名称excelfile.......时表discard_rate.范围日程要求......种子悬on参数;

也可以看看

|||||

相关的话题