Опубликован: 15.02.2013 | Доступ: свободный | Студентов: 256 / 0 | Длительность: 16:52:00
ISBN: 978-5-9556-0146-5
Лекция 7:

Модель функционирования предприятия

Имитация работы пунктов сборки изделий

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

Для размещения объектов имитации работы пунктов сборки изделий создайте новый класс активного объекта Sborka.

  1. На панели Проект щелкните Main правой кнопкой мыши и выберите из контекстного меню Создать/Класс активного объекта.
  2. Откроется окно Новый класс активного объекта.
  3. В поле Имя: задайте имя нового класса Sborka.
  4. Если нужно, в поле Описание: введите описание сущности, моделируемой этим классом.
  5. Щелкните кнопку Готово.

Создайте область просмотра на диаграмме класса Sborka для размещения объектов сегмента Пункты сборки изделий.

  1. В Палитре выделите Презентация. Перетащите элемент Область просмотра.
  2. Перейдите на страницу Основные панели Свойства.
  3. В поле Имя: введите Sbor.
  4. Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 0, Y: 0, Ширина: 820, Высота: 550.
  5. Перетащите элемент Скруглённый прямоугольник. В нём мы разместим все элементы сегмента. Оставьте имя, предложенное системой.
  6. Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 10, Y: 60, Ширина: 800, Высота: 480.

Согласно назначению пунктов сборки изделий для связи их с другими сегментами модели необходимо иметь: четыре порта для приема готовых блоков с постов контроля и один порт - для отправки собранных изделий на стенды контроля. Также нужен порт для приема бракованных изделий с целью определения и замены в них забракованных блоков и один порт - для отправки забракованных блоков после их замены на склад забракованных блоков.

  1. Из Палитры Основная перетащите элемент Порт и разместите сверху в крайнем левом ряду (рис. 6.8).
  2. На странице Основные панели Свойства имя port замените именем ГотБлок1. Скопируйте элемент Порт с именем ГотБлок1.
  3. Вставьте три элемента Порт (см. рис. 6.8). При вставке последовательно будут изменяться их имена: ГотБлок2, ГотБлок3, ГотБлок4.
  4. Из Палитры Основная перетащите еще три элемента Порт, разместите их и дайте имена как на рис. 6.8.
  5. Вернитесь на диаграмму класса Main.
  6. На панели Проект выделите Sborka, перетащите на диаграмму класса Main элемент sborka, разместите и соедините так, как на рис. 6.9. Порт БракБл соедините с объектом sink сегмента Склад бракованных блоков.
  7. Элемент диаграммы активного класса Sborka создан. Возвратитесь на диаграмму класса Sborka.

Для реализации сегмента имитации работы пунктов сборки изделий нам потребуются объекты, но прежде мы рассмотрим вариант построения этого сегмента.

Размещение элементов Порт на объекте Sborka

Рис. 6.8. Размещение элементов Порт на объекте Sborka
Добавлен элемент диаграммы класса Sborka

Рис. 6.9. Добавлен элемент диаграммы класса Sborka

Сборка изделия начинается тогда, когда будут готовы четыре блока (по одному каждого из четырех типов). Полагаем, что время готовности блоков различное. Значит, нужно использовать такие объекты AnyLogic, которые предназначены для синхронизации движения заявок (блоков). Объекты класса Match предназначены именно для синхронизации движения двух заявок.

После готовности четырех блоков для дальнейщей имитации процесса сборки нужно эти четыре заявки объединить в одну, и интерпретировать её как изделие. В AnyLogic имеются объекты некоторых классов, которые позволяют осуществить нужное нам объединение. Применим объекты класса Combine, позволяющие из двух заявок получить одну.

Процесс объединения будет происходить по мере готовности блоков, значит, на пункте сборки будет создаваться очередь, для имитации которой нужно использовать объект queue.

Для имитации непосредственно процесса сборки следует взять объект delay, а для разделения потока изделий на собранные первично и на изделия с заменными блоками после браковки - объект selectOutPut.

Реализуйте часть сегмента имитации работы пунктов сборки.

  1. Перетащите элемент Прямоугольник. Оставьте имя, предложенное системой.
  2. Перейдите на страницу Дополнительные панели Свойства. Введите в поля X: 320, Y: 80, Ширина: 340, Высота: 230.
  3. Из библиотеки Enterprise Library перетащите четыре объекта match и три объекта combine. Расположите и соедините их так, как на рис. 6.10.
  4. Перетащите объекты queue, delay, selectOutPut, разместите, соедините и дайте им имена также согласно рис. 6.10.

