TrainSource


С объекта TrainSource начинается диаграмма любого железнодорожного процесса.

Создает поезда, помещает их на один из путей ж/д узла, и вставляет заявку типа Train в диаграмму процесса поезда. 

Начиная с версии 6.7 созданный поезд может не добавдяться этим объектом в железнодорожный узел, а передаваться дальше по диаграмме процесса как заявка-поезд, которая может проходить через объекты Основной библиотеки. Это может быть нужно в том случае, если какая-то часть движения поезда моделируется на более высоком уровне абстракции, а не на детальном, физическом уровне. В этом случае добавить поезд в железнодорожный узел можно будет, поместив в дальнейшем в диаграмму процесса объект TrainEnter

"Времена прибытий" поездов, т.e. времена возникновения поездов в модели, задаются аналогично временам появления заявок в объекте Source Основной библиотеки - либо с помощью расписания прибытий, либо путем задания времен между прибытиями. Кроме того, есть "ручной режим" создания, при котором объект TrainSource будет создавать поезда только в моменты вызова его функции inject(). Вы можете задать максимально допустимое количество прибытий.

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

Вы можете присвоить вагонам любые 2D или 3D фигуры анимации и выполнить любую дополнительную инициализацию для каждого вагона в параметре Инициализация вагона, (например, задать нестандартную длину). Обратите внимание, что размер нестандартной фигуры анимации вагона не будет автоматически изменяться в соответствии с заданной длиной вагона, поэтому Вам будет нужно выбрать соответствующий масштаб фигуры анимации так, чтобы между вагонами поезда не было пустот, и в то же время они не накладывались друг на друга.

Новый поезд помещается на путь, и Вы должны убедиться, что на этом пути есть свободное место для всех вагонов (при создании поезд должен полностью находиться на одном пути). Вам нужно задать, где будет помещен поезд (точка раcположения его первого вагона задается как расстояние от начала пути), а также направление поезда относительно пути. У поезда есть первый вагон (тот, который был создан первым) и последний вагон. 

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

Параметры класса

Класс поезда
Класс поездов, создаваемых этим объектом. Он должен быть унаследован от класса Train, который, в свою очередь, унаследован от Entity. Если Вы создаете поезда какого-то своего класса, то рекомендуем Вам указать его здесь, чтобы иметь возможность напрямую обращаться к собственным полям этого класса в динамических параметрах, таких, как Действие при выходе
Синтаксис:  T extends Train
Значение по умолчанию: Train
Класс вагона
Класс вагонов, создаваемых этим объектом. Он должен быть унаследован от класса RailCar (обратите внимание, что класс RailCar НЕ является подклассом класса Entity), и поэтому, в отличие от поездов, не может обрабатываться блоками диаграммы процесса). Если Вы создаете вагоны какого-то своего класса, то рекомендуем Вам указать его здесь, чтобы иметь возможность напрямую обращаться к собственным полям этого класса в динамических параметрах, таких, как Действие при выходе. Также в этом случае Вам будет нужно вызвать конструктор этого класса в поле параметра Новый вагон.
Синтаксис:  RC extends RailCar
Значение по умолчанию: RailCar
[Обратите внимание, что в приведенных ниже описаниях RC означает класс, заданный пользователем в поле Класс вагона (по умолчанию - RailCar). Так же и T означает класс, заданный пользователем в поле Класс поезда. ] 

Вложенные объекты

Source source

Управляет прибытием (созданием) поездов.

Порты

Port out

Выходной порт.

Параметры

