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

Реверсивный конвейер

Реверсивные конвейеры

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

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

Реверсивные конвейеры являются составной частью конвейерной сети. Вы можете включить их в процесс обработки агента (материального объекта) с помощью блоков Convey, аналогично обычным однонаправленным конвейерам.

Чтобы сделать конвейер реверсивным

  1. Выберите конвейер, который хотите сделать реверсивным.
  2. Выберите опцию Реверсивный в свойствах этого конвейера.

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

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

Давайте посмотрим, как именно производится изменение направления движения конвейера после вызова функций setDirection() или changeDirection().

  1. Если в момент вызова осуществляется замедление конвейера со скоростью выше 0, конвейер начинает постепенно замедляться, пока скорость движения не станет равна 0. Если скорость замедления равна 0, конвейер останавливается немедленно.
  2. Направление движения конвейера изменяется. Передний торец каждого агента (материального объекта) на конвейере становится задним торцом этого агента.
  3. Выполняется код действия При изменении направления.
  4. AnyLogic отменяет задачи движения агентов (материальных объектов) на этом конвейере. Агенты покидают активный блок Convey через порт outRedirect.
    Вот несколько вариантов того, куда могут отправиться эти агенты:
    • в другой блок Convey с другой конечной точкой;
    • вернуться в активный блок Convey для вычисления нового маршрута;
    • в блок ConveyorExit, который изымает агентов с конвейера для дальнейшей обработки в другом месте
  5. Если скорость ускорения конвейера выше 0, конвейер начинает постепенно ускоряться в новом направлении, пока не достигнет максимальной скорости. Если скорость ускорения равна 0, конвейер немедленно начинает движение с максимальной скоростью.
  6. Если конвейер остановлен или сломан, он меняет направление незамедлительно. Передний торец каждого агента (материального объекта) на этом конвейере становится задним торцом этого агента. Кроме того, выполняется код действия При изменении направления.
    После включения или починки конвейер продолжает движение в новом направлении.

Поведение агента

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

Предположим, агент помещается на реверсивный конвейер, который изначально двигается слева направо. Положение переднего торца агента остается неизменным, тогда как задний торец находится:

  • слева от переднего, если конвейер двигается в изначальном направлении;
  • справа от переднего, если конвейер двигается в обратном направлении.
Положение агента влияет на вывод таких функций как getTrailingEdgeOffset(), getTrailingEdgePosition().

Предположим, что передний торец материального объекта находится на расстоянии 10 метров от начала конвейера, при этом длина самого объекта составляет 2 метра. Таким образом при движении конвейера в изначальном направлении смещение заднего торца от начала конвейера составит 10 - 2 = 8 метров. При измененном направлении движения конвейера смещение заднего торца составит 10 + 2 = 12 метров.

Ориентация (FRONT или REAR) материального объекта изменяется на противоположную при изменении направления движения конвейера.

Если направление движения конвейера, на который помещается агент (материальный объект), противоположно маршруту агента, то агент ожидает изменения направления движения конвейера на желаемое в предыдущем блоке. Как только направление изменяется, агент направляется в блок Convey.

Использование реверсивных конвейеров с маршрутами

В настоящий момент блоки Convey используют реверсивные конвейеры только при автоматическом вычислении маршрутов. Использование реверсивных конвейеров при составлении маршрута через Последовательность конвейеров не поддерживается.

Наличие реверсивных конвейеров в конвейерной сети может влиять на маршрут агента. Рассмотрим возможные сценарии.

Агент использует текущее направление всех реверсивных конвейеров в конвейерной сети при постройке маршрута.
Маршрут не включает реверсивный конвейер явно
  • Если направление конвейера соответствует кратчайшему маршруту агента к цели, агент использует этот конвейер.
  • Если направление конвейера удлиняет маршрут или не позволит агенту достигнуть цели, агент избегает этот конвейер.
  • Если текущее направление конвейера не позволяет достигнуть цели и агент не имеет других вариантов, агент выстраивает маршрут с использованием этого конвейера. Достигнув его, агент ожидает изменения направления движения конвейера на желательное.
Реверсивный конвейер указан в свойстве Пройти через конвейеры блока Convey
  • Агент игнорирует текущее направление конвейера и строит маршрут. Достигнув конвейера, агент ожидает изменения направления движения на желательное.
Начальный конвейер агента — реверсивный
  • Агент начинает движение только в том случае, если направление движения конвейера соответствует маршруту. В противном случае он ожидает в предыдущем блоке, не перемещаясь в блок Convey.
  • Если агент был помещен на реверсивный конвейер (например, блоком ConveyorEnter), но направление движения конвейера не соответствует рассчитанному маршруту этого агента, происходит ошибка.
Конечный конвейер агента — реверсивный
  • Конечная точка находится в конце конвейера: Если направление движения конвейера не соответствует маршруту агента, агент ждет изменения направления перед конвейером.
  • Конечная точка смещена относительно конца конвейера или является точкой на конвейере: Агент строит кратчайший маршрут, основываясь на текущем направлении конвейера.
Если направление конвейера изменяется после того как агент начинает движение, маршрут не строится заново. Чтобы построить новый маршрут, используйте функцию агента conveyTo(): см. статью API материальных объектов.

Место ожидания агентов

Когда агенту необходимо дождаться изменения направления движения конвейера для соответствия маршруту агента, место его ожидания зависит от двух факторов:

  • какой элемент соединяет конвейеры
  • местоположение агента в момент изменения направления

Поворотный стол, трансфер или платформа вращения

  • Если агент находится на другом конвейере, он будет ожидать перед соединяющим элементом.
  • Если агент находится внутри соединяющего элемента, он будет ожидать на внутреннем конвейере элемента.

Узел конвейерной сети

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

Ветвление конвейера

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

Функции

Изменение направления движения
Функция Описание
void changeDirection() Изменяет направление движения конвейера. Если в момент вызова функции конвейер замедлялся с целью дальнейшего изменения направления, эта команда отменяется и конвейер начинает ускоряться в новом направлении.
ConveyorDirection getDirection() Возвращает текущее направление движения конвейера: CONVEYOR_FORWARD (вперед) или CONVEYOR_BACKWARD (назад). Если в момент вызова функции конвейер замедляется перед дальнейшим изменением направления, все равно возвращает текущее направление. Если конвейер не является реверсивным, всегда возвращает CONVEYOR_FORWARD.
void setDirection(ConveyorDirection direction) Задает направление движения конвейера. Для этого с вызовом функции передается значения аргумента direction:
CONVEYOR_FORWARD — материальные объекты перемещаются от начальной точки конвейера к конечной точке.
CONVEYOR_BACKWARD — материальные объекты перемещаются от конечной точки конвейера к начальной.
Если значение аргумента direction соответствует текущему направлению конвейера, в результате вызова функции возможны два сценария:
  • Если конвейер на момент вызова не замедляется перед изменением направления, ничего не происходит. Вызов функции игнорируется.
  • Если конвейер на момент вызова замедляется перед изменением направления, предыдущая команда замедления отменяется и конвейер начинает ускоряться в направлении, заданном аргументом direction.
boolean isChangingDirection() Возвращает true, если конвейер замедляется перед изменением направления. В других случаях возвращает false.
Всегда возвращает false, если конвейер не является реверсивным.

Демонстрационные модели

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

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

Как мы можем улучшить эту статью?