Шаг 1. Создаем железнодорожный узел
С помощью нашей модели мы воспроизведем отправление вагонов на путь, который называют стрелочной горловиной. Оттуда вагоны отправляются через серию стрелок, называемую стрелочной улицей, на пути сортировки.
Мы начнем с топологии железнодорожной сети, как на рисунке ниже:

Создайте новую модель. Назовите ее Hump Yard и укажите минуты в качестве единиц модельного времени.
Задайте топологию путей. Сначала нарисуйте ж/д пути.
Начните с прямого пути. На этом пути будут появляться поезда, поэтому мы назовем его trackEntry . Мы будем давать осмысленные имена только тем путям, на которые будут ссылаться блоки диаграммы процесса. Остальные пути могут остаться названными по умолчанию.
Нарисуйте прямой ж/д путь

- Сначала выделите двойным щелчком элемент Ж/д путь в секции Разметка пространства палитры Железнодорожная библиотека.
- Щелкните в любой точке графического редактора, чтобы начать рисовать путь.
- Чтобы нарисовать прямой сегмент пути, добавьте щелчком мыши конечную точку сегмента.
- Завершите рисование двойным щелчком.
- Назовите этот ж/д путь trackEntry .
Если это первый ж/д путь в модели, вы увидите сообщение с предложением сменить масштаб модели на: 2.0 пикселя в 1 метре. Мы советуем согласиться, так как предлагаемый масштаб часто используется в железнодорожных моделях.
После этого вы увидите нарисованный прямой ж/д путь, по которому будет двигаться состав. Теперь давайте нарисуем объездной путь, по которому локомотив будет подъезжать к составу сзади для его перемещения на сортировочную горку. Этот путь будет не прямой, а дуговой формы, и сценарий его рисования будет несколько отличаться.
Нарисуйте ж/д путь дуговой формы
- Совершите двойной щелчок по элементу Ж/д путь в палитре Железнодорожная библиотека. Затем щелкните по ранее нарисованному пути (см. рисунок ниже, пункт 1), чтобы начать рисовать новый ж/д путь. Круг, обозначающий стрелку, появится автоматически.
- Последовательно щелкая мышью, нарисуйте несколько сегментов пути, чтобы получился путь, как на рисунке ниже. Чтобы добавить дуговой элемент, не отпускайте кнопку мыши после щелчка, а переместите курсор, удерживая кнопку мыши. При этом вы увидите, как меняется радиус дуги. Отпустите кнопку мыши, когда посчитаете, что сегмент приобрел нужную форму. Завершите рисование ж/д пути двойным щелчком рядом с фигурой первого пути (см. пункт 2 на рис. ниже). Сразу поставить конечную точку на тот же путь, с которого начали рисовать ( trackEntry ), не получится.

- Перетащите конечную точку (2) на ранее нарисованный путь ( trackEntry ), чтобы создать стрелку.

Отредактируйте ж/д путь дуговой формы

- Выделите путь, который хотите отредактировать, щелкнув по нему.
- Щелкните правой кнопкой мыши по выделенному пути и выберите Редактировать направляющие из контекстного меню.
- Чтобы переместить крайнюю точку сегмента, перемещайте квадратную метку-манипулятор.
- Чтобы изменить радиус кривизны, перемещайте круглую метку-манипулятор на конце пунктирной направляющей линии.
Железнодорожные стрелки

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