Поезда прибывают согласно
Задает режим создания поездов:
Времени между прибытиями - Вы задаете выражение, вычисляющее время между двумя последовательными прибытиями поездов.
Расписанию прибытий – поезда создаются в моменты времени, заданные расписанием прибытий.
Вызовам метода inject() - поезда не создаются автоматически, для их создания необходимо вызывать метод inject().
Синтаксис: int arrivalType
Значение по умолчанию: Времени между прибытиями
Допустимые значения: Source.INTERARRIVAL_TIME, Source.ARRIVAL_SCHEDULE, Source.MANUAL
Время между прибытиями, мин. [динамический]
[Виден, если в параметре Поезда прибывают согласно выбрана опция Времени между прибытиями] Выражение, используемое для вычисления интервала времени между двумя последовательными созданиями поездов.
Синтаксис: double interarrivalTimeMinutes
Значение по умолчанию: 10
Расписание прибытий
[Виден, если в параметре Поезда прибывают согласно выбрана опция Расписанию прибытий] Имя расписания с целым типом значения, содержащего времена прибытия поездов. Обычно столбец значений содержит значения "1", поскольку в каждый момент времени создается по одному поезду. Если по какой-то причине Вы захотите создать два поезда в один и тот же момент времени, Вы должны сделать так, что они будут помещены в различные места ж/д узла.
Синтаксис: Schedule arrivalSchedule
Кол-во прибытий ограничено
Если опция выбрана (true), то количество прибытий поездов в данном объекте будет ограничено параметром Максимальное кол-во прибытий.
Синтаксис: boolean limitArrivals
Значение по умолчанию: false
Максимальное кол-во прибытий
[Виден, если выбран Кол-во прибытий ограничено] Максимально допустимое количество поездов, которое может быть создано этим объектом.
Синтаксис: int maxArrivals
Значение по умолчанию: Integer.MAX_VALUE
Новый поезд [динамический]
Выражение, возвращающее создаваемый объектом поезд - это может быть экземпляр базового класса поезда Train или его подкласса. Обычно здесь находится вызов конструктора соответствующего класса, по умолчанию - класса Train: new Train()
Синтаксис: T newTrain
Значение по умолчанию: new Train()
Кол-во вагонов (включая локомотив) [динамический]
Количество вагонов в поезде. Значение должно быть не меньше 1.
Синтаксис: int numberOfCars
Значение по умолчанию: 11
Новый вагон [динамический]
Выражение, используемое объектом TrainSource для создания нового вагона. Обычно здесь помещается конструктор класса вагона (это может быть класс RailCar, либо его подкласс). Вы можете вызвать конструкторы различных классов для различных вагонов с опмощью локальной переменной carindex, например: carindex == 0 ? new MyLocomotive() : new MyHopper()
Синтаксис: RailCar newRailCar
Локальная переменная: int carindex - индекс создаваемого в данный момент вагона, нумерация начинается с 0
Значение по умолчанию: new RailCar()
Анимация вагонов { shape1, … } [динамический]
Список 2D и 3D фигур, используемых для анимации вагонов поезда. Первый элемент списка соответствует первому вагону, и т.д. Если количество элементов списка меньше количества вагонов поезда, то последняя фигура списка присваивается всем оставшимся вагонам. Например, для поезда, состоящего из одного локомотива и десяти пассажирских вагонов достаточно предоставить список { locomotive, passengerCar }. Если Вы оставите список пустым (оставите значение null), то будут использоваться принятые по умолчанию фигуры анимации.
Синтаксис: shape[] carAnimations
Значение по умолчанию: null
Длины вагонов, в метрах { 15, 19, … } [динамический]
Список длин вагонов поезда, в метрах. Первый элемент списка соответствует первому вагону, и т.д. Если количество элементов списка меньше количества вагонов поезда, то значение последнего элемента списка присваивается всем оставшимся вагонам. Например, поезд, состоящий из одного локомотива длины 12 и десяти пассажирских вагонов длиной 19, можно легко проинициализировать простым списком { 12, 19 }. Если Вы оставите список пустым (оставите значение null), то будут использоваться заданная по умолчанию в классе RailCar длина вагонов. Вы можете переопределить длины в параметре Инициализация вагона.
Синтаксис: double[] carLengths
Значение по умолчанию: null
Инициализация вагона [динамический]  
Код, который будет выполняться для каждого вагона. Здесь Вы можете произвести дополнительную инициализацию вагона. Это второе (после предыдущего параметра) и последнее место, где Вы можете изменить заданные по умолчанию длины Ваших вагонов. Также Вы можете задать фигуры анимации вагонов, произвести инициализацию переменных для сбора определенной статистики и т.д. Чтобы различать вагоны, используйте локальную переменную carindex, например: car.setWidth( carindex == 0 ? 3.5 : 4 );
Синтаксис: carSetup
Локальные переменные: RC car – инициализируемый вагон
                          int carindex - индекс инициализируемого вагона, нумерация начинается с 0
             T train – поезд
