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

В этой статье мы подробно рассмотрим имитационную модель зарядки аккумуляторов для автоматизированных транспортных средств (транспортеров).

Для наглядности скачайте исходный файл и откройте пример модели в AnyLogic.


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

Модель разработана в AnyLogic 8.7.12 с новыми функциями библиотеки производственных систем, такими как новые стеллажи для хранения и соответствующие логические блоки Store и StorageSystem, которые помогают моделировать процессы на складах.

Модель описывает процесс разгрузки транспортного средства и размещение единиц хранения запасов в соответствии с доступными местами на складе. Имитационная модель в AnyLogic объединила два подхода к моделированию: дискретно-событийный и агентный.

Для дискретно-событийного моделирования доступны встроенные библиотеки AnyLogic. В этой модели одна из них — библиотека моделирования потоков — использовалась для имитации жизненного цикла батареи. Еще одна библиотека — производственных систем — особенно полезна для моделирования производства и работы складов, в данном случае для транспортеров и стеллажей.

Описание модели зарядки транспортеров


Схема модели зарядки транспортеров

Схема модели зарядки транспортеров

Схема модели довольно проста, при этом хорошо иллюстирует применение двух подходов: агентного и дискретно-событийного.

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

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

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

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

Логика модели зарядки автоматизированных транспортных средств — свойства блока chargetask
Логика модели зарядки автоматизированных транспортных средств — свойства блока chargetask (нажмите, чтобы увеличить)

Предполагается, что этот запрос прерывает процесс разгрузки грузовика, так как в свойствах блока chargetask выбрана опция «задача может вытеснить другие». Значение параметра «приоритет задачи» равно 1000, что делает ее более важной, чем задача по разгрузке транспортера. В соответствии с логикой, описанной в диаграмме процессов, после завершения зарядки транспортер возвращается к своей обычной работе.

Еще одним шагом к корректной работе модели является изменение режима (типа) блока Delay на «До вызова функции stopDelay()». Позже вы можете вызвать эту функцию stopDelay() из диаграммы процессов автоматизированных транспортных средств, используя код Java.

Диаграммы процессов батареи внутри AGV (автоматизированного транспортного средства)

Еще одна простая диаграмма процессов используется для описания жизненного цикла батареи. Библиотека моделирования потоков помогает имитировать хранение и передачу большого количества дискретных элементов, например жидкости, зерна и энергии.

В этой модели блок Tank помогет моделировать уровень заряда автоматизированного транспортного средства (в %), а блок Valve — зарядку и разрядку бака (аккумулятора). Рассмотрим подробнее свойства батареи.

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

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

Также интересно отметить, что раздел «Действия» в свойствах батареи показывает соединение диаграммы состояний агента и диаграммы процессов у единиц хранения запасов в Main. Когда батарея полностью заряжена, агенту AGV отправляется сообщение GoOperate, чтобы он мог завершить зарядку и приступить к задаче разгрузки.

Когда уровень заряда батареи падает ниже значения 350 (35%), соответствующее действие инициирует создание объекта ChargeTask и отправляет его в диаграмму процессов у единиц хранения запасов в Main, в блок Enter. Агент AGV прекращает выполнение задачи по разгрузке и направляется к зарядной станции.

Но как блок Enter диаграммы процессов узнает, для какого транспортера была создана заявка на зарядку? Другими словами, какой транспортер должен направиться на зарядную станцию?

Код, который выполняется в блоке Battery (внутри агента):


currentChargeTask = new ChargeTask(this);
main.enter.take(currentChargeTask); 
    

Строка 1 создает тип агента ChargeTask, связанный с конкретным автоматизированным транспортным средством.

Строка 2 добавляет тип агента ChargeTask на вторую диаграмму процессов в Main.

Агент ChargeTask имеет параметр transporter типа AGV. Когда вы запускаете код (внутри агента AGV), ключевое слово this записывает в созданный объект значение параметра равное именно тому транспортеру, внутри которого исполнился код.

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

Параметр «Транспортер» внутри агента ChargeTask (нажмите, чтобы увеличить)
Параметр «Транспортер» внутри агента ChargeTask (нажмите, чтобы увеличить)

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

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

Настройки блока chargetask, включая «условие выбора транспортера»
Настройки блока chargetask, включая «условие выбора транспортера» (нажмите, чтобы увеличить)

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

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

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

Агент AGV получает сообщение «старт», чтобы начать зарядку
Агент AGV получает сообщение «старт», чтобы начать зарядку (нажмите, чтобы увеличить)

Набор состояний автоматизированного транспортного средства называется сложносоставным состоянием — в черной рамке. Оно состоит из более мелких состояний, которые определяют поведение транспортера.

Например, каждый агент AGV может иметь состояния Operate, Charging и другие. Изменение состояния зависит от сообщения, полученного агентом. Итак, переход из одного состояния в другое, происходящий из-за того, что агент AGV получает сообщение start, заставляет агента закрывать клапан исходящего потока и открывать клапан входящего потока для заряда батареи.

Это работает и в обратную сторону — сообщение GoOperate закрывает клапан входящего потока, что означает завершение зарядки.

Общий алгоритм:

  1. На старте модели каждому транспортеру задается случайное число, которое является его исходным уровнем заряда.
  2. Когда уровень падает ниже 35%, блок Battery инициирует создание задачи зарядки — нового агента типа ChargeTask.
  3. Блок chargetask отдает приоритет задаче зарядки над рутинными задачами AGV и захватывает его.
  4. Когда ChargeTask захватывает AGV в блоке MoveByTransporter, агенту AGV отправляется сообщение GoCharging.
  5. Это сообщение заставляет диаграмму состояний AGV изменить состояние с Operate на MovingToChargingStation.
  6. В блоке MoveByTransporter, во вкладке «Действия» есть поле «при завершении загрузки». Это поле содержит функцию, которая отправляет сообщение start. Код вызывает эту функцию, когда AGV прибывает на зарядную станцию.
  7. Это сообщение инициирует переход в состояние «Зарядка», открывает и закрывает соответствующие «клапаны» резервуара — батареи.
  8. Аккумулятор начинает накапливать энергию и, когда он заряжен, отправляет AGV сообщение GoOperate.
  9. Это сообщение открывает и закрывает соответствующие «клапаны». Начнется процесс разрядки аккумулятора, и состояние AGV изменится на ReadyToWork.
  10. С заданным таймаутом (1 сек) происходит автоматический переход AGV в состояние Operate.
  11. Переход от ReadyToWork к Operate освобождает AGV от блока Delay, чтобы он мог вернуться к основной задаче до следующего сеанса зарядки.

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

Варианты применения в бизнесе

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

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

Похожие материалы