Модель технологического процесса на предприятии

Моделирование производственного процесса предприятия, состоящего из нескольких фаз. Создание модели цеха предприятия, производящего обработку деталей и сборку изделий. Изменение интенсивности поставки деталей. Моделирование выхода оборудования из строя.

Рубрика Производство и технологии
Вид курсовая работа
Язык русский
Дата добавления 04.12.2017
Размер файла 721,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Курсовая работа по теме:

  • Модель технологического процесса на предприятии
    • Содержание
      • производственный моделирование цех деталь
        • Цель проекта
        • Постановка задачи
        • Задание 1 Модель обрабатывающей станции
        • Задание 2 Поставка и обработка заготовок деталей
        • Задание 3 Анимация поставки и обработки заготовок
        • Задание 4 Два типа заготовок (деталей)
        • Задание 5 Сортировка деталей
        • Задание 6 Блокировка станции
        • Задание 7 Изменение интенсивности поставки деталей
        • Задание 8 Сборочная станция
        • Задание 9 Сбор статистики производительности цеха
        • Задание 10 Моделирование выхода оборудования из строя
        • Задание 11 Доработка модели

Цель проекта

• Моделирование производственного процесса, состоящего из нескольких фаз (поставка и обработка заготовок, сборка изделия, перемещение ресурсов по конвейерам);

• Моделирование защиты оборудования от переполнения;

• Моделирование сбоев оборудования;

• Вычисление экономических параметров работы: производительности, трудозатрат и пр.

Постановка задачи

Создать модель цеха предприятия, производящего обработку деталей и сборку изделий. Цех работает по следующей схеме:

• В цех в некоторый накопитель поступают заготовки деталей (заготовки) двух типов из двух разных источников. Поток заготовок каждого вида является простейшим с некоторой интенсивностью. Далее заготовки по конвейеру перемещаются к обрабатывающей станции. Конвейер движется с постоянной заданной скоростью. Может получиться так, что заготовка уже поступила из источника, но свободное место на конвейере еще не появилось, поэтому надо предусмотреть накопитель типа «очередь», в котором заготовки будут ожидать свободного места на конвейере.

• На обрабатывающей станции производится обработка заготовок. Время связано со скоростью работы обрабатывающей станции. Скорость работы может меняться.

• Далее детали сортируются и по разным конвейерам доставляются к сборочной станции. Необходимо смоделировать «распознавание» деталей с тем, чтобы детали каждого вида поступали на свой конвейер.

• На сборочной станции производится сборка изделий.

• Готовые изделия увозятся из цеха по конвейеру. Поскольку конвейер с готовыми изделиями движется с постоянной скоростью, то на сборочной станции также надо предусмотреть накопитель типа «очередь», в котором детали будут ожидать свободного места на конвейере.

• Время от времени возникают сбои работе на станциях. На это время станция останавливается, и производится ремонт. Поступление заготовок на это время не останавливается, и они продолжают накапливаться. Если же накопитель (очередь) окажется переполненным, то детали «выбрасываются» из очереди по принципу FIFO, т.е. те которые раньше пришли.

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

Задание 1 Модель обрабатывающей станции

Создаk класс, имитирующий только обработку деталей.

Обрабатывающая станция должна обеспечивать задержку деталей на обработку, что можно смоделировать блоком Задержка из библиотеки Enterprise Library, и накопление деталей перед помещением на конвейер, что можно смоделировать объектом Очередь из библиотеки Enterprise Library. Поэтому удобно создать новый класс с необходимыми свойствами и структурой.

Экземпляр этого же класса мы затем используем для моделирования сборочной станции.

1. Создал проект Цех на основе пустого проекта со своим вариантом.

2. В свойствах эксперимента Simulation задал выполнение модели в режиме реального времени с выполнением одной единицы модельного времени в одну секунду. В этой модели под единицей модельного времени будем понимать одну минуту работы цеха предприятия.

3. Создал новый класс активного объекта. Назвал класс Station. Автоматически появится окно структурной диаграммы класса. В этом окне класс представлен прямоугольной рамкой.

