Опубликован: 07.11.2014 | Доступ: свободный | Студентов: 442 / 37 | Длительность: 15:17:00
ISBN: 978-5-9556-0161-8
Тема: САПР
Лекция 3:

Модель процесса изготовления в цехе деталей

< Лекция 2 || Лекция 3: 12345 || Лекция 4 >

Построение событийной части модели

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

Начнём с сегмента имитации процесса подготовки заготовки.

Подготовка заготовки

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

  1. В Палитре выделите Презентация. Перетащите элемент Прямоугольник. На странице Местоположение и размер установите: X: 20, Y: 300, Ширина: 240, в поле Высота: 150.
  2. Перетащите элемент text и на странице Основные панели Свойства в поле Текст: введите Подготовка заготовки (Рис. 2.8).
  3. В Палитре выделите Библиотека моделирования процессов. Перетащите объект source на диаграмму т Main и разместите в прямоугольнике с именем Подготовка заготовки.
  4. Для записи и хранения параметров детали в дополнительные поля заявок нужно создать нестандартный класс заявки. Создайте класс заявки Detail.
    Сегмент Подготовка заготовки

    увеличить изображение
    Рис. 2.8. Сегмент Подготовка заготовки
  5. В панели Проект Щёлкните правой кнопкой мыши элемент модели верхнего уровня дерева и выберите Создать Java класс.
  6. Появится диалоговое окно Новый Java класс. В поле Имя: введите имя нового класса Detail.
  7. В поле Базовый класс: выберите из выпадающего списка Entity в качестве базового класса. Щёлкните кнопку Далее.
  8. Появится вторая страница Мастера создания Java класса. Добавьте следующие поля Java класса, которые потребуются в дальнейшем при разработке модели:
    double n;
    double a;
    double Tn1;

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

  9. Оставьте выбранными флажки Создать конструктор и Создать метод toString().
  10. Щёлкните кнопку Готово. Появится редактор кода и автоматически созданный код вашего Java класса. Закройте код.
  11. Теперь нужно преобразовать Java класс в тип агента. Для этого щёлкните правой кнопкой мыши в панели Проект только что созданный Java класс и в контекстном меню выберите Преобразовать Java класс в тип агента.
  12. Появится окно c автоматически созданными параметрами нестандартного типа заявок Detail.
  13. Из Палитры Основная перетащите на сегмент Исходные данные элемент Переменная. На странице Основные панели Свойства дайте Имя: b, установите Тип: double.
  14. Выделите объект source. На странице Основные панели Свойства установите свойства согласно Рис. 2.9.

    В коде, приведенном ниже, который вы ввели в поле свойства Действия При выходе:, используются данные созданных ранее двух массивов.

    entity.n=uniform_pos();
    if (entity.n <= верВарЗаг.get(1)) entity.Tn1=срВрПодгЗаг.get(1);
    else if (entity.n > верВарЗаг.get(1) && entity.n 
    <= верВарЗаг.get(2)) entity.Tn1=срВрПодгЗаг.get(2);
    else if (entity.n > верВарЗаг.get(2) && entity.n
    <= верВарЗаг.get(3)) entity.Tn1=срВрПодгЗаг.get(3);
    else if (entity.n > верВарЗаг.get(3) && entity.n 
    <= верВарЗаг.get(4)) entity.Tn1=срВрПодгЗаг.get(4);
    else if (entity.n > верВарЗаг.get(4) && entity.n 
    <= верВарЗаг.get(5)) entity.Tn1=срВрПодгЗаг.get(5);
    else if (entity.n > верВарЗаг.get(5) && entity.n
    <=верВарЗаг.get(6)) entity.Tn1=срВрПодгЗаг.get(6);
    Объект source с установленными свойствами

    увеличить изображение
    Рис. 2.9. Объект source с установленными свойствами
  15. Выделите объект queue и на странице Основные панели Свойства установите свойства:
    • Имя: очЗаг
    • Тип заявки: Detail
  16. Максимальная вместимость: установить флажок.
  17. Выделите объект delay и на странице Основные панели Свойства установите свойства:
    • Имя: подЗаг
    • Тип заявки: Detail
    • Тип: Определённое время
    • Время задержки: exponential (1/entity.Tn1)
    • Вместимость: 1
    • Действия При выходе: entity.a = 1;
