exponenta event banner

Планирование работ и оценка ресурсов для завода-изготовителя

Обзор

В этом примере показано, как моделировать завод-производитель. Завод состоит из сборочной линии, которая обрабатывает задания на основе заранее определенного графика. В этом примере рассматривается рабочий процесс для:

  • Анализ влияния расписания заданий на пропускную способность

  • Оценка количества работников

Структура модели

Завод-производитель обеспечивает производство 40 различных вариантов продуктов на основе предварительно определенных графиков. Для каждого варианта требуется две части, PartA и PartB, которые соответствуют этому конкретному варианту. Каждая деталь проходит последовательность этапов производства. В файле Excel, считываемом при инициализации модели, указываются следующие сведения о моделировании:

  • График поступления детали на завод

  • Время работы для вариантов на каждом пикете вдоль сборочной линии

  • Число работников в различных пулах работников

  • Коэффициент отклонения на участке контроля

Следующий сценарий считывает файл Excel и инициализирует все параметры.

% Initialization of variables used in the model
excelFile   = 'seEstimatingAssemblyLineThroughput.xlsx';

schedule    = xlsread(excelFile, 'MfgSchedule');
optimes     = xlsread(excelFile, 'OperationTimes');
parameters  = xlsread(excelFile, 'Parameters');

numMfgWorkers = parameters(1); 		% number of workers in Manufacturing area
numInspectWorkers = parameters(2); 	% number of workers in Inspection area
discard_rate = parameters(4)/100; 	% quality rejection rate
seed = 12345;                     	% random number seed
modelname = 'seEstimatingAssemblyLineThroughput';
open_system(modelname);
scopes = find_system(modelname,'LookUnderMasks','on','BlockType','Scope');
cellfun(@(x)close_system(x), scopes);

Завод-производитель в основном состоит из двух областей:

  • Область «Производство»

  • Зона контроля

Производственная область: завод получает заказы на работу, которые должны быть выполнены. В заказе на выполнение работ указывается идентификатор варианта и требуемое количество для данного варианта. Генераторы объектов генерируют детали на основе заранее определенной последовательности, удовлетворяющей заданию. В этом примере последовательность генерируется из сценария MATLAB или считывается из таблицы Excel. Следующий сценарий считывает требования заказа на работу из файла Excel.

requirements = xlsread(excelFile, 'Requirements');

Для изготовления конкретного варианта в производственную область включаются компоненты PartA и PartB, соответствующие этому варианту. Перед выходом из производственной области детали проходят следующие шаги:

  1. Часть A проходит операцию заглушки

  2. Деталь B проходит операцию фрезерования

  3. Затем обе детали закрепляют.

  4. Затем сборка проходит операцию чистовой обработки.

Среднее время завершения операции для каждого варианта приводится в таблице Excel. Предполагается изменение времени завершения работы на 4%. Рабочие из производственного пула рабочих загружают и выгружают детали из фрезерных и крепежных станков.

open_system([modelname '/Milling Operation1']);

close_system([modelname '/Milling Operation1']);

Область контроля: конечный продукт поступает в область контроля, где продукт либо сертифицирован как исправный, либо отклонен и списан в брак. В этом примере предполагается коэффициент отклонения 5% в области контроля. Работники из пула инспекторов загружают и выгружают детали из трех инспекционных машин.

open_system([modelname '/Inspection Machines']);

close_system([modelname '/Inspection Machines']);

Анализ влияния графика заданий на пропускную способность

Для удовлетворения требований заказа-наряда с максимальной пропускной способностью могут быть созданы различные графики. В этом примере пропускная способность представляет собой общее количество хороших продуктов, произведенных заводом. На листе «MfgSchedule» показаны несколько графиков, удовлетворяющих заданию. Следующие сценарии генерируют расписания заданий на основе определенных критериев:

  • Приложение 1: Кратчайшее задание сначала на гаечном станке:

Этот график ставит операцию, имеющую самое короткое время работы, на Blanking машины первой и самое длинное в конце. Идея здесь заключается в том, чтобы затолкать на завод как можно раньше как можно больше деталей. Затем исследуют пропускную способность:

idx = 1;
S1 = sortrows(optimes(:, [1 2]), 2);
for i = 1:length(S1)
    repeat = requirements(S1(i), 2);
    for j = 1:repeat
        newSchedule(idx) = S1(i);
        idx = idx + 1;
    end
end
scheduleID = size(schedule, 2) + 1;
schedule(:, scheduleID) = newSchedule';
sim(modelname);
open_system([modelname '/Good Parts Generated']);

close_system([modelname '/Good Parts Generated']);
  • Расписание 2: Кратчайшее задание сначала на фрезерных станках:

Этот график ставит операцию, имеющую самое короткое время работы на фрезерных станках, первым и самым длинным в конце. Идея снова состоит в том, чтобы как можно раньше вытолкнуть как можно больше деталей на завод из другой стартовой ветви завода. Затем исследуют пропускную способность:

idx = 1;
S2 = sortrows(optimes(:, [1 3]), 2);
for i = 1:length(S2)
    repeat = requirements(S2(i), 2);
    for j = 1:repeat
        newSchedule(idx) = S2(i);
        idx = idx + 1;
    end
end
scheduleID = size(schedule, 2) + 1;
schedule(:, scheduleID) = newSchedule';
sim(modelname);
open_system([modelname '/Good Parts Generated']);

close_system([modelname '/Good Parts Generated']);
  • Расписание 3: Кратчайшее задание сначала на крепежной машине:

Этот график ставит операцию, имеющую самое короткое время работы, на крепежную машину первой и самое длинное в конце. Идея здесь состоит в том, чтобы вытолкнуть детали из машины с узкими местами как можно раньше. Затем исследуют пропускную способность:

idx = 1;
S4 = sortrows(optimes(:, [1 5]), 2);
for i = 1:length(S4)
    repeat = requirements(S4(i), 2);
    for j = 1:repeat
        newSchedule(idx) = S4(i);
        idx = idx + 1;
    end
end
scheduleID = size(schedule, 2) + 1;
schedule(:, scheduleID) = newSchedule';
sim(modelname);
open_system([modelname '/Good Parts Generated']);

close_system([modelname '/Good Parts Generated']);%%
  • Приложение 4: Кратчайшее задание сначала с использованием совокупного времени изготовления:

Этот график учитывает совокупное время выполнения на всех машинах. Операция, имеющая самое короткое совокупное время выполнения, ставится на первое место, а самая длинная идет до конца. Затем исследуют пропускную способность:

idx = 1;
cumulativeSum = sortrows([optimes(:, 1) sum(optimes(:, [2 3 5 6]), 2)], 2);
for i=1:length(cumulativeSum)
    repeat = requirements(cumulativeSum(i), 2);
    for j = 1:repeat
        newSchedule(idx) = cumulativeSum(i);
        idx = idx + 1;
    end
end
scheduleID = size(schedule, 2) + 1;
schedule(:, scheduleID) = newSchedule';
sim(modelname);
open_system([modelname '/Good Parts Generated']);

close_system([modelname '/Good Parts Generated']);
  • Расписания с 5 по 8: Случайные графики:

Графики 5-8 в таблице Excel - это все случайные графики, которые удовлетворяют заказу на работу. Эти расписания можно генерировать, начиная с любого расписания и генерируя случайную перестановку с помощью функции RANDPERM. Ниже приведены результаты для «Приложения 8»:

scheduleID = 9;
sim(modelname);
open_system([modelname '/Good Parts Generated']);

close_system([modelname '/Good Parts Generated']);

Моделирование всех вышеперечисленных стратегий предполагает, что график, связанный с «Кратчайшей работой сначала на крепежной машине», «График 3» дает нам лучшую пропускную способность.

Оценка количества работников

После выбора наилучшего расписания производится оценка количества работников, необходимых в двух пулах работников. Мы начинаем с трех работников, работающих в производственной зоне и трех в инспекционной зоне.

numMfgWorkers = 3;
numInspectWorkers = 3;
sim(modelname);
open_system([modelname '/Manufacturing Workers in Use']);
open_system([modelname '/Inspection workers in Use']);
open_system([modelname '/Good Parts Generated']);

close_system([modelname '/Manufacturing Workers in Use']);
close_system([modelname '/Inspection workers in Use']);
close_system([modelname '/Good Parts Generated']);

Из областей мы видим, что максимальное количество работников в пуле производства и контроля, используемых в любой данный момент времени, редко превышает два. Сокращение числа работников до двух свидетельствует об отсутствии влияния на пропускную способность при лучшем использовании работников.

numMfgWorkers = 2;
numInspectWorkers = 2;

sim(modelname);
open_system([modelname '/Manufacturing Workers in Use']);
open_system([modelname '/Inspection workers in Use']);
open_system([modelname '/Good Parts Generated']);

close_system([modelname '/Manufacturing Workers in Use']);
close_system([modelname '/Inspection workers in Use']);
close_system([modelname '/Good Parts Generated']);

Заключение

В этом примере показано, как мы можем использовать SimEvents для моделирования магазина работ. Использование скриптов MATLAB позволяет экспериментировать и приходить к лучшему расписанию.

% The following script closes and cleans up the model
bdclose(modelname);
clear numMfgWorkers numInspectWorkers modelname excelFile ...
    scheduleID discard_rate scopes schedule requirements ...
	seed optimes parameters;

См. также

| | | | |

Связанные темы