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 routeType
Значение по умолчанию: Не задан (поезд будет следовать согласно стрелкам)
Допустимые значения: TrainMoveTo.ROUTE_NOT_SPECIFIED, TrainMoveTo.ROUTE_LIST_OF_TRACKS, TrainMoveTo.ROUTE_AUTO
Маршрут { track1, track2, …} [динамический]
[Виден, если в параметре Маршрут выбрана опция Задан как список путей] Последовательность путей. Путь, на котором находится головной вагон поезда, должен быть первым путем в этой последовательности. За ним в правильном порядке должны следовать все другие пути, по которым должен будет проехать поезд. Если цель движения задана, то путь назначения должен быть в этой последовательности последним.
Тип значения: RailwayTrack[]
Локальная переменная: T train – состав
Если путь занят, поезд
[Виден, если в параметре Маршрут выбрана опция Вычисляется автоматически от текущего пути до пути назначения] Здесь вы можете задать поведение поезда в том случае, если один из путей, входящих в его текущий маршрут, становится недоступным (блокируется или резервируется для других поездов). Поезд либо Останавливается у занятого пути, т.е. останавливается на стрелке, соединенной с этим путем, либо Пересчитывает маршрут.
Синтаксис: BlockedTrackHandling BlockedTrackHandling
Допустимые значения: TrainMoveTo.STOP_AT_SWITCH, TrainMoveTo.RECALCULATE_ROUTE
Маршрут не должен содержать [динамический]
[Виден, если в параметре Маршрут выбрана опция Вычисляется автоматически от текущего пути до пути назначения] Список путей (он может содержать как несколько, так и только один путь), которые не могут быть включены в автоматически составляемый маршрут движения поезда. Добавьте пути в список с помощью расположенной ниже кнопки "+". Если же вы составляете список в поле задания динамического выражения, то заключите список путей в фигурные скобки, например: {railwayTrack1, railwayTrack2}
Тип значения: RailwayTrack[]
Локальная переменная: T train – состав
Цель движения
Задает цель, до которой будет двигаться поезд:
Не задана – поезд будет просто двигаться до тех пор, пока он либо не покинет ж/д узел, либо не столкнется с другим поездом. Если также выбрана опция Маршрут: Не задан (поезд будет следовать согласно стрелкам), то при окончании движения (когда поезд покинет ж/д узел), этот поезд будет удален из системы.
Заданная точка пути – поезд закончит движение на определенной точке заданного пути, заданной элементом Точка ж/д пути.
Заданное смещение на пути – поезд закончит движение, проехав определенное расстояние по пути.
Получить значение: 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
Возможные значения: 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
Значение по умолчанию: Продолжать движение с текущей скоростью
Допустимые значения: TrainMoveTo.ACCELERATE_NO, TrainMoveTo.ACCELERATE_YES, TrainMoveTo.ACCELERATE_CONDITION
Ускорять, если [динамический]
[Виден, если в параметре При начале движения выбрана опция Ускорять, если выполняется условие] Условие, которое вычисляется в момент поступления состава в этот объект. В зависимости от результата вычисления условия, будет принято решение, нужно ли применять ускорение/торможение состава до его крейсерской скорости.
Тип значения: boolean
Локальная переменная: T train – состав
Значение по умолчанию: false
При окончании движения
[Не виден, если Маршрут: не задан (поезд будет следовать согласно стрелкам) и Цель движения: любая или Маршрут: любой и Цель движения: Не задана]
Этот параметр определяет, что поезд должен делать при окончании движения:
Остановиться с текущей скоростью – поезд должен просто остановиться, вне зависимости от того, с какой скоростью он ехал.
Затормозить и остановиться – поезд должен попытаться затормозить перед остановкой. Это может быть невозможно в силу длины маршрута, текущей скорости и значения торможения.
Тормозить, если выполняется условие – то же, что и выше, но только в том случае, если выполняется (равно true) заданное условие.
Если значение этого параметра не задано, скорость поезда не изменится.
Получить значение: 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 – (незамкнутый) путь, по которому состав покинул ж/д узел.
При выходе [код]
Здесь вы можете задать код, который будет выполняться, когда состав покинет блок через порт out, что будет означать, что состав достиг цели назначения или покинул ж/д узел.
Локальная переменная: T train – состав
При выходе в результате столкновения [код]
Здесь вы можете задать код, который будет выполняться, когда состав покинет блок через порт outHit, столкнувшись с другим составом.
Локальная переменная: T train – состав
При извлечении [код]
Здесь вы можете задать код, который будет выполняться, когда поезд будет умышленно извлечен пользователем из блока посредством вызова функции этого поезда remove(). Этот код будет автоматически выполнен сразу после вызова этой функции.
Локальная переменная: T train – поезд

Функции

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

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

Порты

in

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

out

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

outHit

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