Учебное пособие по Железнодорожной библиотеке

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

Шаг 1. Добавление поезда

 Создайте поезд и "запустите" его по пути
  1. Нарисуйте ломаную линию, состоящую из одного участка. Пусть ломаная начинается в точке с координатами (0,50) и заканчивается в точке (1100, 50). Назовите ее track.
  2. Щелкните правой кнопкой мыши по ломаной и выберите Группировка | Создать группу из контекстного меню. Будет создана группа, содержащая только эту ломаную. Назовите эту группу groupRailYard.
  3. Откройте палитру Железнодорожная библиотека и перетащите объект RailYard из палитры на графическую диаграмму, скажем, в точку (50, 100).
  4. Введите в поле параметра Группа фигур объекта railYard имя только что созданной группы: groupRailYard.
  5. Перетащите из той же палитры три объекта: TrainSource, TrainMoveTo и TrainDispose. Поместите и соедините их последовательно, как показано на рисунке ниже (чтобы соединить два порта, сделайте двойной щелчок по одному соединяемому порту, а затем одиночный щелчок - по другому порту).
  1. Выберите объект trainSource. Задайте у этого объекта следующие параметры:
Объект RailYard: railYard
Путь (ломаная): track
Смещение первого вагона, м.: 200
Крейсерская скорость, м/с: 10
  1. Щелкните мышью по элементу модели (самый верхний элемент дерева) в панели Проекты. Проверьте на странице основных свойств, что в поле Единицы модельного времени выбраны минуты.
  2. Запустите модель. До момента модельного времени 10 ничего происходить не будет. В момент 10 (и затем - в моменты 20, 30 и т.д.) в начале пути будет появляться поезд. Он будет перемещаться вправо и покидать путь.

Обратите внимание на параметры объекта trainSource. Мы сконфигурировали объект trainSource так, что он создает поезд на ж/д узле, помещает его на путь track так, что передний торец его первого вагона расположен в 200 метрах от начала пути. Поезд будет направлен вперед относительно направления пути (см. параметр Направление на пути), поэтому оставшаяся часть поезда расположится между началом пути и точкой 200. В момент своего создания поезд должен полностью находиться на пути, поэтому Вам нужно будет проверить, достаточно ли свободного места на пути для его размещения. По умолчанию у создаваемого объектом TrainSource поезда 11 вагонов, а длина каждого вагона по умолчанию равна 14 метрам. Поскольку 11*14 = 154 < 200, то места для размещения нового поезда на пути должно хватить.

Простейшая диаграмма железнодорожного процесса: поезд появляется и движется вдоль пути

По умолчанию объект TrainSource создает поезда каждые 10 минут, поэтому в моменты модельного времени 10, 20, 30… (как Вы помните, единицами модельного времени являются минуты), объект trainSource будет создавать поезд в одном и том же месте, и нам нужно убедиться, что ранее добавленный поезд уже освободит требуемую часть пути к моменту создания следующего поезда.

Крейсерская скорость, заданная Вами в объекте trainSource (10 метров в секунду, что соответствует 36 км/ч) будет принятой по умолчанию скоростью движения нашего поезда.

У поезда есть текущая скорость (скорость, с которой он движется в текущий момент времени). При создании поезда объектом TrainSourceего текущая скорость задается равной его крейсерской скорости, то есть полагается, что поезд уже двигался с этой крейсерской скоростью. Это делается для того, чтобы сделать возможным немедленное продолжение движения с той же скоростью. В любой момент времени Вы можете изменить скорость путем вызова функции setVelocity() этого поезда.

Теперь взгляните на параметры объекта trainMoveTo. Вы увидите, что в параметре При начале движения выбрана опция Продолжать движение с текущей скоростью, в параметре Направление движения выбрано Вперед, что означает, что поезд появится в модели двигающимся со скоростью 36 км/ч. В объекте trainMoveTo не заданы ни цель движения, ни опции маршрутизации поезда, поэтому поезд будет естественным образом покидать путь track через его правый конец, и заявка-поезд будет покидать объект  trainMoveTo и уничтожаться объектом TrainDispose.

Шаг 2. Добавление остановки поезда

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

 Добавьте остановку поезда

  1. Откройте палитру Презентация, сделайте двойной щелчок по элементу палитры Линия и нарисуйте короткую вертикальную линию, пересекающую путь в точке с координатой X=500. Назовите линию redLine.
  2. Выделите объект trainMoveTo и задайте следующие параметры:
    МаршрутВычисляется автоматически от текущего пути до пути назначения
    Цель движенияПересечение заданного пути и линии
    Путь: track
    Линия: redLine
  3. Запустите модель. Вы увидите, что теперь при достижении красной линии поезда будут исчезать.
  4. Измените диаграмму процесса. Отсоедините объект trainDispose от объекта trainMoveTo и переместите его вправо, чтобы освободить место для двух новых объектов.
  5. Переименуйте объект trainMoveTo в toStop.
  6. Откройте палитру Enterprise Library и перетащите объект Delay из палитры в диаграмму процесса, поместив его сразу за объектом toStop. Назовите объект trainStop. Установите для параметра Время задержки значение 1*minute()
  7. Снова откройте палитру Железнодорожная библиотека  и добавьте оттуда один объект TrainMoveTo, поместив его между объектами trainStop и trainDispose. Назовите его toExit. Соедините порты этих объектов.
  8. Снова запустите модель. Теперь поезд будет останавливаться у красной линии, задерживаться там на одну минуту, а затем продолжать свое движение к правому концу пути.