4. Создал внешний порт (кнопка Порт на панели инструментов) и назовите его in (в окне Свойства). Внешний порт помещается на границе объекта. Имя порта можно задать любое. Название порта in означает, что это будет входной порт - через него класс будет получать информацию извне от других классов.

5. Создал внешний порт out. Оставил принятые по умолчанию свойства. Название порта out означает, что это будет выходной порт - через него информация будет передаваться в другие классы.

6. В окне Свойства класса Станция создал параметр skorStanz, задающий скорость работы станции (количество обрабатываемых в минуту деталей). В окне создания параметра, укажите, что это Динамический параметр типа real. Ввел значение по умолчанию: 20.

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

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

Чтобы получить значение динамического параметра, используйте круглые скобки, как при вызове функции, например, rate(). Чтобы получить значение простого параметра, используйте имя параметра без скобок, например, queueSize.

7. Создал также параметр размерОчереди, задающий размер накопителя. Размер буфера изменяться не будет, поэтому мы используем простой параметр типа integer. Задал значение по умолчанию: 2.

8. Добавил на структурную схему класса Станция объект Задержка из библиотеки.

9. Задал следующие свойства объекта Задержка:

• Задал время обработки одной детали delayTime равно 1/ скорСтанц () (поскольку параметр скорСтанц задает количество обрабатываемых деталей в единицу времени, то выражение 1/ скорСтанц () будет вычислять время обработки одной детали).

• Включил сбор статистики для класса Задержка.

10. Добавил на структурную схему класса Станция объект Очередь.

Детали будут помещаться в буфер (очередь) в случае, если они не смогут быть сразу же помещены на конвейер, который ведет от обрабатывающей станции.

11. В параметр capacity класса Очередь экспортирую параметр размер Очереди класса Станция. Включил сбор статистики для очереди.

12. Соединил внутренние и внешние порты объектов как показано на рисунке (рис. 1).

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

Задание 2 Поставка и обработка заготовок деталей

Создал модель, имитирующую поставку заготовок и их последующую обработку

на обрабатывающей станции.

1. Перешел в окно главного класса модели Main. Оно пусто.

2. Добавил на блок-схему объект Источник, моделирующий поставку деталей. Задайте время поступления деталей (interarrivalTime) равным 1 (ед.вр.). Это не случайное, а детерминированное время. Это можно интерпретировать так, что детали поступают по конвейеру из какого-то другого цеха в некоторой известной скоростью. Установите для параметра canWaitAtOutput значение false.

3. Добавил из библиотеки объекты Conveyor (Конвейер), Уничтожитель/

4. Из области Проект добавил экземпляр пользовательского класса Станция (перетащите в окно модели). Обратил внимание, как называется на диаграмме экземпляр класса.

5. Соединил порты объектов как показано на рисунке (рис. 2).

6. Задал скорость конвейера (speed) 200. Остальные параметры объектов оставил без изменения.

7. Запустил модель и протестируй ее работу. Сохранил модель.

Источник Конвейер

заготовок заготовок

Рис. 2 Справка по классам (из руководства)

Conveyor (Конвейер)

Объект Conveyor моделирует конвейер. Перемещает заявки по пути заданной длины с заданной скоростью, сохраняя их порядок и оставляя заданные промежутки между ними. Если заявка достигла конца конвейера, но не может его покинуть, то она там и останется. Есть две модификации конвейера: ненакапливающий и накапливающий. Ненакапливающий конвейер в этом случае вообще прекратит продвижение заявок, в то время как накапливающий конвейер продолжит двигать заявки, которые имеют достаточно свободного места перед собой, т^. те заявки, у которых расстояние до предыдущей заявки больше, чем значение параметра space. Скорость и параметр накапливания объекта Conveyor могут быть изменены динамически во время работы модели.

Таблица 1

Переменные класса Conveyor

Тип

Имя

Описание

Entity

entity

Текущая заявка.

Таблица 2