- Назовите этот путь trackArrival , так как он обозначает место прибытия поезда.
- Перетащите элемент Точка ж/д пути из палитры Железнодорожная библиотека и расположите его, как показано на рисунке ниже. Назовите его stopLineEntry . Он будет определять место появления поездов.
- Добавьте элемент Точка ж/д пути: stopLineArrival . В этой точке поезд остановится, чтобы отцепить все вагоны, что позволит локомотиву продолжить путь уже без вагонов.
- Добавьте элемент Точка ж/д пути: stopLineHump . Здесь будет производиться сортировка вагонов.
Точка ж/д пути
Точка ж/д пути является элементом разметки пространства, который используется, чтобы задать точную позицию на ж/д пути. Это может понадобиться, когда вы задаете:
- позицию на пути, где появляется поезд;
- позицию на пути, где поезд должен остановиться.
В этой части учебного пособия мы создали железнодорожный узел, который будет далее использоваться в нашей модели.
Обратите внимание, для каждого шага моделирования имеются контрольные модели. Вы можете использовать их, чтобы сравнить свою модель с аналогичной моделью, созданной нами. Далее приведена ссылка на контрольную модель для этого шага.
Стрелка
Объект Switch задает железнодорожную стрелку. Стрелка представляет собой устройство, служащее для разветвления путей. В AnyLogic стрелка соединяет минимум три пути и позволяет подвижному составу переходить с одного пути на другой. В зависимости от типа стрелки количество соединенных путей и правила движения состава по путям будут разными. AnyLogic поддерживает три типа стрелки:
Универсальная

Направления движения по универсальной стрелке
Этот тип стрелки используется по умолчанию. Он соединяет неограниченное количество путей и задает следующие правила движения:
- прямое движение без смены направления вдоль любых двух путей
- смена направления вдоль любого тупого угла, образуемого соединением двух путей
Если универсальная стрелка соединяет ровно три пути (0, 1 и 2) и позволяет подвижному составу переходить с главного пути на одну из двух веток, то, в зависимости от состояния стрелки, она будет направлять поезда, прибывающие с пути 0 на один из двух путей — либо путь 1, либо путь 2 («противошерстное» движение). Поезда, прибывающие с путей 1 или 2 (“пошерстное” движение) будут всегда следовать далее вдоль пути 0 вне зависимости от состояния стрелки и будут всегда переводить стрелку в соответствующее состояние.

Простая английская

Направления движения по простой английской стрелке
Этот тип стрелки соединяет 4 пути и задает следующие правила движения:
- прямое движение без смены направления вдоль любых двух путей
- смена направления вдоль тупого угла, образуемого соединением с участием переключающего пути (например, движение с пути 1 на путь 3 и наоборот, как указано на изображении выше). Вы можете выбрать переключающий путь в свойствах элемента Стрелка.
Простую английскую стрелку можно использовать только в том случае, если каждый из соединяющихся путей образует ровно 2 тупых угла с другими путями. Если это требование не выполняется, при запуске модели возникнет ошибка.

