Конвейеры. Учимся пользоваться Библиотекой производственных процессов (часть 1)

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

Элементы Библиотеки производственных процессов

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

В этом и следующих выпусках блога мы детально разберём обучающие модели и элементы новой библиотеки. Рекомендуем вам строить эти модели самостоятельно во время чтения блога: так вы научитесь пользоваться библиотекой быстрее. Для этого вам понадобится бесплатная или коммерческая версия AnyLogic 8.3. Ну что, поехали!

В этой статье мы поговорим о моделировании конвейеров. В Библиотеку производственных процессов встроены блоки Convey, ConveyorEnter и ConveyorExit и специальные элементы разметки пространства, которые упрощают моделирование конвейерных систем. Сегодня рассмотрим их подробно в одноименных моделях. Их можно найти через главный экран AnyLogic в разделе «Обучающие модели». Чтобы вам было удобнее запускать модели, мы встроили окна анимации прямо в текст.


Модель Convey


Диаграмма процесса модели Convey

Диаграмма процесса модели Convey

Основной блок модели – Convey – отвечает за перемещение агента по конвейерной сети. Чтобы нарисовать сеть, используем элемент разметки Конвейер для создания линии произвольного вида и ширины. В свойствах разметки можно задать:

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

В свойствах элемента разметки оставляем все значения по умолчанию.

Свойства элемента Конвейер

Свойства элемента Конвейер

Чтобы создать разветвлённую конвейерную сеть, достаточно соединить две конвейерные линии. При этом в месте соединения появится элемент, отвечающий за перемещение объекта с одной линии на другую. Если угол соединения прямой, создаётся элемент Трансфер, в другом случае появляется Поворотный стол. Их также можно добавить в конвейерную сеть, перетащив с палитры. Эти элементы разметки представляют реальное конвейерное оборудование.

Поворотный стол и Трансфер в конвейерной сети

Поворотный стол и Трансфер в конвейерной сети

Свойства элемента Поворотный стол

Свойства элемента Поворотный стол, где можно задать скорость перемещения предметов и скорость вращения

Обработка на станции упаковки задерживает агента и изменяет его состояние. Она моделируется элементом разметки Станция обработки. Чтобы поместить его на конвейер, перетащите его с палитры. Время упаковки коробки на стандартной станции задаётся в поле Задержка в свойствах элемента (в нашей модели – 1 секунда). Для станции хрупких заказов время упаковки задаётся аналогично (в нашей модели – 10 секунд).

Станции обработки в конвейерной сети

Станции обработки в конвейерной сети

Свойства элемента Поворотный стол

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

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

Точка конвейера в конвейерной сети

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

Свойства элемента Точка конвейера

Свойства элемента Точка конвейера

Конвейерная сеть готова. Теперь оживим её, пустив по ней агентов.

Блок Source генерирует коробки, которые движутся по конвейеру с интенсивностью прибытия 20 штук в минуту. Обратите внимание, что в свойствах блока в секции Специфические опция Выталкивать агентов неактивна, так как блок Convey, принимая агента, сразу приступает к его перемещению. Так происходит, потому что у блока Convey нет встроенной очереди: если начало конвейера уже занято, новые агенты не могут появиться на конвейере. Отключённая опция позволяет хранить ожидающих агентов в Source (свойство Агенты, которые не могут выйти, опция ожидают в этом блоке) либо удалять их (опция уничтожаются). Также можно создать имитирующую буфер очередь (Queue) и расположить ее между блоками Source и Convey.

Свойства блока Source

Свойства блока Source

Следующий за Source блок fromConveyorStart (тип блока Convey) перемещает коробку по конвейеру до точки, где определится тип заказа и его дальнейший путь. Свойство Перемещать с/из определяет, откуда агент начнет свое движение. В данном случае коробка стартует от начала конвейера, поэтому оставляем значение Conveyor.

Свойства элемента fromConveyorStart (Convey)

