主要内容

制造工厂作业调度与资源估算

概述

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

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

  • 估计工人的数量

模型结构

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

  • 零件到达工厂的时间表

  • 装配线上各工位变体的操作时间

  • 不同工人池中的工人数

  • 检验区域的废品率

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

模型中使用的变量的初始化excelFile =“seEstimatingAssemblyLineThroughput.xlsx”;schedule = xlsread(excelFile,“MfgSchedule”);optimes = xlsread(excelFile,“OperationTimes”);参数= xlsread(excelFile,“参数”);numMfgWorkers = parameters(1);生产区域的工人人数numInspectWorkers = parameters(2);检查区域的工人人数%Discard_rate = parameters(4)/100;质量废品率Seed = 12345;%随机数种子modelname =“seEstimatingAssemblyLineThroughput”;open_system (modelname);scope = 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 ']);

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

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

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

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

为了迎接工作订单具有最佳吞吐量的需求,可以生成不同的计划。在这个例子中,吞吐量是工厂生产的好产品的总数。s manbetx 845名为“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: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);j = 1:repeat 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;cumativesum = sortrows([optimes(:, 1) sum(optimes(:, [2 3 5 6]), 2)], 2);i=1:长度(cumativesum) repeat =需求(cumativesum (i), 2);j = 1:repeat newSchedule(idx) = cumativesum (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'/生成好部件']);

从范围中我们可以看到,在任何给定的时间点,制造和检查池中使用的工人的最大数量很少超过两个。将工人数量减少到两个表明,在提高工人利用率的情况下,对吞吐量没有影响。

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);清晰的numMfgWorkersnumInspectWorkersmodelnameexcelFilescheduleIDdiscard_rate作用域时间表需求种子optim参数

另请参阅

|||||

相关的话题