Направления движения по английской стрелке
Этот тип стрелки соединяет 4 пути и задает следующие правила движения:
- прямое движение без смены направления вдоль любых двух путей
- смена направления вдоль любого тупого угла, образуемого соединением двух путей
Английскую стрелку можно использовать только в том случае, если каждый из соединяющихся путей образует ровно 2 тупых угла с другими путями. Если это требование не выполняется, при запуске модели возникнет ошибка.
Стрелка создается автоматически, когда вы соединяете ж/д пути.
Вы можете переключить состояние стрелки, щелкнув мышью внутри задающего ее круга или посредством программного интерфейса.
Вам не нужно часто обращаться к функциям объекта Switch , поскольку при движении поезда по заданному маршруту объект TrainMoveToавтоматически меняет состояния стрелок.
Стрелка отображается на анимации в виде круга. С помощью тонкой линии, нарисованной поверх кружка, показывается состояние стрелки (направление движения поезда через стрелку).
Свойства
Основные свойства
Имя — Имя фигуры.
Исключить — Если опция выбрана, то фигура будет исключена из модели.
Отображается на верхнем агенте — Если опция выбрана, то фигура будет видна на презентации типа агента, в который будет вложен данный агент.
Блокировать — Если опция выбрана, то фигура будет считаться заблокированной и не будет реагировать на щелчки мыши. Таким образом, вы не сможете выбрать заблокированную фигуру в графическом редакторе до тех пор, пока вы не снимете с нее блокировку.
Обычно это требуется, когда у вас есть какой-то фоновый рисунок, используемый как подложка для анимации, и вы хотите исключить возможность случайного редактирования этого фонового рисунка при рисовании фигур поверх него.
Видимость — Если опция выбрана, то фигура будет отображаться на презентации во время выполнения модели.
Тип — Здесь вы можете выбрать тип стрелки, чтобы задать правила движения состава. Вы можете выбрать Универсальную, Простую английскую или Английскую стрелки.
Переключающий путь — [Виден только если в свойстве Тип выбрана опция Простая английская] Здесь вы можете выбрать единственный путь, вдоль которого может происходить смена направления движения поезда.
Отображать в — Здесь вы можете выбрать, будет ли фигура отображаться В 2D и в 3D, Только в 2D или Только в 3D.
Функции
| Функция | Описание |
|---|---|
| RailwayTrack getTrack(int index) | Возвращает соединенный со стрелкой путь с заданным номером. |
Местоположение
| Функция | Описание |
|---|---|
| RailwayNetwork getRailYard() | Возвращает ж/д узел, которому принадлежит эта стрелка, или null , если стрелка не является частью ж/д узла. |
| double getX() | Возвращает X-координату стрелки. |
| double getY() | Возвращает Y-координату стрелки. |
| double getZ() | Возвращает Z-координату стрелки. |
| Функция | Описание |
|---|---|
| double getRadius() | Возвращает радиус стрелки. |
| void setRadius(double radius) | Задает радиус стрелки. |
| Функция | Описание |
|---|---|
| Level getLevel() | Возвращает уровень, на котором находится стрелка. |
Внешний вид
| Функция | Описание |
|---|---|
| Paint getColor() | Возвращает цвет (или текстуру) стрелки. |
| Color getSelectionColor() | Возвращает цвет линии, анимирующей текущее положение стрелки во время выполнения модели. |
| void setColor(Paint color) | Задает цвет (или текстуру) стрелки. |
| Функция | Описание |
|---|---|
| boolean isVisible() | Проверяет, видна ли стрелка. Если true , стрелка видна, если false — нет. |
| void setVisible(boolean v) | Задает видимость стрелки. |
| Функция | Описание |
|---|---|
| void remove() | Удаляет стрелку из презентации. Если стрелка не является частью презентации, функция не выполняет ничего. Обратите внимание, что удаление из презентации не обязательно подразумевает удаление из логики модели, поскольку логические сети и маршруты могли быть заданы еще до удаления элемента и не исчезают. |
Создание стрелки с помощью кода
| Функция | Описание |
|---|---|
| void setTracks(RailwayTrack. tracks) | Данная функция используется, чтобы задать ж/д пути, соединенные со стрелкой, при построении ж/д узла с помощью кода. Вы можете передать любое количество путей в качестве аргументов. |
Транспортеры. Учимся пользоваться Библиотекой производственных систем (часть 2)

С выходом AnyLogic 8.3 пользователям стала доступна Библиотека производственных систем. Чтобы научить вас работать с ней, мы запустили серию тематических статей в блоге. В них рассказываем об основных функциях библиотеки и её составляющих – блоках и элементах разметки пространства – на примерах из реального производства.
Мы уже писали про моделирование производственных конвейеров. Но продукцию часто транспортируют не только конвейеры, но и погрузчики, а также роботизированные и механические тележки.
В AnyLogic за моделирование этих действий также отвечает Библиотека производственных систем: блоки TransporterFleet , MoveByTransporter , SeizeTransporter и ReleaseTransporter , а также элементы разметки пространства. Сегодня мы покажем, как использовать этот функционал, на примерах моделей. Их можно найти через главный экран AnyLogic в разделе «Обучающие модели».
Чтобы вам были доступны обновлённые версии моделей, рекомендуем пользоваться последней версией AnyLogic – 8.3.3. Ну что, поехали!
Модель MoveByTransporter
В модели MoveByTransporter роботизированные тележки-транспортеры – AGV (от англ. automated guided vehicles) – развозят прибывающие с трёх конвейеров коробки на принимающие конвейеры. При этом цвет коробки соответствует цвету контейнера, на который она попадёт.
Движение тележек по территории предприятия может быть организовано по дорожкам – сети специальных магнитных лент. Такая маршрутная сеть моделируется в AnyLogic с помощью элементов разметки пространства. Для этого используется элемент разметки Путь на палитре Библиотека производственных систем в разделе Разметка пространства , с помощью которого рисуется сеть нужного размера на холсте Main. Обратите внимание: если присоединить одну дорожку к другой в любой точке, кроме конечных, образуется элемент Точечный узел. В AnyLogic 8.3 он эволюционировал в настоящий перекрёсток. AnyLogic автоматически рисует траектории поворотов, необходимые для связей всех путей. Если радиус элемента увеличить, пути в рамках перекрёстка изменятся. От радиуса элемента также зависит размер площади, которую занимает перекрёсток.
Кроме визуализации траекторий перекрёсток выполняет другую важную задачу – регулирует разъезд транспортеров, не позволяя им наезжать друг на друга. Если вас пугают такие новшества, перекрёсток может быть сжат в привычный точечный узел ☺.

