TrainMoveTo


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

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

Если во время движения состав сталкивается с другим составом, то он останавливается и покидает объект TrainMoveTo через порт outHit. Во всех остальных случаях (а именно, в тех случаях, когда поезд достигает заданной точки назначения или покидает ж/д узел), он покидает объект через порт out.

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

Маршрут может быть либо задан явно как последовательность путей, либо вычисляться автоматически. Если вы захотите задать маршрут явно, то вам будет нужно указать имя пути, на котором находится голова поезда, в качестве первого пути, а затем указать все остальные пути, по которым должен будет проследовать поезд (в правильном порядке). В этом случае путь назначения должен быть указан в этой последовательности последним. Если вы хотите, чтобы маршрут вычислялся автоматически объектом TrainMoveTo, то вам будет достаточно задать только путь назначения. Объект TrainMoveTo будет обнаруживать только прямые маршруты, т.e. те, которые не требуют изменения направления движения. При движении с заданным маршрутом поезд будет управлять состояниями стрелок на своем пути, а именно, будет при необходимости изменять при приближении к стрелке ее состояние на требуемое для продолжения движения по заданному маршруту.

Обратите внимание, что Железнодорожная библиотека обнаруживает столкновения поездов, но не несет ответственность за управление потоками поездов, например, не будет задерживать один поезд для того, чтобы дать проехать другому по определенному пути или стрелке. Высокоуровневое управление ж/д движением может быть разным на разных ж/д узлах, и поэтому эта логика должна быть самостоятельно задана разработчиком модели.

Чтобы дать возможность составу принимать решения об ускорении и управлять его направлением по ходу движения, непрерывное движение может моделироваться как последовательность нескольких объектов TrainMoveTo, возможно, с объектами SelectOutput между ними. Вы можете заставить поезд сохранять свою текущую скорость между двумя объектами TrainMoveTo, выбрав в свойстве При окончании движения первого объекта опцию Остановиться с текущей скоростью, а не Затормозить и остановиться. Второй объект TrainMoveTo может тогда либо Продолжать движение с текущей скоростью, либо Ускорять/тормозить до крейсерской скорости.

Вы можете задать особенную крейсерскую скорость для движения, заданного каким-то определенным объектом TrainMoveTo. Если вы не зададите для движения другую крейсерскую скорость, то тогда будет использоваться текущая крейсерская скорость поезда. При определенных длинах маршрута и значениях ускорения/торможения достичь крейсерскую скорость может оказаться невозможным. Текущая (фактическая) скорость поезда может быть получена путем вызова getSpeed() агента Train.

Во время производимого объектом TrainMoveTo движения поезда вы все еще можете изменять его скорость или заставить его ускоряться или тормозить, путем специальных функций поезда. Объект TrainMoveTo предлагает ряд параметров (Действие при...), позволяющих задать действия, которые будут выполняться по мере движения поезда.

Параметры

Направление движения

Определяет, в каком направлении будет двигаться поезд:
Вперед – первый вагон состава будет двигаться первым, в голове поезда.
Назад – в голове поезда будет последний вагон, а первый окажется в хвосте.
Синтаксис: boolean forward
Значение по умолчанию: Вперед (true)

