Планирование заданий и оценка ресурсов для производственного Объекта

Обзор

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

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

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

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

Производственный объект обеспечивает производство 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');

Для изготовления конкретного варианта детали A и детали B, которые соответствуют варианту, объединяются в производственную область. Детали проходят следующие шаги перед выходом из производственной области:

  1. PartA проходит операцию гашения

  2. PartB проходит операцию фрезерования

  3. Обе части затем крепятся

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

Среднее время завершения операции для каждого варианта приведено в таблице 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: Кратчайшая работа сначала на машине гашения:

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

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']);

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

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;

См. также

| | | | |

Похожие темы