Функции класса Conveyor

Тип возвращаемого значения

Имя

Описание

void

block()

Блокирует входной порт.

void

unblock()

Разблокировывает входной порт.

Boolean

blocked()

Возвращает true, если входной порт заблокирован, и false -- если нет.

int

size()

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

Entity

get(int i)

Возвращает i-ю заявку (подсчет ведется от конца).

Double

getPosition( int i)

Возвращает позицию i-й заявки (0 -- начало, length

Тип возвращаемого значения

Имя

Описание

-- конец конвейера).

double

getSpace( int i)

Возвращает значение свободного пространства перед i-й заявкой (для первой заявки это значение равно расстоянию до конца конвейера).

int

getAccQueueSize()

Возвращает размер текущей очереди накопленных заявок (количество хранимых заявок).

boolean

canEnter()

Возвращает true, если на конвейер может быть помещена еще одна заявка.

Таблица 3

Параметры класса Conveyor

Тип

Имя

Значение по умолчанию

Описание

code

onEnter

Код, выполняемый, когда заявка поступает в объект.

code

onAtExit

Код, выполняемый, когда заявка достигает конца конвейера и покидает его.

code

onExit

Код, выполняемый, когда заявка покидает объект.

code

onOpen

Код, выполняемый, когда ранее закрытый конвейер снова становится готов к приему новых заявок.

code

onClose

Код, выполняемый, когда ранее открытый конвейер закрывается по какой-либо причине.

double

length

100

Длина конвейера.

double

scale

1

Если в качестве значения параметра length выбрано length of polyline, то длина конвейера считается как длина анимационной фигуры объекта (ломаной линии) в пикселах, умноженная на значение шкалы scale.

double

speed

10

Скорость движения конвейера.

double

space

10

Минимально необходимое свободное место между заявками.

int

capacity

100

Вместимость объекта.

boolean

accumulating

true

Если true, то заявки будут двигаться даже тогда, когда на выходе образовалась «пробка», если нет, то в этом случае весь конвейер остановится.

ShapePoly

animationShape

Шаблон анимации объекта Conveyor. Тип аниматора всегда CONVEYOR.

boolean

anim ati onF orward

true

Задает направление движения заявок на анимации.

Комментарии

Конвейер примет заявку, если выполняются все следующие условия (это может быть проверено с помощью метода canEnter ()):

• Предыдущая заявка передвинулась от данной заявки на расстояние, не меньшее, чем space (Только для не накапливающего конвейера) Конвейер не заблокирован заявкой, которая не может покинуть конвейер

• Не достигнута вместимость конвейера capacity. Подлинная вместимость конвейера ограничена значением length/space. Дополнительное ограничение может быть наложено параметром capacity.

* Предполагается, что заявки имеют нулевую длину. Чтобы смоделировать длину заявки, используйте параметр заявки length.

Принцип работы функций getPosition () и getSpace() поясняется на следующем рисунке.

Чтобы добиться лучшего управления объектами, которые снабжают конвейер заявками, вы можете использовать параметры onOpen и onClose.

Параметры speed, accumulating и capacity объекта Conveyor могут изменяться динамически.

Задание 3 Анимация поставки и обработки заготовок

1. Сначала создал новую анимацию для класса Станция. Измените имя анимационной диаграммы.

2. Изменил размер анимационной области примерно 30 х 30 точек и поместил ее в левый верхний угол рамки в центр начала координат.

3. Внутри анимационной области нарисовал прямоугольник 20 на 25 точек и задал цвет заливки (зеленый), центр координат совпадает с левым верхним углом.

4. Задал также изменение цвета занятой станции: задержка > Color.green: Color. white

5. На прямоугольнике (слева) нарисовал индикатор занятости высотой 25 точек и шириной 6 точек. Задайте прозрачный фон, выключите отображение шкалы. На вкладке Столбцовый индикатор, задайте максимальное значение равным 1 и минимальное - равным 0, установите цвет индикации и задайте выражение, определяющее отображаемое значение: задержка.getStatsUtilization().mean()

