Общий принцип расчета поездных и маневровых маршрутов.

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

Расчет маршрутов от светофора выполняется с помощью скриптовой функции, которая ищет заданный путевой объект (следующий светофор) по всем имеющимся путям и стрелкам. Смысл следующий – поиск идет по выставленным положениям стрелок до нахождения светофора или обрыва пути, затем возвращается к последней стрелке и от нее идет в другом направлении. Расчет поездных маршрутов продолжается до тех пор, пока не будут найдены все возможные варианты.

Оптимизация работы поиска.Для того чтобы уменьшить количество дублирующих маршрутов, снизить время расчета и исключить ошибки, ранее применялись стандартные зеленые триггеры с именем stop*.

Теперь предусмотрено два отдельных, автоматически именуемых стоп-маркера. Маркер stop zxPath предотвращает поиск поездных маршрутов через путь, на котором установлен, в обоих направлениях, а маркер dirstop zxPath - только в том направлении, в котором установлен маркер. На расчет маневровых маршрутов стоп-маркеры не влияют.

Следует расставить стоп-маркеры таким образом, чтобы 1) запретить расчет маршрутов через пути, где не предусмотрено поездное движение, 2) по возможности ограничить кол-во дублирующих маршрутов, запретив расчет через некоторые съезды.

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

Если расчет завершился успешно, это еще не значит, что всё отлично. Просмотрите, какие маршруты нашлись от каждого светофора станции. Обратите внимание на следующие странности:

· Нахождение от входного светофора данной станции входного следующей станции. Скорее всего поиск сумел обойти выходные светофоры «окольными путями». Нужно поставить там стоп-маркер.

· Один из светофоров пропускается поиском, при этом от него самого маршруты не рассчитываются. Вероятно, светофор случайно привязался не к сплайну пути, а к сплайну контактной сети/травы. Нужно переместить его на путь.

· Нахождение четного светофора от нечетного и наоборот. Либо неправильно проименован светофор, либо поиск поменял направление из-за ошибочной стрелки. Нужно найти эту стрелку и поправить левер.

· слишком много дублирующих маршрутов (вероятно, стоит поставить стоп-маркеры на некоторых съездах)

После устранения недочета переинициализируйте стрелки и повторно рассчитайте маршруты. Если всё норм, переходите к удалению дублирующих маршрутов.

Устранение скриптовых ошибок при расчете маршрутов.Если расчет не завершился (проценты зависли и выпал «жук»), это говорит об ошибке скрипта поиска. В каких случаях возникает такая ошибка:

· не выполнен перерасчет стрелок после добавления/удаления/перемещения стрелок и путевых объектов;

· не выполнен перерасчет светофоров - в тех случаях, когда он необходим;

· найдено более 100 возможных маршрутов от светофора (ограничить поиск стоп-маркерами);

· стрелка не имеет левера и/или найден нерабочий левер (устранить);

· обнаружен невидимый разрыв пути (найти и пересобрать кусок пути);

· обнаружена стрелка на перегоне (убрать/ограничить станционными светофорами);

В первую очередь нужно рассчитать маршруты от каждого светофора в отдельности, чтобы определить, при расчете от каких светофоров появляется жук. Это поможет примерно определить, где находится ошибка, чтобы найти и устранить её.

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

Допустим, ошибка возникает при расчете от четного входного и от нескольких нечетных выходных, т.е. проблема находится в горловине. Устанавливаем стоп-маркер, чтоб отсечь направление, ведущее к этим выходным – ошибка от входного пропадает. Перемещаем маркер за следующую стрелку/точку сплайна до тех пор, пока ошибка не появится. Проверяем кусок пути перед маркером, и если ничего не удается обнаружить, пересобираем этот кусок пути. Вуаля, разрыв пути побежден.

Другая ситуация: ошибка возникает при расчете от обоих входных, а от выходных ошибок нет. Делаем вывод, что проблема на одном из станционных путей. Чтобы определить, на каком именно, по очереди ставим стоп-маркер на каждый путь. Когда проблемный путь найден, начинаем понемногу двигать один из выходных (к примеру, нечетный) в сторону нечетного входного. В определенный момент ошибка от нечетного входного исчезнет и появится от нечетного выходного. Значит, она на том участке, за который мы только что отодвинули нечетный выходной.

Удаление дублирующих маршрутов.Для быстрого удаления вариантных маршрутов используется функция автоудаления. Она сравнивает найденные вариантные маршруты по длине и количеству стрелок и оставляет наиболее короткий маршрут (а при равной длине маршрут с меньшим количеством стрелок). Нужно учитывать следующее:

· Возможна погрешность в расчете длины маршрута, кроме того не всегда самый короткий маршрут – самый оптимальный. Иногда необходимо вручную оставить нужный маршрут, посмотрев, через какие стрелки он проходит.

· В процессе сравнения длины функция автоудаления переключает стрелки. После окончания операции все леверы возвращаются в исходное положение, проводить для этого расчет стрелок больше не требуется.

Обычно следует всегда удалять дублирующие маршруты. Если по каким-то причинам нужно оставить дублирующий маршрут, можно назначить ему другой приоритет, либо отметить его как неиспользуемый (приоритет -1).

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

· 0 приориет традиционно имеют маршруты на главный путь (на правильный путь перегона)

· команды и правила строят маршрут наименьшего приоритета из заданного диапазона (за исключением опции «на приём»)

· при наличии двух маршрутов от светофора с одинаковым приоритетом может быть построен любой из них – одинаковые приоритеты допустимы лишь для равнозначных путей приёма.

«Дежурная» расстановка приоритетов может быть следующей: 1,2 - маршруты пассажирских поездов/МВПС; 3,4 - маршруты на пути с возможностью безостановочного пропуска; 5,6 - маршруты на приёмно-отправочные пути. Рассчитанным, но неиспользуемым маршрутам задается приориет -1. Обратите внимание, что приоритет маршрута – это не приоритет пути. Маршруты на один и тот же путь могут иметь разные приоритеты.

Наши рекомендации