В первом объекте TrainMoveTo, который теперь называется toStop, мы указали цель движения, заданную графически с помощью красной линии. (Обратите внимание, что линия не является частью группы фигур ж/д узла.) Достигнув красной линии, заявка-поезд покидает объект toStop и поступает в объект trainStop типа Delay, моделирующий задержку. Пока заявка-поезд находится в объекте trainStop, поезд не движется. Затем, по истечении одноминутной задержки, заявка-поезд покидает объект trainStop и поступает во второй объект TrainMoveTo (toExit), который перемещает ее дальше.

В этой диаграмме процесса мы используем объекты Железнодорожной библиотеки совместно с объектами Основной библиотеки. Это возможно в силу того, что создаваемый объектом TrainSource объект Train является подклассом базового класса заявки Entity. Поэтому поезд может интерпретироваться как заявка и управляться блоками Основной библиотеки.

Полная диаграмма процесса модели. 2D анимация по умолчанию.

Если Вы посмотрите на параметры объекта toExit, то увидите, что в параметре При начале движения выбрана опция Продолжать движение с текущей скоростью. Вы можете резонно спросить - почему же поезд начал движение, если его скорость во время остановки была равна нулю? Ответ таков: мы не просили поезд тормозить и останавливаться во время первого перемещения. Поэтому поезд покинул объект toStop со скоростью 10 м/с, которая "осталась неизменной" во время остановки, хотя физически поезд не двигался. Очевидно, что это неестественное поведение: поезд не может мгновенно останавливаться и мгновенно набирать необходимую скорость. Но на определенном уровне абстракции, не требующем излишней точности на физическом уровне, такое упрощение может быть допустимо. Теперь давайте добавим торможение поезда перед остановкой и ускорение при возобновлении движения.

 Добавьте ускорение / торможение

  1. Выделите объект toStop и выберите из группы кнопок При окончани движения опцию Затормозить и остановиться.
  2. Выделите объект toExit и выберите из группы кнопок При начале движения опцию Ускорять/тормозить до крейсерской скорости.
  3. Запустите модель. Попробуйте менять значения крейсерской скорости, торможения и ускорения (они заданы в объекте TrainSource). Если нужно, замедлите выполнение модели.

Шаг 3. Добавление 3D анимации

Закончим создание нашего примера добавлением трехмерной анимации моделируемого процесса.

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

  1. Щелкните по группе groupRailYard и установите флажок Отображать на 3D сцене на странице свойств Основные.
  2. Щелкните правой кнопкой мыши по группе и выберите Выделить содержимое группы из контекстного меню. При этом будут выделены все фигуры ж/д узла.
  3. На странице свойств Дополнительные введите 1 в поле Z-Высота.
  4. Откройте палитру 3D и перетащите элемент 3D Окно на графическую диаграмму, под диаграмму процесса. Измените размер окна (пусть он будет примерно равен 1000x250 пикселей).
  5. Запустите модель. Переместите камеру так, чтобы было лучше видно путь и поезд.

По умолчанию вагонам приписаны достаточно схематичные фигуры 3D анимации. Но Вы всегда можете заменить их, загрузив другое трехмерное изображение вагона с помощью элемента 3D объект или, что еще проще, просто использовав в качестве фигуры анимации вагона один из готовых к использованию трехмерных объектов, расположенных в палитре AnyLogic 3D Объекты.

 Используйте готовые 3D объекты в качестве фигур анимации вагонов

  1. Откройте палитру 3D Объекты. Перетащите элементы Пассажирский вагон и Локомотив из палитры куда-нибудь на диаграмму класса.
  2. Выделите объект trainSource.
  3. Введите в поле параметра Анимация вагонов {shape1, … }: {locomotive, passengerCar} .

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

  1. Запустите модель. Посмотрите на 3D анимацию поезда. Вы можете заметить, что фигуры вагонов на анимации накладываются друг на друга.

Это происходит потому, что трехмерные изображения вагонов имеют различную длину (как и в реальной жизни), а объект TrainSource использует для всех вагонов одну, заданную по умолчанию для объекта RailCar, длину, равную 14 метрам. Нам нужно задать различные длины для наших вагонов. Это может быть сделано в параметре Длины вагонов, м. объекта TrainSource или в коде его параметра Инициализация вагона.

  1. Выделите объект trainSource. Введите в поле параметра Длины вагонов, м.: {14, 27} .

В AnyLogic трехмерные изображения локомотива и всех типов грузовых вагонов в палитре 3D Объекты имеют длину 14 метров, а пассажирский вагон - 27 метров.

  1. Поскольку наш поезд стал длиннее, нам нужно так изменить его начальное расположение, чтобы все вагоны помещались на путь. Введите в поле параметра Смещение первого вагона, м.: 14 + 27*10 + 10. (Последнее слагаемое, 10, добавлено для надежности, ведь могут произойти численные ошибки вычисления.)
  2. Запустите модель.
 Нарисуйте платформу в месте остановки поезда
  1. Откройте палитру 3D и перетащите Прямоугольник на холст диаграммы.
  2. Измените размер и местоположение прямоугольника следующим образом (для этого Вам может понадобиться изменить масштаб):
  3. X: 265, Y:52, Ширина: 285, Высота: 10. Прямоугольник должен появиться прямо под путем, слева от красной линии.
  4. Выберите в свойстве прямоугольника Цвет линии: Нет цвета, а в свойстве Цвет заливки - текстуру concrete (бетон).
  5. На странице свойств прямоугольника Дополнительные задайте: Z: 2, Z-Высота: 1.
  6. Снова запустите модель.

  

Запущенная модель Train Stop. Местоположение камеры было изменено