Изменение размера элемента Точечный узел
Примеры перекрёстков, образованных с помощью элемента Точечный узел
Обратите внимание, что все пути, используемые транспортерами, должны оканчиваться одним из элементов: Точечный узел, Прямоугольный узел или Многоугольный узел. Только в них транспортер способен развернуться и поехать в обратную сторону. В нашем случае два прямоугольных узла служат базовым местоположением AGV. Элементы разметки Аттрактор указывают положение и направление каждого транспортера, поэтому их число во всех зонах размещения транспортеров должно равняться или быть больше общего числа AGV.
Общий вид на Main модели MoveByTransporter
После того, как все пути построены, создаём новый тип агента, моделирующий поведение AGV. Для этого мы используем элемент Тип транспортера , создающий агента, и настраиваем его с помощью встроенного помощника. В данном случае настроена только анимация AGV (объект Автоматическая самоходная тележка в разделе Склады и контейнерные терминалы).
Для создания одного транспортера или группы транспортеров, одинаковых по своим параметрам (габаритам и скорости), используется блок TransporterFleet . В качестве типа агента, выполняющего роль транспортера, выбирается агент Transporter (в свойствах блока в списке Новый транспортер – элемент Transporter). В данной группе будет использоваться 12 транспортеров: соответствующее значение записано в свойстве Количество транспортеров. Их базовым местоположением будут два Прямоугольных узла, включённых в разметку пространства. В качестве базового местоположения для транспортера можно также использовать обычный элемент Точечный узел.
Размеры и параметры скорости задаются в настройках блока:
- Длина транспортера учитывается AnyLogic при расчёте расстояния до препятствия или другого транспортера на его пути.
- Высота определяет положение перевозимого груза: по умолчанию груз в 3D располагается в центре координат агента-транспортера и поднят на указанную высоту. Если груз должен быть смещён от центра, можно воспользоваться пользовательской функцией setCargoPosition , позволяющей точно указать его расположение относительно транспортера. Кстати, габариты транспортера также можно задать в свойствах типа агента, моделирующего AGV ( Transporter ) в секции Размеры и движение.
Свойства блока TransporterFleet
Далее мы создали тип агента Item , создающий коробки и перемещающий их в модели с помощью AGV и конвейеров – операции, которые описаны на диаграмме процесса (см. ниже). Цвет коробки задаётся с помощью API-функции, а габариты – цифрами.
Свойства агента Item
Для определения начальных и конечных конвейеров в агенте Item созданы 2 переменные – sourceConveyor и targetConveyor . При выходе из блока Source им задаётся значение начального и конечного конвейера c помощью пользовательских функций getSourceConveyor и getTargetConveyor : будто бы на каждую коробку клеют штрихкод с указанием начального и конечного конвейера.
Свойства блока Source
Наконец, создаётся оставшаяся часть диаграммы процесса, отвечающая за перемещение агентов по системе конвейеров и маршрутов AGV.
Диаграмма процесса модели MoveByTransporter
Блок Source (с выбранным в качестве Новый агент типом агента Item ) генерирует перемещаемые заявки. Блоки convey и convey1 отвечают за перемещение заявок по конвейерам. При этом агент в них перемещается по конвейеру, заданному в переменной. О настройке блока Convey мы подробно рассказали в посте про моделирование конвейеров.
Свойства блока Convey
Остановимся подробнее на новом блоке moveByTransporter . В случае, если погрузка и выгрузка груза с AGV может быть смоделирована простой задержкой, все задачи транспортера могут быть выполнены этим блоком. В секции Захват транспортера в поле Автопарк указана группа транспортеров transporterFleet (тип TransporterFleet ), перевозящих агентов, которые проходят через блок moveByTransporter . Время погрузки – задержка, равная 5 секундам. В качестве места, откуда транспортер может забрать агента могут быть заданы:
- агент, вызвавший транспортер;
- узел – точка разметки пространства;
- аттрактор;
- любой путь с указанным смещением от его начала или конца;
- конвейер с указанным смещением от его начала или конца;
- точка на конвейере;
- станция обработки;
- координаты точки на холсте.
Когда место погрузки находится вне путей перемещения транспортеров, AnyLogic автоматически определяет ближайшую к нему точку на путях и отправляет транспортер туда. В нашей модели выбрана опция Агент в свойстве Место.
Свойства блока MoveByTransporter
Определив, где AGV должна будет забрать вызвавшего её агента, задаём точку назначения. Этот процесс похож на то, как выбиралось место погрузки. Выберем в качестве пункта назначения начало конвейера, принимающего данный тип грузов. Для этого в свойстве Место назначения выберем значение Конвейер, а в поле Конвейер кодом зададим динамическое значение agent.targetConveyor , позволяющее отправлять каждый груз на конвейер того же цвета. По умолчанию транспортер сможет сам определить кратчайший маршрут в сети и будет стараться не допустить столкновения с другими транспортерами.
В случае если избежать пересечения путей не удалось, спустя 10 секунд транспортеры проезжают сквозь друг друга. Такая задержка служит для имитации сложного разъезда AGV, которым обычно удалённо управляет оператор или автоматическая система. Более детальная настройка маршрутизации AGV появится в следующих версиях программы.
Опишем процесс разгрузки агента с транспортера в секции Освобождение транспортера. В свойстве Время разгрузки укажем время разгрузки – 15 секунд. Освободившийся транспортер способен:
- возвращаться в базовое местоположение каждый раз;
- возвращаться в базовое местоположение при отсутствии других задач;
- оставаться в точке разгрузки.
В нашем случае AGV приступает к погрузке и перемещению агента, как только достигает точки погрузки. Соответственно, высвобождение AGV происходит моментально после того, как агент достиг пункта назначения и был выгружен.
Свойства блока MoveByTransporter
Когда AGV забирают грузы на конвейерах, они подъезжают на максимально близкое расстояние в рамках доступных для них путей. Транспортеры также определяют и максимально близкие точки к принимающим конвейерам несмотря на то, что на пути, проходящем мимо конвейеров, нет выделенных точек.
Модель SeizeTransporter and ReleaseTransporter
В моделях, где задачи погрузки и разгрузки максимально просты, а транспортер только доставляет груз до конечной точки, не делая промежуточных остановок (например, на станциях), вся логика может быть описана блоком MoveByTransporter . Когда процессы погрузки и выгрузки также играют значимую роль, блоки SeizeTransporter и ReleaseTransporter может быть удобнее использовать отдельно.
Рассмотрим модель SeizeTransporter and ReleaseTransporter. В данной модели в качестве транспортера используются специализированные AGV, перевозящие тяжёлые грузы – рулоны мелованной бумаги. Погрузку и выгрузку рулонов осуществляют краны (их логика описана c помощью Библиотеки моделирования систем).
Диаграмма процесса модели SeizeTransporter and ReleaseTransporter
В модели с помощью элементов разметки Путь, Точечный узел и Прямоугольный узел изображена сеть, по которой движутся транспортеры, и их базовое местоположение. С помощью типа агента Тип транспортера создаётся новый тип агента – AGV . Также добавляется блок agvFleet (тип TransporterFleet ) и задаются свойства группы транспортеров, перевозящих рулоны. Группа включает три AGV (свойство Количество транспортеров – 3, свойство Новый транспортер – AGV ). Габариты AGV настраиваются отметкой свойства Изменить размеры и заполнением поля Длина – 2.5 метра.
Общий вид на Main модели SeizeTransporter and ReleaseTransporter
Блок Source генерирует заявки (рулоны) и размещает их в области под краном (точечный узел node1). Кран начинает движение за рулоном в тот момент, когда принимающая груз AGV прибывает в точку погрузки. При этом во время движения крана, транспортер должен ожидать на месте. Для моделирования такого поведения в модели использован блок seizeAGV (тип SeizeTransporter ). Рассмотрим подробнее его свойства и работу.
В свойстве Автопарк указывается группа AGV, из которых будет выбираться транспортер для перевозки поступающих в блок агентов – agvFleet . В качестве пункта назначения для AGV, подъезжающей к рулону, установлена опция Агент. Это позволяет отправлять транспортер к точке, расположенной на минимальном расстоянии от захватившего его агента, но в то же время на путях следования AGV.
Секция Приоритеты используется для задания очерёдности задач на перевозку грузов, поступающих к группе AGV.
- Параметр Приоритет задачи хранит числовое значение, отражающее значимость заявки.
- Параметр Может вытеснять другие задачи отражает возможность AGV, движущейся к агенту, быть перехваченной другим, более приоритетным агентом.
- Параметр Правило вытеснения задач определяет, что делать с теми задачами, которые были вытеснены более приоритетными – ждать ресурс, который был захвачен в самом начале или отправиться в путь на другом свободном транспортере.
В следующей секции, Специфические, можно выбрать транспортер, на котором должен быть перемещён агент. Параметр Задать выбор транспорта позволяет задать собственную политику выбора AGV в динамическом поле Условие выбора транспортера. Подходящих под заданное пользователем условие транспортеров может быть много (в частности, если условие выбора не задано, мы по-прежнему располагаем полным парком AGV). Поэтому свойство Политика выбора транспортера позволяет указать, какой именно транспортер будет выбран из группы:
- ближайший подходящий под условие;
- на основе попарного сравнения, заданного функцией в динамическом поле;
- с наибольшим значением свойства, заданного функцией в динамическом поле;
- случайный, первый подходящий под условие (опция Не применяется).
В нашей модели все эти свойства заданы по умолчанию.
Свойства блока seizeAGV
Обратите внимание на то, что агент находится в блоке seizeAGV до того момента, пока транспортер не подъедет к точке погрузки. Только после этого агент продолжает движение по диаграмме процесса, а захваченный транспортер продолжает ожидать его в указанной точке.
Затем агент-рулон бумаги попадает в блоки:
- seizeLoadCrane (тип Seize ), где агент захватывает отвечающий за погрузку кран;
- craneLoading (тип Delay ), ответственный за подъем краном
- toAGV (тип MoveTo ), перемещающий агента к AGV;
- agvLoading (тип Delay ), ответственный за погрузку на ожидающий AGV.
Теперь размещённый на транспортере рулон может быть направлен в другую часть цеха, где он будет снят с AGV другим краном и размещён на конвейере. Для перемещения используется уже знакомый блок moveByAGV (тип MoveByTransporter ). В свойствах блока не выбрано свойство Захватывать транспортер, так как используемый AGV уже прибыл к месту погрузки и принял груз. В свойстве Место назначения из списка выбран Конвейер и конвейерная линия, к которой доставляется груз.
Если свойство Освобождать транспортер оставить выбранным, то AGV после небольшой задержки скинет груз, как только доедет до ближайшей к конвейеру позиции. Однако в случае разгрузки с использованием крана это не то поведение, которого мы ожидаем. Поэтому галочка со свойства Освобождать транспортер должна быть снята. По достижению точки назначения AGV остаётся стоять на пути, связанный с перевозимой заявкой.
Перейдя в следующий блок seizeUnloadCrane (тип Seize ), агент захватывает кран, отвечающий за погрузку на конвейер, и снимается с AGV в блоке agvUnloading (тип Delay ). После этого агент высвобождает AGV в блоке releaseAGV (тип ReleaseTransporter ). В блоке задана настройка, возвращающая AGV в базовое местоположение при отсутствии других задач. Иначе при отсутствии новых задач текущий AGV будет препятствовать разгрузке остальных AGV, занимая общее место.
Свойства блока ReleaseAGV
После высвобождения агент переходит в блок toConveyor (тип MoveTo ), в котором движется с помощью крана к точке у начала конвейерное линии. Затем агент опускается на конвейер в блоке craneUnloading (тип Delay ) и затем высвобождает кран в блоке releaseUnloadCrane (тип Release ). Наконец, рулон покидает транспортную систему, проходя в блоке Convey через её последнее звено – конвейер.
Теперь вы знаете, как моделировать перемещение грузов на предприятии с помощью Библиотеки производственных систем. Вот что мы рекомендуем запомнить:
- Если погрузка/выгрузка может быть смоделирована простой задержкой, а транспортер не делает промежуточных остановок по пути к цели, выбирайте блок MoveByTransporter . Когда процессы погрузки и выгрузки играют важную роль, лучше использовать отдельно блоки SeizeTransporter и ReleaseTransporter .
- Если транспортеры пересекаются и не могут разъехаться, они проедут сквозь друг друга через 10 секунд. Такая задержка служит для имитации сложного разъезда AGV, которым обычно удалённо управляет оператор или автоматическая система.
- Заранее решите, что должен делать транспортер, когда освободится. Его действиями можно управлять с помощью настроек блока MoveByTransporter .
- С помощью элемента Точечный узел теперь можно визуально представить перекрёсток со всеми входящими в него дорогами. Для этого нужно увеличить радиус перекрёстка.
В следующих выпусках нашего блога мы перейдём к более сложным моделям и более хитрым подходам к использованию рассмотренных блоков. Не забудьте прочитать пост про моделирование конвейеров: этот материал поможет проще ориентироваться в наших следующих постах.
Если вы уже построили модель с помощью новой библиотеки, загрузите её в AnyLogiс Cloud и оставьте ссылку в комментариях. Мы оценим, выберем лучшую и пришлём её автору футболку AnyLogic ☺.
Построение маршрутов на тайловой карте ГИС в оффлайне