6. Поместил элемент Группа фигур на прямоугольнике станции так, чтобы показать местоположение обрабатываемой детали. Назовите группу фигур деталь.

7. Под индикатором создал ломаную линию (небольшую, можно без узлов), показывающую наличие деталей в накопителе станции. Назовите ломаную очередь- Дет и спрячьте ее, введя false в поле Видимость.

8. Задал анимационные свойства объектов обрабатывающей станции:

* для объекта Задержка

Параметр

Значение

animationShape (анимационная фигура объекта)

animation. деталь

animationType (тип аниматора)

animator.SINGLE

· Для объекта Очередь

Параметр

Значение

animationShape (анимационная фигура объекта)

animation. деталь

animation.ocherdeDet

animation. деталь

9. Создал анимацию для класса Main. Я увидитл, что анимация вложенного объекта Обрабатывающая станция автоматически появится на анимации главного класса Main.

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

10. Нарисовал конвейер толстой (15 точек) синей ломаной линией (он может иметь всего 2 узла - начальный и конечный). Затем поверх синей нарисовал ломаную линию белого цвета шириной 1 точка; эта линия будет задавать путь движения деталей. Назовите тонкую ломаную линию К1. Именно эту линию в дальнейшем привяжем к объекту Конвейер.

11. Связал объекты анимации с объектами структурной диаграммы:

* для объекта Конвейер

Параметр

Значение

length

length of polyline (выберите из списка)

animationShape

animation.Kl

Запустил модель и протестировал ее работу. Сохранил модель.

Задание 4 Два типа заготовок (деталей)

Цех работает с деталями двух типов. Чтобы различить детали, мы создадим для каждого типа свой класс сообщения, с помощью которого зададим цвет, которым детали будут отображаться на анимации. Одни детали будут отображаться красным цветом, а другие - синим.

1. Создал новый класс сообщений, щелкнув по кнопке панели инструментов Новый класс сообщений. Назвал класс сообщений СиняяДеталь.

2. На вкладке Общие задал базовый класс Entity.

3. В области Код конструктора задал внешний вид детали кодом setColor( Color.blue );

Мы изменяем цвет с помощью функции setColor() класса Entity. За детальной информацией о функциях класса Entity обращайтесь к Справочному руководству по Еnterprise Library,

4. Аналогично создал класс сообщений КраснаяДеталъ. Чтобы деталь этого типа отображалась на анимации красным цветом, написал следующий Код конструктора: setColor( Color.red );

5. Поставщиков различных типов деталей будем моделировать с помощью двух классов типа Источник. Поместите на диаграмму еще один объект Источник из библиотеки. Объекты Источник будут моделировать поставщиков различных типов деталей. Соединил поставщиков с конвейером.Ранее созданный класс Источник назвал КрасныйИсточ, а новый назвал Си- нийИсточ.

6. Для объекта КрасныйИсточ выберал КраснаяДеталь.сХ&ъъ в свойстве newEntity. Оставил интервал поставки деталей равным 1 минуте.

7. Для объекта СинийИсточ выберите СиняяДеталь.сЫББ в свойстве newEntity. Задал интервал поставки деталей равным 2 минутам. Установил для этого класса значение параметра canWaitAtOutput равным false.

Задание 5 Сортировка деталей

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

Создал модель сортировки и распределения деталей по двум разным конвейерам. Сортировка будет производиться объектом SelectOutput (Распределитель) из библиотеки.

В практической работе 7 мы использовали объект SelectOutput для разделения потока посетителей банка на два с некоторой заданной вероятностью. Здесь мы увидим пример другого условия разделения потока.

1. Добавьте объект SelectOutput. Задайте следующее свойство объекта:

Параметр

Значение

selectCondition

entity instanceof КраснаяДеталь