После создания  
Параметр задает, что нужно сделать с созданным поездом. Есть два альтернативных варианта:
Поместить поезд на путь узла - Созданный поезд помещается на заданный путь узла (узел, путь, смещение и направление на пути задаются в этом случае в приведенных ниже параметрах объекта).
Оставить как заявку (потребует объекта TrainEnter в дальнейшем) - Созданный поезд не помещается на путь железнодорожного узла, а передается дальше по диаграмме процесса как заявка-поезд, которая может проходить через объекты Основной библиотеки. Это может быть нужно в том случае, если какая-то часть движения поезда моделируется на более высоком уровне абстракции, а не на детальном, физическом уровне. В этом случае добавить поезд в железнодорожный узел можно будет, поместив в дальнейшем в диаграмму процесса объект TrainEnter
Синтаксис: boolean putInRailYard
Значение по умолчанию: Поместить поезд на путь узла
Объект RailYard

[Виден, если в параметре После создания выбрана опция Поместить поезд на путь узла] Здесь нужно указать имя объекта типа RailYard, задающего конфигурацию ж/д узла, на котором будут появляться новые поезда.
СинтаксисRailYard railYard

Путь (ломаная) [динамический]  
[Виден, если в параметре После создания выбрана опция Поместить поезд на путь узла] Ломаная, задающая путь, куда будет помещен созданный поезд (все вагоны при этом должны полностью находиться на этом пути).
Синтаксис: ShapePolyLine track
Значение по умолчанию: null
Смещение первого вагона, м. [динамический]
[Виден, если в параметре После создания выбрана опция Поместить поезд на путь узла] Расстояние от начальной точки пути до переднего торца первого вагона поезда. Если Вам удобнее измерять смещение от конечной точки пути, то Вы можете использовать локальную переменную tracklength.
Синтаксис: double offset
Значение по умолчанию: tracklength - 10
Локальная переменная: double tracklength – длина пути
Направление на пути
[Виден, если в параметре После создания выбрана опция Поместить поезд на путь узла] Задает, как направлен поезд относительно направления пути:
Вперед (первый вагон ближе к концу пути) – поезд направлен так же, как и путь
Назад (первый вагон ближе к началу пути) – поезд направлен в противоположную сторону
Синтаксис: boolean orientation
Значение по умолчанию: Вперед (первый вагон ближе к концу пути) - true
Крейсерская скорость, м/с [динамический]
Крейсерская скорость поезда (в м/с). Эта крейсерская скорость будет использоваться по умолчанию, но Вы можете впоследствии изменить ее с помощью функций поезда или в объекте TrainMoveTo. Скорость поезда будет также задана равной крейсерской скорости в момент покидания поездом объекта TrainSource – подразумевается, что поезд уже как бы ехал со своей крейсерской скоростью. Поэтому если следующим объектом в диаграмме процесса будет TrainMoveTo, то поезд сможет начать движение сразу с крейсерской скоростью и времени на ускорение не потребуется.
Синтаксис: double cruiseSpeed
Значение по умолчанию: 20
Локальная переменная: T train – поезд
Ускорение, м/с2 [динамический]
Ускорение поезда (в м/с2). Если Вы будете ускорять поезд до желаемой скорости, то значение его скорости будет увеличиваться каждую секунду на заданное здесь значение ускорения. Это значение может быть изменено впоследствии с помощью функций поезда.
Синтаксис: double acceleration
Значение по умолчанию: 1
Локальная переменная: T train – поезд
Торможение, м/с2 [динамический]
Торможение поезда (в м/с2). Если Вы будете тормозить поезд до желаемой скорости (или до остановки), то значение его скорости будет уменьшаться каждую секунду на заданное здесь значение торможения. Это значение может быть изменено впоследствии с помощью функций поезда.
Синтаксис: double deceleration
Значение по умолчанию: 2
Локальная переменная: T train – поезд
Действие при выходе [динамический]
Здесь Вы можете задать код, который будет выполняться в тот момент, когда поезд будет покидать этот объект.
Синтаксис: onExit
Локальная переменная: T train – поезд

Функции

void inject() - Мгновенно создает новый поезд (в момент вызова). Поезд будет сконфигурирован согласно заданным значениям параметров объекта TrainSource. Обычно используется, когда в параметре Поезда прибывают согласно выбрана опция Вызовам метода inject().

int count() - Возвращает количество поездов, покинувших объект.