Свойства элемента fromConveyorStart (Convey)

В свойстве Начальный конвейер выбираем конвейер, на котором появится агент. Свойства Начальное смещение от и Начальное смещение определяют место появления агента на конвейере и расстояние агента от начала до конца конвейера. В нашем случае агент начинает путешествие от начала линии, поэтому оставляем значения свойств неизменными. Свойство Перемещать на/в определяет, куда должен быть доставлен агент в рамках конвейерной сети. В нашем случае он отправляется к точке определения типа заказа, где расположен элемент photoEye (Точка конвейера). Для этого в свойстве Перемещать на/в мы указываем Точку конвейера, а в свойстве Конечная точка определяем, какой именно positionOnConveyor нам нужен.

Следующий блок, selectWay (SelectOutput), разделяет поток коробок. Если у его свойства Выход true выбирается активна опция При выполнении условия, в поле Условие можно ввести код. В нашем случае, код agent.isFragile проверяет, является ли перевозимый в коробке заказ хрупким. В зависимости от результата коробки перенаправляются в разные блоки Convey.

Свойства блока selectWay (SelectOutput)

Свойства блока selectWay (SelectOutput)

Теперь разберём верхний блок toStation (Convey). Он перемещает коробки по конвейерной сети до станции упаковки хрупких заказов. Блок Convey позволяет выбрать любую начальную и конечную точку пути агента. Поскольку коробка уже размещена на конвейере, в качестве ее отправной точки в свойстве Перемещать с/из выбираем Текущей позиции. Чтобы задать пункт назначения, в свойстве Перемещать на/в выбираем значение Станцию обработки. В поле Конечная станция обработки выбираем станцию для хрупких заказов station.

Конвейер для хрупких заказов

Конвейер для хрупких заказов

После упаковки коробки доставляются к концу конвейерной сети блоком toConveyorEnd (Convey). Чтобы реализовать это, выбираем отправную точку, опцию Текущей позиции, а затем пункт назначения: в свойстве Перемещать на/в выбираем значение Конвейер, а в свойстве Конечный конвейер указываем его имя.

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

Конвейер для обычных заказов

Конвейер для обычных заказов

Коробки на конвейер можно также помещать вручную, с помощью кнопки put carton from order picking zone на Main. Нажатие на кнопку вызывает функцию inject, добавляющую в блок source1 нового агента. В то же время блок fromPosition (Convey) отправляет этого агента по конвейерной сети, но не от начала конвейера, а с указанной точки, заданной элементом разметки placingPoint (точка конвейера). Для этого в блоке для свойства Перемещать с/из выбрана опция Точки конвейра, а для Начальная точка – название соответствующей точки на конвейере (placingPoint).

Свойства элемента button (Кнопка)

Свойства элемента button (Кнопка)

Модель ConveyorExit


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

Но что делать, если процесс снятия с линии сложен или связан с обработкой груза в конце конвейера? Или если для снятия с конвейера необходим оператор или робот, занятый сейчас другой, более приоритетной задачей? Одна из таких ситуаций описывается в обучающей модели ConveyorExit: в ней для снятия тяжёлого груза с конца конвейера используется погрузчик. Когда агент оказывается в конце конвейера, он ждёт погрузчика, препятствуя продвижению других агентов. Рассмотрим подробнее блок-схему процесса.

Диаграмма процесса модели ConveyorExit

Диаграмма процесса модели ConveyorExit

Блок sourceHeavyLoad (Source) создаёт агентов и передаёт в блок Convey, перемещающий их по ленте. В качестве начального и конечного конвейера зададим единственный конвейер, остальные параметры блока Convey оставим без изменения.

Свойства блока Convey

Свойства блока Convey