Оператор instanceof, заданный в условии выбора, определяет тип детали (она доступна как entity). Это условие означает, что на выход T (true) направляются красные детали, а по выходу F (false) направляются синие детали (точнее все другие). Эти выходы соединяются с конвейерами, по которым детали транспортируются далее. Последовательное соединение 2-х и более объектов SelectOutput позволяет разделить поток на несколько, отличающихся заданными признаками.

2. Добавил два конвейера и задайте им имена Конвейер2 и КонвейерЗ. Соединил входные порты конвейеров с портами объекта SelectOutput. Задал скорости конвейеров равными 300.

3. Добавил второй объект Уничтожитель и соедините выходные порты конвейеров с портами объектов уничтожителей.

4. На анимационной диаграмме нарисовал два конвейера, выходящих от обрабатывающей станции (см. задание 3). Назвал их К2 и К3 соответственно.

5. Свяжите анимационные объекты конвейеров с экземплярами классов на структурной диаграмме модели (см. задание 3).

6. Запустите модель и убедитесь в отсутствии сообщений об ошибках. Проследите по анимационной диаграмме, правильно ли работает модель.

7. Чтобы анимация выглядела лучше, можно включить режим сглаживания, отключенный по умолчанию для повышения скорости выполнения модели. Для этого щелкните мышью по кнопке панели инструментов Настройки анимации..., и в появившемся диалоговом окне установите флажок Сглаживание (рис. 4).

Рис. 4

8. Сохраните промежуточную модель.

Задание 6 Блокировка станции

Если буфер деталей переполнится, то станцию нужно будет заблокировать, прекратив прием новых деталей.

1. Для блокировки станции изменить свойства объекта Задержка. Для этого ввести следующий код в свойстве объекта onBxit:

11:'(очередь.817е()+1 == очередь.§е1_сарае11у()) block();

Код будет выполняться после того, как будет обработана очередная деталь. Степень заполнения буфера (мы получаем это значение с помощью функции очередь.sizeQ) сравнивается с его вместимостью (get_capacity()). Чтобы учесть только что обработанную деталь, к полученному результату добавляется единица.

Вы можете узнать текущее значение свойства объекта и изменить его с помощью функций get_x() и set_x(), где x является именем свойства.

2. Изменил свойства объекта Очередь - разблокируйте станцию, как только деталь будет забрана из буфера. Для этого ввел код в свойстве объекта onBxit: задержка. unblock()

Объект Задержка будет заблокирован с помощью функции block(), как видно из выражения в п.1. Детали не будут приниматься на обработку, пока не будет вызвана функция unblock().

Функция unblock() вызывается даже тогда, когда объект Задержка не заблокирован. Если же вы хотите узнать, заблокирован ли объект, вызовите функцию blocked().

Задание 7 Изменение интенсивности поставки деталей

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

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

1. В главном классе модели создал параметр интПост (тип real), задающий интенсивность поставки деталей, и задайте ему значение 10.

2. Для обоих источников деталей задал интервал поставки деталей (параметр interarrivalTime 1 / интПост).

Позже мы будем изменять значение параметра интПост с помощью бегунка на анимации

3. Добавил в модель объект Очередь и расположите его между источниками и конвейером доставки деталей на станцию. Соедините блоки.

4. Установил свойство объекта preemption равным true (смысл параметра смотрите в описании класса).

5. Добавил объект Уничтожитель для сбора статистики о потерянных деталях. Назовите объект Потери и соедините его порт с левым верхним портом объекта Очередь (через порт outputPreempted очередь покидают заявки, вытесненные другими поступившими заявками при заполненной очереди, если включен режим вытеснения).

Изменение анимации

6. Для изменения интенсивности поступления заготовок в систему создайте бегунок. Выполните следующие настройки бегунка:

• переменная, с которой связан бегунок интПост, диапазон (min=0; max=30);

• метки шкалы бегунка на анимации.

7. Чтобы показать на анимации текущее значение интенсивности поставки деталей, создал текстовую метку и задайте формулу, преобразующую ее в динамический текст

" Скорость поступления заявок " + интПост

Из формулы видно, что динамический текст задается путем слияния постоянной текстовой информации и динамически меняющейся переменной.