Поочередно выделите каждый из этих объектов и на страницах Основные панели Свойства установите для:

  • match…match3:
    • Классы заявок: Вход1, Вход2: Product, Product
    • Условия соответствия true
    • Максимальная вместимость 1
    • Максимальная вместимость 2
  • combine…combine2:
    • Классы заявок: Вход1, Вход2, Выход: Product, Product, Product
    • Объединенная заявка entity1
  • queue:
    • Класс заявки: Product
    • Максимальная вместимость
  • selectOutPut:
    • Класс заявки: Product
    • Выход true выбирается При выполнении условия
    • Условие entity.sign1 == 0

объекты match и match1 обеспечивают синхронизацию движения блоков 1 и 2, 3 и 4 соответственно. А объекты match2 и match3 - блоков 1 и 3, 2 и 4 соответственно. Таким образом, обеспечивается синхронизация движения четырех блоков.

Указание свойства entity1 в объектах combine…combine2 позволяет получить на выходе сначала combine, а потом combine2 заявку, имитирующую изначально блок 1. Но теперь эта заявка будет имитировать изделие. Поэтому только для нее ранее было определено значение поля entity.timeSbor (см. табл. 6.3).

Изделия после элемента пунктСборки разделяются на два потока: собранные изделия первично (entity.sign1=0) и изделия с замененными блоками (entity.sign1=2).

Фрагмент сегмента имитации работы пунктов сборки

увеличить изображение
Рис. 6.10. Фрагмент сегмента имитации работы пунктов сборки

Разделение, осуществляемое объектом selectOutPut по условию entity.sign1==0, нужно для учёта количества изделий с заменёнными блоками и количества заменённых блоков.

Свойства объекта delay установите согласно табл. 6.6.

Таблица 6.6.
Имя Свойства Значения
пунктборки Отображать имя Установите флажок
Класс заявки Product
Задержка задаётся Явно
Время задержки entity.timeSbor
Вместимость get_Main().kolPunSborki
Действие при выходе if (entity.sign1 == 0)
{get_Main().kolSobrIzd++;
get_Main().costSborIzd += get_Main().stSborki;
entity.cost += get_Main().stSborki;}
if (entity.sign1 == 2)
{if (entity.numBlBrak1== 1)
{get_Main().zamBlock1++;
entity.cost += get_Main().stZamBlock1;
get_Main().costSborIzd += get_Main().stZamBlock1;}
if (entity.numBlBrak2 == 1)
{get_Main().zamBlock2++;
entity.cost += get_Main().stZamBlock2;
get_Main().costSborIzd += get_Main().stZamBlock2;}
if (entity.numBlBrak3 == 1)
{get_Main().zamBlock3++;
entity.cost += get_Main().stZamBlock3;
get_Main().costSborIzd += get_Main().stZamBlock3;}
if (entity.numBlBrak4 == 1)
{get_Main().zamBlock4++;
entity.cost += get_Main().stZamBlock4;
get_Main().costSborIzd += get_Main().stZamBlock4;}
get_Main().kolZamIzd++;}

Продолжим построение сегмента имитации работы пунктов сборки изделий (рис. 6.11).

Сегмент имитации пунктов сборки изделий

увеличить изображение
Рис. 6.11. Сегмент имитации пунктов сборки изделий

Бракованные изделия поступают через порт БракИзд. В заявке, имитирующей такое изделие, поле etity.sign1 = 2. В одном из полей etity.numBlBrak1 … etity.numBlBrak4 этой же заявки также записана единица. Запись произведена при отбраковке на стендах контроля или пунктах приёма изделий. Это мы сделаем (запишем) позже при построении этих сегментов. Для определения, какой из блоков 1 … 4 забракован в изделии, нужно использовать объект selectOutput5. Этот объект в отличие от объекта selectOutput позволяет проверять пять условий и в зависимости от результата проверки направляет заявку на один из пяти выходов (можно создать объект selectOutput(N) на один вход и N выходов, использовав один объект exit и N объектов enter).

Готовые блоки поступают через порты ГотБл1 … ГотБл4. Поэтому их надо было бы соединить с соответствующими входами объектов match … match1. Но в забракованном изделии нужно заменить какой-то из блоков. Значит, в случае наличия забракованного изделия надо направить из поступающих блоков соответствующий блок на замену. Сделать это можно с использованием объектов selectOutPut. Каждый порт ГотБл1 … ГотБл4 соединить с входом соответствующего объекта selectOutPut. Выходы true этих объектов соединить с соответсвующими входами объектов match … match1. Таким образом, с выходов true готовые блоки будут направляться для первичной сборки изделий, а с выходов false - для замены бракованных блоков. В качестве условия разделения потоков можно использовать простые переменные БрИздБл1 … БрИздБл4. Например, если БрИздБл2 ? 0, то имеется забракованное изделие с блоком 2.

Для дальнейшей реализации процесса замены блока нужно объединить две заявки - имитирующую забракованное изделие и имитирующую блок для замены - в одну заявку. Для объединения двух заявок в одну воспользуйтесь уже известными вам объектами combine. Выходы объекта selectOutput5 соединить с входами delay, а выход каждого из них - с первыми входами объектов combine.

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

