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

Обзор

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

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

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

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

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

  • Расписание прибытия части в объект

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

  • Количество рабочих в различных пулах рабочего

  • Уровень отклонения в инспекционной области

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

% Initilization of variables used in the model
excelFile   = [matlabroot...
  '/toolbox/slde/examples/seExampleEstimatingAssemblyLineThroughput.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 = 'seExampleEstimatingAssemblyLineThroughput';
open_system(modelname);
scopes = find_system(modelname,'LookUnderMasks','on','BlockType','Scope');
cellfun(@(x)close_system(x), scopes);

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

  • Область Manufacturing

  • Область Inspection

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

requirements = xlsread(excelFile, 'Requirements');

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

  1. PartA проходит Изготовление заготовок

  2. PartB проходит операцию Milling

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

  4. Блок затем проходит операцию Finishing

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

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

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

Область Inspection: готовое изделие вводит область Inspection, где продукт, как или сертифицируют, в порядке или отклоняется и фрагментируется. Этот пример принимает 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' дает нам лучшую пропускную способность.

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

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

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;
Для просмотра документации необходимо авторизоваться на сайте