8. Добавил накопитель заготовок на анимационную диаграмму в виде прямоугольника (имя - накопитель). Свяжите его с объектом Очередь, а именно задайте следующие параметры библиотечного класса:

Параметр

Значение

animationShape

<имя анимации>. накопитель

animationType

Animator.BAG

9. Под прямоугольником оформил динамический текст, отображающий текущее количество заготовок в очереди и количество потерянных деталей со следующими формулами (поясните смысл формул):

«Накопитель « + очередь.size()

Рис. 5

10. Запустил модель и убедился в отсутствии сообщений об ошибках. Проследил по анимационной диаграмме, правильно ли работает модель в результате изменений, сделанных в заданиях 6 и 7.

11. Сохраните модель.

«Потери » + потери. getCount()

Задание 8 Сборочная станция

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

1. Создал класс сообщения Продукт.

2. Унаследовал класс от класса Entity.

3. В разделе Код конструктора задал цвет, которым будут отображаться изделия на анимации: в виде сочетания градаций красного (57), зеленого (181) и синего (74) цветов setColor( new Color( 57, 181, 74 ) );

4. Создал новый класс СборочнаяСтанция.

5. Описал параметры этого класса: Динамический параметр скорСбор типа real (скорость сборки деталей) и Простой параметр размерОчереди типа integer.

6. Задал значения параметров: 20 для скорСбор, и 2 - для размерОчереди.

7. На структурной диаграмме сборочной станции поместил экземпляр пользовательского класса Станция (см. задание 1) и экземпляр библиотечного класса Combine.

Combine (Комбайн)

Дожидается поступления двух заявок в порты inputl и input2 (в произвольном порядке), а затем создает новую заявку и направляет ее на выходной порт. Класс новой заявки задается пользователем. Заявка, прибывающая первой, хранится внутри объекта, пока не придет другая. Как только прибывает другая заявка, созданная заявка сразу же покидает объект.

Таблица 4

Переменные класса Combine

Тип

Имя

Описание

Entity

entityl

Текущая заявка, поступившая в порт inputl.

Entity

entity2

Текущая заявка, поступившая в порт input2.

Entity

entity

Текущая созданная заявка, готовая к выходу.

Таблица 5

Функции класса Combine

Тип возвращаемого значения

Имя

Описание

void

block1()

Блокирует входной порт input 1.

void

unblockl 0

Разблокировывает входной порт input 1.

boolean

blocked1()

Возвращает true, если входной порт input1 заблокирован, и false -- если нет.

void

block2()

Блокирует входной порт input2.

void

unblock2()

Разблокировывает входной порт input2

boolean

blocked2()

Возвращает true, если входной порт input2 заблокирован, и false -- если нет.

boolean

hasFirstArrived()

Возвращает true, если заявка поступила во входной порт input1, и объект ожидает поступления заявки во входной порт input2.

boolean

hasS econdArrived()

Возвращает true, если заявка поступила во входной порт input2, и объект ожидает поступления заявки во входной порт input 1.

Таблица 6

Параметры класса Combine

Тип

Имя

Значение по умолчанию

Описание

code

onEnter1

Код, выполняемый, когда заявка поступает во входной порт input1.

code

onEnter2

Код, выполняемый, когда заявка поступает во входной порт input2.

code

onCombine

Код, выполняемый, когда доступны и созданная, и обе поступившие заявки.

code

onExit

Код, выполняемый, когда созданная заявка покидает объект.

Class

newEntity

Entity.class

Тип создаваемой заявки. Если указаны entity1 или entity2, то будет соответственно создаваться entity 1 или entity2.

ShapeBase

animationShape1

Шаблон анимации для заявки, поступившей во входной порт input1. Используется тип аниматора SINGLE.

ShapeBase

animationShape2

Шаблон анимации для заявки, поступившей во входной порт

input2. Используется тип аниматора SINGLE.