Поскольку свойство Покинуть конвейер при выходе для блока Сonvey не выбрано, агент остаётся ожидать на линии, как только достиг конца конвейера. Дальше по диаграмме процесса агент попадает в блок seizeForklift (Seize), отвечающий за захват ресурса forklift. Выбранная опция Пересылать захваченные ресурсы и параметр Место назначения со значением Агент отправляют ресурс-погрузчик к ожидающему на конвейере агенту-грузу. Обратите внимание на свойство Присоединить захваченные ресурсы: оно позволяет соединить агента и обслуживающий его ресурс для дальнейших операций.

Когда погрузчик подъезжает к коробке на конвейере, она переходит в блок ConveyorExit, который снимает груз с конвейера и освобождает место для проезда следующей коробки. Снятый груз перемещается на склад в блоке toStorage (Move to), а затем освобождает захваченный ресурс в блоке releaseForklift (Release), после чего хранится некоторое время на складе (блок storing) и покидает модель в блоке sink. Освобождённый погрузчик может вернуться к линии за следующим грузом. Если в конце конвейера нет ожидающих грузов, погрузчик возвращается в исходный узел. Это поведение определяется параметром Завершение (Возвращаться) блока Release. При выборе опции если нет других задач погрузчик будет возвращаться в базовое месторасположение, если он не занят.

Свойства блока releaseForklift (Release)

Свойства блока releaseForklift (Release)

Модель ConveyorEnter


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

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

Блок palletsSource (Source) генерирует паллеты, которые передаются в блок palletBuffer (Queue), моделирующий стопку паллет у конвейера. В блоке liftUp (Delay) паллета перемещается к началу конвейера. Этот блок нужен, так как в модели нужно анимировать перемещение агента на линию, поскольку блок conveyorEnter отвечает только за логическое размещение агента в конвейерной сети.

Диаграмма состояния модели ConveyorEnter

Диаграмма состояния модели ConveyorEnter

Аналогичным образом, проходя через блоки sheetsSource(Source), sheetBuffer (Queue) и putSheetOnPallet (Delay), в модели создаются противоскользящие листы, которые укладываются на паллеты.

Блок conveyorEnter размещает паллету на конвейере, но никуда не перемещает её. Для удобства и наглядности место размещения агента отмечено с помощью элемента Точка на конвейере. Чтобы расположить паллету именно в этой точке, в блоке conveyorEnter в качестве значения свойства Точка входа задаётся как устанавливается Position on conveyor, а ниже выбирается соответствующая точка на конвейере. При необходимости в этом блоке можно указать положение, в котором агент будет помещён в конвейерную сеть (опция Изменить ориентацию).

Диаграмма состояния модели ConveyorEnter

Диаграмма состояния модели ConveyorEnter

Переходя в блок addSheet (Combine), паллета все еще находится в начале конвейера в точке positionOnConveyor. В блоке addSheet происходит соединение паллеты и противоскользящего листа. Обратите внимание: тип агента, транспортируемого в рамках одной конвейерной линии, не может изменяться. Поэтому при объединении паллеты и листа в блоке addSheet в качестве получаемого агента (параметр Объединённый агент) используется уже находящаяся на конвейере паллета (agent1). Таким образом, и блок conveyEnter, и блок сonvey работают с одним типом агента – паллетой, поэтому ошибки не происходит.

При выходе из блока addSheet блок hold открывает передачу на линию следующей паллеты. Блок convey транспортирует паллету с противоскользящим листом к концу конвейера. Поскольку conveyorEnter поместил агента на конвейер, в качестве точки Перемещать с/из для блока convey может быть использовано значение Текущей позиции. Так как в качестве пункта назначения выступает конец конвейера, то в поле Convey to выбираем Conveyor, а ниже указываем название конвейера, в конец которого будет транспортироваться паллета.


Это конец первой части. Теперь вы знаете ответы на некоторые типичные вопросы по моделированию конвейеров в AnyLogic. Если остались вопросы по этим моделям, пишите их в комментариях.

Во второй части расскажем про транспортёры в новой библиотеке: как задавать их движение, избегать столкновений и моделировать взаимодействие с другими объектами в модели. До встречи!   

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