AnyLogic
Развернуть
Размер шрифта

Шаг 7. Разделение процесса производства электродов на аноды и катоды

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

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

Подготовьте разметку пространства

  1. Нарисуйте конвейер в соответствии с изображением ниже и назовите его cathodeConveyor.

  2. В его свойствах укажите следующее:
    a. Тип материального объекта: Electrode
    b. Z: 20
    c. Ширина: 0.5 метра
  3. Разместите поверх нового конвейера Станцию обработки.
  4. Назовите ее cathodeCoatingStation.
  5. В свойствах станции укажите следующее:
    a. Видимость: нет
    b. Время обработки: 1 секунда
    c. Длина: 0.5 метра
  6. В свойствах станции распахните секцию Действия и введите следующий код в поле При окончании процесса: agent.color = silver;

    С помощью этого кода мы зададим цвет катодов на выходе из пастонамазочной станции.

  7. Используйте Прямоугольный узел, чтобы нарисовать область возле конечной точки конвейера cathodeConveyor. В этой области катоды, прошедшие обработку на конвейере, будут ожидать доставки в сушильную камеру.
  8. Назовите новый узел cathodePlatesBuffer.
  9. В свойствах узла укажите следующее:
    a. Видимость: нет
    b. Расположение внутри: Упорядоченное
  10. Теперь, используя тот же элемент, нарисуйте область сушильных камер для катодов в соответствии с изображением ниже.
  11. Назовите ее cathodeCuringOven.
  12. В свойствах узла cathodeCuringOven укажите Видимость: нет.
  13. Щелкните по кнопке Аттракторы... и в диалоговом окне укажите режим создания аттракторов в узле: сетка 5 x 1.

  14. Нарисуйте еще один Прямоугольный узел возле установки пайки блоков аккумулятора.
  15. Назовите его preassembleCathodesBuffer.
  16. Задайте параметр Видимость: нет и Расположение внутри: Упорядоченное.

    В этой области катоды, которые прошли дегидратацию, будут ожидать сборки в группы.

Добавьте 3D анимацию

  1. Перейдите в палитру 3D объекты и перетащите 3D объект Сушильная камера с палитры на графическую диаграмму агента Main.
  2. В диалоговом окне Автомасштабирование 3D объекта щелкните по кнопке Да.
  3. Разместите его поверх аттрактора в узле cathodeCuringOven.
  4. Убедитесь в том, что объект не выступает за стены и полностью закрывает собой аттрактор.
  5. Поверните фигуру с помощью метки-манипулятора так, чтобы вход в сушильную камеру был расположен напротив конвейера cathodeConveyor.
  6. Создайте еще четыре копии 3D объекта, перетаскивая его с зажатой клавишей Ctrl. Разместите 3D объекты в соответствии с изображением ниже. Не забывайте о том, что размещение аттракторов также можно менять, перетаскивая их внутри узла.

Мы закончили создавать разметку пространства и 3D анимацию. Теперь можно заняться логикой процессов.

Создайте нестандартный блок

  1. Выберите первые семь блоков диаграммы процесса (начиная с блока source по блок unbatchElectrodes включительно) и щелкните правой кнопкой мыши по выделенной области.
  2. Из контекстного меню выберите опцию Создать блок диаграммы процесса.

  3. В диалоговом окне Создание агента укажите Имя нового блока: PrepareElectrode.
  4. На месте выделенных блоков в диаграмме процесса появится новый блок prepareElectrode со стандартной иконкой.

  5. В модельном дереве в панели Проекты появится агент PrepareElectrode.

Выберите блок prepareElectrode в графическом редакторе. В свойствах блока вы увидите параметры тех блоков, которые мы объединили для создания prepareElectrodes. Метки параметров генерируются автоматически и не очень удобны для чтения. Далее мы отредактируем эти метки и настроим сами параметры.