Сегменты Операция 1, Операция 2, Операция 3

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

  1. Из палитры Презентация Перетащите три элемента Прямоугольник так, как на Рис. 2.10. На странице Местоположение и размер панели Свойства введите: для первого прямоугольника X: 20, Y: 60; для второго - X: 280, Y: 60; для третьго - X: 530, Y: 60. Для всех Ширина: 240, Высота: 180.
  2. Перетащите три элемента text и на странице Основные панели Свойства в поле Текст: каждого из них введите Операция 1, Операция 2, Операция 3 соответственно (Рис. 2.10).
  3. Из Библиотеки моделирования процессов перетащите для каждого сегмента два объекта queue, два объекта delay и один объект selectOutput, разместите и соедините как на Рис. 2.10.
  4. Выделите поочередно объекты, начиная с объекта queue сегмента Операция 1, и на странице Основные панели Свойства установите свойства согласно Рис. 2.10 и Табл. 2.4.

На сегменте Операция 1 поясним принятые имена объектов: очОп1 - очередь на операцию 1; выпОп1 - имитация выполнения операции 1; очКонОп1 - очередь на контроль после операции 1; конОп11 - имитация контроля после операции 1; конОп12 - розыгрыш результата контроля.

Добавлены сегменты Операция 1, Операция 2, Операция 3

увеличить изображение
Рис. 2.10. Добавлены сегменты Операция 1, Операция 2, Операция 3
Таблица 2.4.
Объект Свойства Значения
Сегмент Операция 1
queue Имя очОп1
Тип заявки Detail
Максимальная вместимость Установите флажок
delay Имя выпОп1
Тип заявки Detail
Тип Определённое время
Время задержки exponential (1/T1)
Вместимость 1
queue1 Имя очКонОп1
Тип заявки Detail
Максимальная вместимость Установите флажок
delay1 Имя конОп11
Тип заявки Detail
Тип Определённое время
Время задержки exponential (1/Tk1)
Вместимость 1
Действия При выходе entity.n = 1;
selectOutput Имя конОп12
Тип заявки Detail
Выход true выбирается Заданной вероятностью
Вероятность 1-q1
Сегмент Операция 2
queue Имя очОп2
Тип заявки Detail
Максимальная вместимость Установите флажок
delay Имя выпОп2
Тип заявки Detail
Тип Определённое время
Время задержки exponential (1/T2)
Вместимость 1
queue1 Имя очКонОп2
Тип заявки Detail
Максимальная вместимость Установите флажок
delay1 Имя конОп21
Тип заявки Detail
Тип Определённое время
Время задержки exponential (1/Tk2)
Вместимость 1
Действия При выходе entity.n = 2
selectOutput Имя конОп22
Тип заявки Detail
Выход true выбирается Заданной вероятностью
Вероятность 1-q2
Сегмент Операция 3
queue Имя очОп3
Тип заявки Detail
Максимальная вместимость Установите флажок
delay Имя выпОп3
Тип заявки Detail
Тип Определённое время
Время задержки exponential (1/T3)
Вместимость 1
queue1 Имя очКонОп3
Тип заявки Detail
Создание нового активного объекта

На Рис. 2.10 показаны четыре функциональных сегмента модели, которые построены с использованием 18 объектов AnyLogic. Если вы начнёте создавать очередной сегмент, то после перетаскивания второго объекта появится сообщение: Ограничение ознакомительной версии: нельзя создавать более 20 вложенных объектов. Поэтому остальные сегменты модели нам нужно разместить на втором активном объекте. Создайте этот объект.

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