Как уже отмечалось ранее, изделия после пунктов сборки разделяются на два потока.

Собранные первично изделия с выхода true объекта selectOutPut направляются на стенды контроля, поэтому этот выход нужно соединить с портом СобрИзд. Изделие с заменённым блоком нужно вновь направить на стенды контроля. В тоже время его нужно учесть, как забракованный блок и отправить на склад забракованных блоков. Значит, необходимо из одной заявки сделать две. Для этого используйте объект split. Один выход этого объекта соедините с портом БракБл, а другой - с портом СобрИзд.

Выполните изложенные рекомендации практически. Перетащите четыре объекта класса SelectOutPut (или перетащите один объект, а остальные три скопируйте), один объект класса SelectOutPut5, четыре объекта классов Queue и Combine, один объект класса Split и четыре простых переменных. Разместите, дайте им имена и соедините так, как на рис. 6.11.

Поочередно выделите новые объекты и установите их свойства согласно табл. 6.7.

Таблица 6.7.
Свойства Значение
selectOutPut … selectOutPut3
Имя ГотБлок1
Выход true выбирается При выполнении условия
Условие БракИздБл1 == 0
Имя ГотБлок2
Выход true выбирается При выполнении условия
Условие БракИздБл2 == 0
Имя ГотБлок3
Выход true выбирается При выполнении условия
Условие БракИздБл3 == 0
Имя ГотБлок4
Выход true выбирается При выполнении условия
Условие БракИздБл4 == 0
selectOutput5
Имя БракИзделия
Использовать Условия
Условие 0 entity.numBlBrak1 == 1
Условие 1 entity.numBlBrak2 == 1
Условие 2 entity.numBlBrak3 == 1
Условие 3 entity.numBlBrak4 == 1
match
Имя синхрБлок_1_2
Классы заявок: Вход1, Вход2: Product, Product
Условие соответствия true
Максимальная вместимость 1 Установить флажок
Максимальная вместимость 2 Установить флажок
Имя синхрБлок_3_4
Классы заявок: Вход1, Вход2: Product, Product
Условие соответствия true
Максимальная вместимость 1 Установить флажок
Максимальная вместимость 2 Установить флажок
Имя синхрБлок_1_3
Классы заявок: Вход1, Вход2: Product, Product
Условие соответствия true
Максимальная вместимость 1 Установить флажок
Максимальная вместимость 2 Установить флажок
Имя синхрБлок_2_4
Классы заявок: Вход1, Вход2: Product, Product
Условие соответствия true
Максимальная вместимость 1 Установить флажок
Максимальная вместимость 2 Установить флажок
combine
Имя издБлок1
Классы заявок: Вход1, Вход2, Выход Product, Product, Product
Действие при входе 1 if (entity.numBlBrak1 == 1)
БрИздБл1 ++;
Объединенная заявка entity1
Действие при выходе if (entity.numBlBrak1 == 1)
БрИздБл1 --;
entity.cost += get_Main().stZamBlock1;
entity.timeSbor =
exponential(1/get_Main().
timeZamBlock1);
Имя издБлок2
Классы заявок: Вход1, Вход2, Выход Product, Product, Product
Действие при входе 1 if (entity.numBlBrak2 == 1)
БрИздБл2 ++;
Объединенная заявка entity1
Действие при выходе if (entity.numBlBrak2 == 1)
БрИздБл2 --;
entity.cost += get_Main().stZamBlock2;
entity.timeSbor =
exponential(1/get_Main().
timeZamBlock2);
Имя издБлок3
Классы заявок: Вход1, Вход2, Выход Product, Product, Product
Действие при входе 1 if (entity.numBlBrak1 == 1)
БрИздБл3 ++;
Объединенная заявка entity1
Действие при выходе if (entity.numBlBrak3 == 1)
БрИздБл3 --;
entity.cost += get_Main().stZamBlock3;
entity.timeSbor =
exponential(1/get_Main().
timeZamBlock3);
Имя издБлок4
Классы заявок: Вход1, Вход2, Выход Product, Product, Product
Действие при входе 1 if (entity.numBlBrak4 == 1)
БрИздБл1 ++;
Объединенная заявка entity1
Действие при выходе if (entity.numBlBrak4 == 1)
БрИздБл4 --;
entity.cost += get_Main().stZamBlock4;
entity.timeSbor =
exponential(1/get_Main().
timeZamBlock4);
split
Классы заявок: Product, Product
Количество копий 1
Новая заявка (копия) new Product()
Действие при выходе копии entity.sign1 = 0;
entity.cost = original.cost;
Алексей Гроссман
Алексей Гроссман

Здравствуйте, прошел курс "Концептуальное проектирование систем в AnyLogic и GPSS World". Можно ли получить по нему сертификат? У нас в институте требуют сертификаты для создания портфолио.

Елена Блинаева
Елена Блинаева