Измените метки параметров нестандартного блока

  1. Дважды щелкните по агенту PrepareElectrode в панели Проекты, чтобы открыть его в графическом редакторе. Вы увидите все параметры блока на графической диаграмме агента.
  2. Чтобы изменить метку параметра, выберите параметр и перейдите в секцию Редактор значения его свойств. Введите в поле Метка новое название параметра.

  3. Таким же образом измените метки параметров в соответствии с таблицей, приведенной ниже.
    В таблице приведены не все параметры. Не волнуйтесь и пропускайте те, которые не указаны в таблице: мы займемся их редактированием позже.
    Название параметра Новая метка
    batch_batchSize
    Размер партии
    batch_EntityLocation
    Местоположение пластин перед созданием партии
    batch_LocationNode Местоположение партии
    convey_sourceConveyor
    Конвейер подающий электроды
    convey_targetConveyor
    Конвейер принимающий электроды
    delay_delayTime
    Время обработки пластин
    source_entitiesPerArrival Кол-во электродов за 1 прибытие
    source_interarrivalTime Время между прибытиями электродов
    toElectrodeBuffer_destinationNode Буфер для электродов
    toElectrodeBuffer_loadingTime Время погрузки в сушильную камеру
    toElectrodeBuffer_unloadingTime Время разгрузки в буфере
    toOven_destinationNode Сушильная камера
    toOven_fleet Автопарк погрузчиков
    toOven_loadingTime Время погрузки партии на конвейер
    toOven_unloadingTime Время разгрузки партии в сушильной камере
    unbatchElectrodes_locationX Местоположение электродов после извлечения из партии, X
    unbatchElectrodes_locationY Местоположение электродов после извлечения из партии, Y

Теперь перейдем к настройке оставшихся параметров.

Настройте параметры нестандартного блока

  1. Поскольку в этой модели и аноды, и катоды заданы агентом Electrode, перейдите в свойства блока source, выбрав его на графической диаграмме агента PrepareElectrode, переключите поле Новый агент в режим редактора значения и выберите агента Electrode из выпадающего списка.
  2. Удалите параметр source_newEntity с графической диаграммы агента PrepareElectrode.
  3. Партии анодов и катодов также задаются с помощью одного агента PlatesBatch. В свойствах блока batch переключите поле Новая партия в режим редактора значения и выберите из выпадающего списка агента PlatesBatch.
  4. Удалите параметр batch_newBatch с графической диаграммы агента PrepareElectrode.
  5. Партии анодов и катодов будут перевозить погрузчики одного автопарка, поэтому перейдите в свойства блока toElectrodeBuffer и укажите Автопарк: toOven_fleet(agent)
  6. Удалите параметр toElectrodeBuffer_fleet.

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

Создайте свой значок блока

  1. Щелкните по изображению правой кнопкой мыши и сохраните его в папку модели.
  2. Удалите голубой прямоугольник стандартного значка с графического редактора агента PrepareElectrode.
  3. Перетащите элемент Изображение с палитры Презентация на графическую диаграмму агента PrepareElectrode и разместите его приблизительно в той области, где находился голубой прямоугольник.
  4. В открывшемся диалоговом окне перейдите в папку модели, где вы сохранили изображение для значка и выберите его.
  5. В свойствах изображения выберите опцию Значок.
  6. Отрегулируйте местоположение изображения так, чтобы порт соединителя находился точно на краю изображения:

  7. Перейдите в свойства изображения и распахните секцию Специфические. В поле Действие по щелчку введите следующий код: return true;
    Этот код позволит нам попасть внутрь нестандартного блока, выполнив двойной щелчок мышью по этому блоку во время выполнения модели.
  8. Теперь следует добавить счетчик агентов на выходе из блока. Перетащите элемент Текст с палитры Presentation и разместите его рядом с нижним правым углом нового значка.
  9. В свойствах текста задайте следующее:
    a. Выберите опцию Значок.
    b. В поле Текст введите любое значение, например, 0. Переключите поле в режим редактора динамического значения и введите следующее выражение: source.out.count()

    Это выражение возвращает количество агентов, прошедших через выходной порт блока source, который является частью нашего нестандартного блока.

    c. В параметре Цвет выберите значение blue.