Согласно логике процесса изготовления деталей надо после выполнения каждой из трёх операций в случае брака отправить забракованные детали на пункт окончательного контроля. С последнего получить и отправить детали на повторное выполнение тех операций, после которых они были забракованы. Кроме того, готовые детали необходимо передать на склад готовых деталей. Таким образом, для связи с активным объектом Main потребуются семь портов (3+3+1).

Создайте экземпляр нового типа агента Kontrol.

  1. Из Палитры Основная перетащите элемент Порт и разместите сверху в левом ряду (Рис. 2.8).
  2. На странице Основные панели Свойства имя port замените именем наОп1.
  3. Скопируйте элемент Порт с именем наОп1.
  4. Вставьте два элемента Порт (см. Рис. 2.11). При вставке последовательно будут изменяться их имена: наОп2, наОп3.
    Порты

    Рис. 2.11. Порты
  5. Из Палитры Основная перетащите элемент Порт и разместите сверху в правом ряду (см. Рис. 2.11).
  6. На странице Основные панели Свойства имя port замените именем брОп1 (идентификатор означает, что через этот порт отправляются бракованные детали после операции 1 на пункт окончательного контроля).
  7. Скопируйте элемент Порт с именем брОп1.
  8. Вставьте два элемента Порт (см. Рис. 2.11).
  9. Из Палитры Основная перетащите элемент Порт и разместите внизу в правом ряду (см. Рис. 2.11).
  10. На странице Основные панели Свойства имя port замените именем готДет.
  11. По мере размещения элементов Порт они автоматически будут объединяться прямоугольником (с пунктирными линиями) и появится надпись Значок.
  12. Возвратитесь на Main. На панели Проект выделите Kontrol, перетащите на тип агента Main экземпляр типа агента Kontrol, разместите как на Рис. 2.12.
  13. Экземпляр нового типа агента Kontrol создан. На странице Основные панели Свойства уберите флажок Отображать имя и в поле Имя: введите на_контроль.
  14. В Палитре выделите Презентация. Перетащите элемент Прямоугольник и разместите как на Рис. 2.12. На странице Местоположение и размер панели Свойства введите: X: 570, Y: 270, Ширина: 140, Высота: 220.
  15. Перетащите элемент text и на странице Основные панели Свойства в поле Текст введите На окончательный контроль.

Теперь для движения заявок-деталей в модели необходимо надлежащим образом соединить входы и выходы объектов сегментов Операция 1, Операция 2 и Операция 3 с портами.

  1. Соедините выходы F (false) объектов конОп12, конОп22, конОп32 с портами брОп1, брОп2, брОп3 соответственно.
  2. Соедините порты наОп1, наОп2, наОп3 с входами объектов очОп1, очОп2, очОп3 соответственно.
  3. Соедините выход Т (true) объекта конОп32 сегмента Операция 3 с портом готДет.

На Рис. 2.12 вы видите ещё объекты. Перейдём к размещению их на агенте верхнего уровня Main.

Main с сегментами модели и экземпляром типа агента Kontrol

увеличить изображение
Рис. 2.12. Main с сегментами модели и экземпляром типа агента Kontrol
< Лекция 2 || Лекция 3: 12345 || Лекция 4 >
Игорь Маникин
Игорь Маникин

Коллеги, спасибо за очень информативный и полезный курс. Прошёл три лекции. Столкнулся с проблемой, что обе модели не могут закончить расчёт по причине ограничения бесплатной версии "создано максимально допустимое число динамически создаваемых агентов (50000)". По скриншотам Лекции 2 видно, что да, модель создает гораздо больше 50000 агентов. В принципе, мне то и диплом не особо нужен. Но хотелось бы выполнить практические работы. Нет ли возможности откорректировать эту проблему? Или может я чего не так делаю?

Еще раз спасибо за прекрасный курс!

Артём Нагайцев
Артём Нагайцев

Выдает ошибку "entity cannot be resolved to a variable" при попытке запуска. В чем может быть причина? Ошибка в строках

entity.time_vxod=time(); 

time_obrabotki.add(time()-entity.time_vxod);