Можно использовать этот объект для синхронизации, например, если Вам нужно, чтобы заявка entity 1 покинула объект только после того, как прибудет заявка entity2. Если еще написать entity1.contents.add(entity2) в параметре onCombine, то блок Combine может быть использован как альтернатива библиотечному классу Pickup, поскольку в таком случае первая заявка будет ждать прибытия другой, затем заберет ее содержимое и покинет объект. В параметре newEntity в этом случае должно быть выбрано entity 1.

Более того, если мы направляем заявку, покидающую объект, обратно в порт input1, то Вы сможете собрать заявку, представляющую собой сложную структуру из произвольного числа составляющих. В этом случае параметр onCombine будет производить добавление части к итоговой заявке. Но тогда, конечно, придется поместить в цикл объект SelectOutput для обнаружения окончания выполнения процедуры.

Заполнять создаваемую заявку содержимым пришлось самому, с помощью кода onCombine. Разница между параметрами onCombine и onExit в том, что когда вызывается код onCombine, переменные entity 1 и entity2 содержат две изначально поступившие заявки. Когда вызывается onExit, значения обеих этих переменных уже равны null.

8. На границе класса создал внешние порты ini, in2 и out. Оставил заданные по умолчанию свойства портов.

8. Соединил внешние и внутренние порты, как показано на рисунке.

9. Для объекта combine задал параметр, указывающий, что на станции будет собираться изделие (сообщение класса Продукт).

10. Для экземпляра класса станция, вложенного в объект СборочнаяСтанция задал скорость работы станции и размер накопителя путем экспорта соответствующих параметров класса СборочнаяСтанция (см. задание _ 1, п. 9).

11. Создал новую анимацию для объекта СборочнаяСтанция.

12. Открыл созданную анимационную диаграмму и убедитесь, что на ней автоматически появился анимационный объект класса станция, который является вложенным для класса СборочнаяСтанция.

13. На структурную диаграмму главного класса модели Main поместите экземпляр пользовательского класса СборочнаяСтанция. Соединил конвейеры со входами этого класса, отсоединив их от объектов Уничтожитель.

14. Удалил один объект Уничтожитель.

15. Добавил экземпляр библиотечного класса Конвейер для транспортировки готовых изделий. Задайте имя объекта и скорость 300.

16. Соединил выходной порт СборочнаяСтанция с входным портом конвейера, а выходной порт конвейера с объектом Уничтожитель.

Изменение анимации

17. Открыл анимационную диаграмму главной модели и убедитесь, что там автоматически появился анимационный объект класса СборочнаяСтанция.

18. Разместил анимацию класса СборочнаяСтанция на анимационной диаграмме как показано на рисунке (рис. 8).

Рис 8

19. Удлинил ломаные линии конвейеров К2 и КЗ и добавьте при необходимости узловые точки так, чтобы конвейеры вели к сборочной станции.

20. Нарисовал линию последнего конвейера, ведущего от сборочной станции (см. задание 3). Назовите его К4.

21. Связал линию конвейера К4 с объектом Конвейер3 на структурной диаграмме. Для этого задайте или измените параметра класса.

22. Запустил модель и проверьте ее работоспособность и отсутствие ошибок.

23. Нанес на анимационную диаграмму русскоязычные пояснения объектов в виде текстовых меток.

24. Сохранил модель.

Задание 9 Сбор статистики производительности цеха

Узнал, насколько эффективно работает наше предприятие, можно с помощью статистики производительности, автоматически собираемой в AnyLogic.

1. На анимационной диаграмме добавьте столбцовый индикатор и кнопку Сброс для сброса статистики.

2. На закладке Столбцовый индикатор записал свойства в поле Отображает:

уничтожитель.getAverageRate().

3. Задал свойства кнопки. На закладке Кнопка задайте действие в разделе Реакция на событие: уничтожитель.reset().

4. Обратил внимание, что имя объекта «кнопка» должно быть англоязычным, а название, т.е. подпись, отображаемая на кнопке, может быть и русским.

5. Запустилмодель. Проверьте наличие/отсутствие ошибок. Сохраните модель.