Добавьте процесс создания катодов в диаграмму процесса

  1. Перейдите на графическую диаграмму агента Main и переименуйте блок prepareElectrode в prepareAnode.
  2. Перетащите элемент PrepareElectrode из дерева модели на графическую диаграмму агента Main и соедините его со вторым входным портом блока assembler, как указано на изображении ниже.
  3. Назовите новый блок prepareCathode.

  4. В свойствах нового блока укажите следующее:
    a. Размер партии: 100
    b. Местоположение пластин перед созданием партии: cathodePlatesBuffer
    c. Местоположение партии: cathodePlatesBuffer
    d. Конвейер подающий электроды: cathodeConveyor
    e. Конвейер принимающий электроды: cathodeConveyor
    f. Время обработки пластин: 2 минуты
    g. Кол-во электродов за 1 прибытие: 200
    h. Время между прибытиями электродов: 1.5 часа
    i. Буфер для электродов: preassembleCathodesBuffer
    j. Время погрузки в сушильную камеру: 0.5 минуты
    k. Время разгрузки в буфере: 0.5 минуты
    l. Сушильная камера: cathodeCuringOven
    m. Автопарк погрузчиков: forklifts
    n. Время погрузки партии на конвейер: 0.5 минуты
    o. Время разгрузки партии в сушильной камере: 0.5 минуты
    p. Местоположение электродов после извлечения из партии, X: wrappingConveyor.getEndPoint().x
    q. Местоположение электродов после извлечения из партии, Y: wrappingConveyor.getEndPoint().y
    Извлеченные из партии катоды должны появиться на том же конвейере wrappingConveyor, что и аноды, но точное местоположение для них - конечная точка конвейера. Чтобы получить x- и y-координату этой точки, мы используем функцию конвейера getEndPoint().
  5. Теперь перейдите в свойства блока assembler и укажите Количество 2: 15.
  6. Запустите модель!

Вы увидите, как электроды обоих типов создаются, проходят пастонамазочную станцию и процесс дегидратации в сушильных камерах, а затем перемещаются на второй конвейер, где на станции сборки формируются в блоки, после чего помещаются в пластиковые корпусы аккумуляторов. Обратите внимание, что одиночные электроды меняют цвет, когда проходят пастонамазочную станцию из white (по умолчанию) в peru для анодов и silver для катодов. При этом цвет партий остается одинаковым для обоих типов электродов. Давайте это исправим!

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

Создайте список вариантов

  1. В панели Проекты щелкните правой кнопкой мыши по имени модели и выберите из контекстного меню опцию Создать >  Список вариантов.

  2. В диалоговом окне Новый список вариантов укажите Имя: ElectrodeType.
  3. В таблице Задайте элементы укажите имена свойств агента: ANODE и CATHODE.

  4. Список вариантов появится в дереве модели в группе Списки вариантов.

Добавьте параметр в свойства агента PlatesBatch

  1. Перетащите элемент Параметр с палитры Агент на графическую диаграмму агента PlatesBatch.
  2. Назовите его electrodeType.
  3. В свойствах параметра выберите его Тип: ElectrodeType.

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

Задайте динамическую смену цвета

  1. Выберите фигуру rectangle на графической диаграмме агента PlatesBatch.
  2. Переключите поле Цвет заливки в режим редактора динамического значения и введите следующий код: electrodeType == ANODE ? peru : silver
    С его помощью мы проверяем значение параметра electrodeType и задаем цвет фигуры анимации rectangle в зависимости от полученного результата. Если значение равно ANODE, задается цвет peru. В противном случае задается цвет silver.

Теперь давайте научим наш нестандартный блок узнавать разные типы электродов.

Укажите тип электрода в агенте prepareElectrode

  1. Добавьте параметр на графическую диаграмму агента prepareElectrode.
  2. Назовите его electrodeType.
  3. В свойствах параметра выберите его Тип: ElectrodeType и задайте Метку: Тип электрода.
  4. В свойствах блока batch переключите поле Новая партия в режим редактора динамического значения и укажите следующее: new PlatesBatch(electrodeType)
  5. Перейдите на графическую диаграмму агента Main. В свойствах блока prepareAnode укажите Тип электрода: ANODE.
  6. В свойствах блока prepareCathode укажите Тип электрода: CATHODE.
  7. Запустите модель! Теперь нестандартный блок будет передавать тип электрода партиям и цвет партий будет меняться соответствующим образом.

Демо-модель: Lead Acid Battery Production - Phase 7 Открыть страницу модели в AnyLogic Cloud. Там можно запустить модель или скачать ее по ссылке Исходные файлы модели.
Как мы можем улучшить эту статью?