- полезные советы
- GIS
Как вы уже знаете, AnyLogic 7.1 предоставляет широкую функциональность работы с тайловыми картами. По умолчанию программа скачивает карты из разных онлайновых источников и строит с их помощью маршруты.
Однако бывает, что скачивать карту из интернета при работе с моделью неудобно: нет подключения к сети, интернет работает медленно или на сервере технические неполадки. Поэтому в программе предусмотрена возможность использования карт в оффлайновом режиме.
AnyLogic кэширует использованные ранее сегменты карты. Загружаемые во время разработки и запуска модели тайлы сохраняются в кэш, позволяя вам в дальнейшем работать в автономном режиме.
Также программа позволяет строить маршруты из файла на вашем компьютере. Вы можете найти в интернете и скачать дампы карт типа .osm и .pbf для какой-то определенной территории или всего мира и загрузить эти файлы в AnyLogic. По этим данным AnyLogic автоматически построит граф, что значительно уменьшит время создания маршрутов. Вам не придется иметь постоянное подключение к интернету, если вы заранее знаете зону, в которой будут проходить ваши маршруты.
Существуют различные сайты, где можно скачать дампы форматов .osm и .pbf. Мы используем Geofabric (регионы мира) и GIS Lab (регионы России), вы можете найти другие. Подробная инструкция о том, как использовать свои оффлайновые карты в AnyLogic, находится в справочной документации.
Надеемся, что новая функциональность принесет вам пользу!