Задание 10 Моделирование выхода оборудования из строя

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

Изменил модель так, чтобы она учитывала выход из строя оборудования. Задал значения параметров:

• Будем имитировать поток поломок как простейший, поэтому время до поломки будет распределено экспоненциально со средним значением, равным трем часам (180 минут). В качестве аргумента функции exponential() задается интенсивность, поэтому мы задаем обратное значение. Заметьте, что мы пишем 1.0, а не 1, потому что результат выражения имеет тот же тип, что и операнды, и если бы мы написали 1/180, то результат был бы равен 0.

• На починку станции будет уходить в среднем 15 минут.

• Будем считать, что имеется возможность поломки станции и это соответствует значению true. В модели это значение меняться не будет.

1. Открыл структурную диаграмму класса Станция.

2. Добавил параметры класса:

Параметр

Тип

Значение

Пояснение

СрВрПол

real (динамический)

exponenti al(1.0/180)

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

СрВрПоч

real (динамический)

exponenti al(1.0/15)

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

Поломка

boolean

true

возможность поломки станции

Очередным экспериментом можно изменить это значение на false, и тогда простои, связанные с поломкой оборудования будут исключены.

4. На структурную диаграмму класса Станция добавил объект Hold, моделирующий простой станции (рис. 9). Соедините его с внешним входным портом и объектом Задержка.

Hold

Блокирует/разблокировывает поток заявок на определенном участке блок-схемы. В отличие от других объектов библиотеки (за исключением SelectInputPriority), Hold не хранит заявки внутри, являясь модификатором взаимодействия объектов. Этот объект полезен в особенности тогда, когда нужно заблокировать поступление заявок только от какого-то определенного объекта, в то же время, принимая заявки, приходящие со всех других портов.

input ? О ? output

#

Таблица 7

Переменные класса Hold

Тип

Имя

Описание

Entity

Entity

Текущая заявка.

Таблица 8

Функции класса Hold

Тип возвращаемого значения

Имя

Описание

void

block()

Блокирует входной порт.

void

unblock()

Разблокировывает входной порт.

boolean

blocked()

Возвращает true, если входной порт заблокирован, и false -- если нет.

Таблица 9

Параметры класса Hold

Тип

Имя

Значение по умолчанию

Описание

code

onEnter

Код, выполняемый, когда заявка проходит через объект.

boolean

initiallyBlocked

false

Если true, то изначально входной порт будет заблокирован.

Комментарии

Поскольку можно блокировать входной порт любого объекта Enterprise Library, используйте объект Hold только тогда, когда нужно реализовывать частное блокирование; например, запретить поступление заявок от одного источника, разрешая поступление от других.

Объект Hold не хранит заявки внутри: заявка будет принята только в случае если объект, следующий за ним в блок-схеме, действительно запрашивает ее.

5. Добавил стэйчарт, щелкнув по кнопке на панели инструментов.

6. Открыл диаграмму двойным щелчком.

7. С помощью кнопок панели инструментов Стейтчарт нарисовал на диаграмме стейчарт.

Поведение станции описывается состояниями Работа и Ремонт. Станция будет заблокирована на время пребывания стейчарта в состоянии Ремонт.

Переход Работа-Ремонт будет произведен после времени СрВрПол

8. Выделил из состояние Ремонт и описал действие при входе и выходе.

Состояние

Действие при входе

Действие при выходе

Ремонт

Hold.block()

Hold.unblock()

9. Выделил стрелку перехода Работа-Ремонт и опишите условие перехода: Событие СРВрПол()Гард Поломка.

10. Выделил стрелку перехода Ремонт-Работа и опишите условие перехода: Событие СрВрПоч()

11. Для визуального наблюдения за моментами поломки нарисуйте на анимационной диаграмме небольшой прямоугольник, который будет видимым только в моменты поломки (рис. 14).

Рис. 14

12. На вкладке Общие для этого прямоугольника задал условие видимости (рис. 15).

12. 13.Запустил модель и проверьте ее работоспособность.

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.