Маршрут
Определяет, как задан маршрут движения:
Не задан (поезд будет следовать согласно стрелкам) – поезд будет двигаться без заданного маршрута, то есть будет просто следовать вперед, выбирая пути согласно текущим состояниям стрелок. Если также выбрана опция Цель движения: Не задана, то при окончании движения (когда поезд покинет ж/д узел), этот поезд будет удален из системы.
Задан как список путей – поезд будет двигаться по явно заданному пользователем маршруту.
Вычисляется автоматически от текущего пути до пути назначения – маршрут будет вычисляться автоматически. В случае выбора этой опции должны быть заданы путь назначения и точка пути, до которой должен доехать поезд.
Получить значение: routeType
Задать значение: set_routeType()
Значение по умолчанию: Не задан (поезд будет следовать согласно стрелкам)
Допустимые значения: TrainMoveTo.ROUTE_NOT_SPECIFIED, TrainMoveTo.ROUTE_LIST_OF_TRACKS, TrainMoveTo.ROUTE_AUTO
Маршрут { track1, track2, …} [динамический]
[Виден, если в параметре Маршрут выбрана опция Задан как список путей] Последовательность путей. Путь, на котором находится головной вагон поезда, должен быть первым путем в этой последовательности. За ним в правильном порядке должны следовать все другие пути, по которым должен будет проехать поезд. Если цель движения задана, то путь назначения должен быть в этой последовательности последним.
Тип значения: RailwayTrack[]
Локальная переменная: T train – состав
Маршрут не должен содержать [динамический]
[Виден, если в параметре Маршрут выбрана опция Вычисляется автоматически от текущего пути до пути назначения] Список путей (он может содержать как несколько, так и только один путь), которые не могут быть включены в автоматически составляемый маршрут движения поезда. Добавьте пути в список с помощью расположенной ниже кнопки "+". Если же вы составляете список в поле задания динамического выражения, то заключите список путей в фигурные скобки, например: {railwayTrack1, railwayTrack2}
Тип значения: RailwayTrack[]
Локальная переменная: T train – состав
Цель движения [динамический]
Задает цель, до которой будет двигаться поезд:
Не задана – поезд будет просто двигаться до тех пор, пока он либо не покинет ж/д узел, либо не столкнется с другим поездом. Если также выбрана опция Маршрут: Не задан (поезд будет следовать согласно стрелкам), то при окончании движения (когда поезд покинет ж/д узел), этот поезд будет удален из системы.
Заданная точка пути – поезд закончит движение на определенной точке заданного пути, заданной элементом Точка ж/д пути.
Заданное смещение на пути – поезд закончит движение, проехав определенное расстояние по пути.
Получить значение: targetType
Задать значение: set_targetType()
Значение по умолчанию: Не задана
Допустимые значения: TrainMoveTo.TARGET_NOT_SPECIFIED, TrainMoveTo.TARGET_AT_TRACK_AND_LINE, TrainMoveTo.TARGET_AT_TRACK_OFFSET
Точка ж/д пути [динамический]
[Параметр виден, если Цель движения: Заданная точка пути] Элементом разметки Точка ж/д пути, задающий место остановки. Элемент должен пересекать путь назначения.
Тип значения: PositionOnTrack
Локальная переменная: T train – состав
Путь [динамический]
[Виден, если в параметре Цель движения выбрана опция Заданное смещение на пути] Путь назначения, на котором поезд должен будет остановиться.
Тип значения: RailwayTrack
Локальная переменная: T train – состав
Смещение [динамический]
[Виден, если в параметре Цель движения выбрана опция Заданное смещение на пути] Выберите, как отсчитывать смещение: от конца пути или от начала пути.
Тип значаения: boolean
Значение по умолчанию: false (от конца пути)
Локальная переменная: T train – состав
Смещение на пути [динамический]
[Виден, если в параметре Цель движения выбрана опция Заданное смещение на пути] Точка назначения на пути назначения, задаваемая как смещение (расстояние) на пути назначения.
Тип значения: double
Локальные переменные: T train – состав
double tracklength – полная длина пути назначения
Значение по умолчанию: tracklength - длина пути в заданных для данного параметра единицах длины
Проверять свободное место на пути назначения
[Виден, если в параметре Маршрут не выбрана опция Не задан (поезд будет следовать согласно стрелкам), а в параметре Цель движения не выбрана опция Не задана] Если опция выбрана (значение равно true), то поезд будет проверять, не находятся ли другие вагоны на пути назначения, чтобы в случае необходимости изменить точку назначения так, чтобы поезд остановился точно перед первым вагоном на своем пути. Это полезно в том случае, когда поезд планируется сцепить с другим поездом. Проверка осуществляется только для пути назначения и только в момент поступления поезда в объект TrainMoveTo, так что если во время движения поезда ситуация на пути назначения изменится, то это не будет обнаружено.
Синтаксис: boolean checkFreeSpaceOnTargetTrack
Значение по умолчанию: false
Ограничить расстояние перемещения
[Виден, если в параметре Маршрут не выбрана опция Не задан (поезд будет следовать согласно стрелкам)] Если опция выбрана (значение равно true), то поезд будет перемещаться не далее, чем на заданное с помощью расположенных ниже параметров, расстояние.
Синтаксис: boolean limitDistance
Значение по умолчанию: false
Расстояние
[Виден, если выбрана опция Ограничить расстояние перемещения] Здесь вы можете выбрать, хотите ли вы ограничить движение поезда заданным максимальным расстоянием перемещения (опция Пройденное поездом), или расстоянием, которое должен будет проехать поезд от заданной стрелки (опция От стрелки до хвоста поезда).
Получить значение: distanceIs
Задать значение: set_distanceIs()
Возможные значения: TrainMoveTo.DISTANCE_IS_TRAVELED_BY_TRAIN - Пройденное поездом,
TrainMoveTo.DISTANCE_IS_FROM_SWITCH_TO_TRAIN_TAIL - От стрелки до хвоста поезда
Значение по умолчанию: Пройденное поездом
Максимальное расстояние [динамический]
[Виден, если выбрана опция Ограничить расстояние перемещения] Здесь вы можете задать максимальное расстояние перемещения поезда (которое поезд проедет либо от текущего места, либо от заданной стрелки - в зависимости от того, какая опция выбрана в параметре Расстояние).
Тип значения: double
Значение по умолчанию: +infinity
Стрелка [динамический]
[Виден, если выбрана опция Ограничить расстояние перемещения и в параметре Расстояние выбрана опция От стрелки до хвоста поезда] Здесь вы можете указать имя фигуры, задающей стрелку, от которой будет начинаться отсчет максимального расстояния, которое может проехать поезд.
Тип значения: RailwaySwitch
Локальная переменная: T train – состав
Крейсерская скорость [динамический]
Здесь при необходимости можно задать новое значение крейсерской скорости (она будет применена, начиная с этого объекта). Если здесь задано значение 0, то текущее значение крейсерской скорости изменено не будет.
Тип значения: double
Локальная переменная: T train – состав
Значение по умолчанию: 0
При начале движения
Этот параметр определяет, что поезд должен делать при начале движения:
Продолжать движение с текущей скоростью – поезд должен просто продолжать движение с текущей скоростью (оставшейся после выполнения операций предшествовавших в диаграмме объектов TrainMoveTo, TrainSource, или заданной вызовом метода setSpeed()).
Ускорять/тормозить до крейсерской скорости – поезд должен ускориться или затормозить до достижения крейсерской скорости cruiseSpeed.
Ускорять, если выполняется условие – то же, что и выше, но только в том случае, если выполняется (равно true) заданное условие.
Получить значение: startOptions
Задать значение: set_startOptions()
Значение по умолчанию: Продолжать движение с текущей скоростью
Допустимые значения: TrainMoveTo.ACCELERATE_NO, TrainMoveTo.ACCELERATE_YES, TrainMoveTo.ACCELERATE_CONDITION
Ускорять, если [динамический]
[Виден, если в параметре При начале движения выбрана опция Ускорять, если выполняется условие] Условие, которое вычисляется в момент поступления состава в этот объект. В зависимости от результата вычисления условия, будет принято решение, нужно ли применять ускорение/торможение состава до его крейсерской скорости.
Тип значения: boolean
Локальная переменная: T train – состав
Значение по умолчанию: false
При окончании движения
[Виден, если для опции Цель движения не выбрано Не задана]
Этот параметр определяет, что поезд должен делать при окончании движения:
Остановиться с текущей скоростью – поезд должен просто остановиться, вне зависимости от того, с какой скоростью он ехал.
Затормозить и остановиться – поезд должен попытаться затормозить перед остановкой. Это может быть невозможно в силу длины маршрута, текущей скорости и значения торможения.
Тормозить, если выполняется условие – то же, что и выше, но только в том случае, если выполняется (равно true) заданное условие.
Получить значение: finishOptions
Задать значение: set_finishOptions()
Значение по умолчанию: Остановиться с текущей скоростью
Допустимые значения: TrainMoveTo.ACCELERATE_NO, TrainMoveTo.ACCELERATE_YES, TrainMoveTo.ACCELERATE_CONDITION
Тормозить, если [динамический]
[Виден, если в параметре При окончании движения выбрана опция Тормозить, если выполняется условие] Условие, которое будет выполняться в момент поступления состава в объект, чтобы определить, нужно ли при окончании движения состава тормозить его до достижения нулевой скорости.
Тип значения: boolean
Локальная переменная: T train – состав
Значение по умолчанию: false
Действия
При входе [код]
Здесь вы можете задать код, который будет выполняться в момент поступления состава в этот объект.
Локальная переменная: T train – состав
При подъезде к стрелке [код]
Здесь вы можете задать код, который будет выполняться при подъезде состава к стрелке. Здесь вы все еще можете изменить состояние стрелки, но обратите внимание, что если маршрут следования состава задан, то состав переключает стрелки автоматически.
Локальные переменные: T train – состав
RailwayTrack track – путь перед стрелкой
RailwaySwitch sw – стрелка
При въезде на путь [код]
Здесь вы можете задать код, который будет выполняться в момент въезда состава на путь.
Локальные переменные: T train – состав
RailwayTrack track – новый путь
RailwaySwitch sw – стрелка перед путем
При выезде с пути [код]
Здесь вы можете задать код, который будет выполняться в тот момент, когда состав покинет путь, то есть, когда с пути съедет вагон хвоста состава.
Локальные переменные: T train – состав
RailwayTrack track – путь, с которого съезжает состав
RailwaySwitch sw – стрелка перед путем
При выезде с ж/д узла [код]
Здесь вы можете задать код, который будет выполняться в тот момент, когда поезд покинет ж/д узел.
Локальные переменные: T train – состав
RailwayTrack track – (незамкнутый) путь, по которому состав покинул ж/д узелCode executed when the train exits the rail yard.
При выходе [код]
Здесь вы можете задать код, который будет выполняться, когда состав покинет объект через порт out, что будет означать, что состав достиг цели назначения или покинул ж/д узел.
Локальная переменная: T train – состав
При выходе в результате столкновения [код]
Здесь вы можете задать код, который будет выполняться, когда состав покинет объект через порт outHit, столкнувшись с другим составом.
Локальная переменная: T train – состав
При извлечении [код]
Здесь вы можете задать код, который будет выполняться, когда поезд будет умышленно извлечен пользователем из блока посредством вызова функции этого поезда remove(). Этот код будет автоматически выполнен сразу после вызова этой функции.
Локальная переменная: T train – поезд

Функции

int size() - Возвращает количество составов, перемещаемых в текущий момент времени этим объектом.

T getTrain( int index ) - Возвращает состав, перемещаемый этим объектом в текущий момент, и имеющий в списке перемещаемых составов индекс index

Порты

in

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

out

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

outHit

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