Donate with PayPal button New New

+ Ответить в теме
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 17

Тема: Организация автоматического диспетчера на однопутке

  1. #1
    Разработчик Аватар для B.U.G.O.R.
    Регистрация
    07.02.2010
    Адрес
    Montenegro
    Возраст
    30
    Сообщений
    8,379

    По умолчанию Организация автоматического диспетчера на однопутке

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

    Небольшое FAQ:
    Открыть

    1. Расстановка маркеров и триггеров
    В самую первую очередь нам необходимо иметь полностью настроенную сигнализацию sU и маршрутизацию zxPath, как это будет работать с другими не знаю, но скорей всего не будет никак. На этом я останавливаться не буду, не тут это надо объяснять, будем считать, что подобное есть, кроме одной вещи. По моим условиям, надо задавать приоритет в светофорах определенным образом. В принципе, въехавшие, потом могут настраивать приоритет, как угодно, но не все такие, поэтому расскажу, как он должен быть тут. Приоритет 0 должен быть по главному всегда. Приоритет 1 должен быть на тех путях, куда принимаются только пассажирские поезда, такие пути есть. Ну, а все остальные приоритеты, начиная с 2, ставятся путям, на которые будет вестись прием грузовиков. При чем, чем выше приоритет, тем маршрутизация меньше стремится принять туда поезд. Тогда, нам надо расставить триггеры и маркеры. Ставятся они так:

    Стрелочками сверху указаны направления маркеров с триггерами, т.е. они должны смотреть внутрь перегона всегда. Будьте осторожны с триггером, у него нет явной направленности, можно либо ставить рядом маркером, и судить по нему, разворачивать ли триггер, либо по текстуре (там есть одна такая неприметная полосочка, по которой смотрю я). Обзывать их можно как угодно, но я предпочитаю писать сначала код станции (у меня-то реальная карта, и коды реальные), потом приписывать либо CH, либо N. А, чтобы отличать название триггера от маркера, в маркере ставлю пробел между ними и приписываю (entrance), а в триггере все без пробелов и без кода. Обратите внимание на то, к каким станциям относятся какие триггеры! Конечно, это повлияет лишь на удобство восприятия и настройки в будущем, но все же. Особо расписывать здесь нечего, движемся далее.

    2. Запуск пассажирских поездов.
    Это довольно ответственный этап. Потому что от этого зависит счетчик пассажирских на перегонах. Значит, есть интересная особенность. Я не нашел правила, которое бы активировало дочернее от проезда по триггеру определенного приоритета, но нашел правило, которое делает это по машинисту, поэтому решил считать пассы по определенным машинистам. Поэтому, определитесь с этим, какие машинисты у нас будут возить пассажирские поезда и все те, которые надо пропускать первее. На оставшиеся поезда можно в разнобой ставить машинистов, но только не выбранных ранее. Пусть, допустим, у нас будут машинисты пассов машинисты Adair.
    Ставим в необходимом месте пассажирский поезд, сажаем в него Adair'a, и задаем ему команды движения по участку. Какие — дело ваше. Я обычно набираю из такой группы:

    АВТОМАШИНИСТ (проехать через определенный станционный маркер) —> Задать скорость

    И подобную группу задаю по кол-ву станций. Где надо остановить, конечно, даю не проехать через, а двигаться к. В-общем, это ни на что не влияет, делаем любым удобным способом. Только старайтесь не дефолтом, потому что он трогает маршруты, а нам это не нужно. Теперь, заходим в правила сессии и начинаем собирать маршруты пассажирским поездам. Для начала, нарисую схематично, как он собирает их. Т.к. пассажирские должны проходить в большинстве случаев по строго определенному пути (главному, скажем), то так и будем делать. Собираться маршрут будет по проезду его одного из тех триггеров, которые мы уже расставили. Как раз собираться маршрут по той станции, к какой он и принадлежит. Теперь, предположим, поезд проследовал триггер станции, смотрим, сколько он открыл себе впереди:


    Т.е. по проезду триггера нВ, мы открываем маршрут по станции В на вход и выход. Соответственно, по проезду триггера нБ, мы откроем на вход и выход станции Б. И так далее.

    Давайте, рассмотрим, как это сделать в правилах. Создаем правило Trigger Check. Заходим в его настройки.

    Видим сверху три галочки, потом добавление триггера, а внизу два выбора. Из трех галок, в обязательном порядке должна стоять третья, а первые две по желанию. Теперь, добавляем триггер, допустим, тот же нВ. В самом низу ставим точечку на такой текст: "Accept trains matching specific criteria", это значит, что дочернее правило должно срабатывать только для определенных поездов, а не всех сразу, а нам так и надо. Теперь, мы видим три варианта добавления условия. Сверху условию по конкретному поезду, в середине по типу ПЕ (т.е. все ТЭП70-0500, которые есть на карте, а не определенный ТЭП70-0500), а в конце по машинистов. Я здесь всегда ставлю на конкретный поезд, потому что разные пассы могут по-разному проходить по станции. Но можно и поставить машиниста Adair, если все абсолютно пассы идут по главному. Можно назначить несколько условий, поэтому в будущем не надо городить отдельную задачу маршрута каждому поезду, просто добавляем в список условий очередной поезд. А если так, то для удобства поиска нужных маршрутов, переименовываем название правила в такое, как мы бы поняли потом. Итак, настроили, жмем галку. Теперь, добавляем следующее правило. Называется оно zxPath AddPath. Ставим его ниже и чуть правее, чем TriggerCheck, чтобы оно стало дочерним. Заходим в настройки. Там мы видим наши станции, где ищем станцию В, а у нее светофор Н. Ставим сверху точечку напротив надписи "Очередь", а потом справа от светофора Н жмем по светофору Н1. После чего открываем таким же образом светофор Н1 и жмем на Н@Б. Т.е. входной станции Б. Я привел просто пример, у вас, возможно, будут несколько другие светофоры, но суть такая, что надо открыть на вход по главному, а потом на выход с главного. Думаю, поймете, это не сложно. Жмем галку, и делаем аналогично для всех станций всех направлений. Теперь, можно спокойно пускать пассажирские, они будут ездить.

    Но тут есть одно НО. Т.к. я сторонник организации движения по реальному графику, а там разъезды между двумя и более пассами предусмотрены графиково, то я так же сделал и тут. Где-то какой-то пасс надо графиково ставить набок, чтобы он разъехался с другим. Это организовывайте сами (кстати, то, как я описал — еще и издержка реальности).
    Все, пассы ходят.

    3. Создаем счетчики кол-ва пассажирских поездов на перегонах.
    Для того, чтобы грузовики ставились на боковой, они должны знать ситуацию позади себя и впереди себя. Забегая вперед, скажу, что грузовой, который движется по перегону Б — В, знает ситуацию по пассажирским поездам на всем том отрезке участка, который представлен на схеме. Т.е. он знает кол-во четных поездов на перегоне А — Б и кол-во нечетных поездов на перегонах Д — Г и Г — В. И в зависимости от этих данных, он либо едет прямо, либо ставится на боковой. Достигается это переменными. Каждый перегон имеет по две переменных (четную и нечетную), которые я обзываю абсолютно так же, как и триггеры. А принцип работы счетчика заключается в след.: машинист Adair (т.е. самый настоящий пассажирский поезд под любым локомотивом), который проехал триггер нВ добавил единицу к переменной нВ. Он же, когда проехал триггер нБ отнял ту же единицу от той же переменной нВ. Т.о. получается, что это счетчик кол-ва поездов не совсем на перегоне, но еще и на станции, но для удобства назовем его счетчик конкретно перегона. Как нам это сделать?
    Идем в настройки сессии, создаем там правило VariableSetup и заходим в его настройки:

    Видим кнопку Add. Жмем ее, вводим название переменной. Повторюсь, что весьма удобно называть переменные так же, как и триггеры. Но это не обязательно. Создали. Теперь, в пункт Value пишем 1, а в след. два надо поставить минимум и максимум. В минимум ставим 0 само собой, не может же у нас быть -1 поезд на перегоне, а в максимум можно ставить сколько угодно, я обычно ставлю 10. Сомневаюсь, что где-то может быть более 9 поездов на однопутном перегоне одновременно. Первичное значение ставим единицей, а не нулем, потому что ТРС не хочет работать с нулем почему-то. По крайней мере, у меня не получалось. Мы просто смещаем систему счета на одну вправо (поэтому я и написал о девяти поездах на перегоне, хотя предел выставлен десятью). В описании можно добавить свой текст, чтобы понимать. Я обычно пишу. Все, создали все переменные. Закрываем. Теперь создаем правило InputTable. Заходим в настройки:

    Видим здесь кучу непонятной фигни. Сейчас все разъясним. Собственно, это необходимо для созданий команд ожидания, когда кол-во пассажирских поездов на перегоне будет равно нулю, ну т.е. единице в нашей ситуации. Довольно просто, несмотря на непонятки. Жмем add, в появившемся окне пишем следующее:
    svar,[название переменной],eq,1
    И таких штук нужно создать так же ровно столько же, сколько мы имеем переменных. Текст значит примерно следующее:
    Variable [такая-то переменная] эквивалента (ну, т.е. равна) единице.
    Создали по аналогу всем переменным, жмем ок. Да, кстати, не забывайте сохраняться, а то потеряете все.
    Теперь, сам счетчик. Рассмотрим а примере одной переменной, далее по аналогии сделаете для всех перегонов всех направлений.
    Перво наперво, посмотрим, какие триггеры как работают с переменными и какими. Обратите внимание, что центральные триггеры работают с двумя переменными.


    В-общем, все довольно просто, теперь лезем в те же настройки сессии. Создаем все тот же TriggerCheck, настраиваем по аналогии с тем, только в условиях определения ПЕ указываем нашего машиниста Adair. Кстати, если в тех триггерах настройка шла по машинистам, то можно спокойно объединить эти условия. На предыдущий текст не обращайте внимания, если вы и без того нифига не понимаете.
    Создали, допустим по триггеру чВ. Значит, нам надо прибавить единицу к переменной чВ и отнять единицу от переменной чБ. Создаем дочернее правило Variable Modify, лезем в настройки:

    Первая кнопка означает действие с переменное, вторая количественный показатель, а третья саму переменную. Нижние две галки вполне ясны, но нам они не нужны, пожалуй.
    Значит, ставим Add 1 и указываем нашу переменную. Кстати, имейте в виду, что скрины и текст в плане переменных разнятся, но у меня нет цели на скринах описывать конкретный пример. Плохо то, что переменную надо писать вручную, а не выбирать из списка, но другого способа я не знаю. Пишем туда переменную чВ. Все, отправляем это правило в дочернее к триггерчеку. Теперь, создаем там же еще один Variable Modify. Только там уже указываем Subtract 1, и от переменной чБ.. И т.о. смотрим на схему взаимодействия переменных и триггеров, и клепаем аналогичным образом все переменные. В принципе, этот этам завершен.

    4. Даем команды грузовым поездам.
    Ну вот и последний этап. Надо отметить сразу, что есть некоторый смысл отправить общую команду в Schedule Library, чтобы всем грузовикам потом лишь только добавлять одну команду "Копировать команды из этой библиотеки" и все. Но, даже, если вы этого не будете делать, правило Schedule Library нам понадобится. Для начала, обратите внимание на блок-схему команд машинисту грузового поезда. Кстати, вот именно тут нам наконец-то понадобятся маркеры. Посмотрим, блок-схему грузового поезда, который выезжает со станции Б и подъезжает к маркеру чВ:

    Теперь, давайте разберем ее понятным языком, а затем зададим это все языком, понятным ТРСу.
    Сначала, надо понять, каким образом осуществляется сама команда движения. Поезд не едет от конечной станции до конечной. Он проезжает через маркеры своей четности/нечетности, которые принадлежат станциям. И решение о маршруте, он отправляет на ходу. Что, конечно, несколько не в плюс, потому что пока он решает, он начинает немного оттормаживаться, но если не знать, то особо и не заморачиваешься по этому поводу. Главное, что вся эта схема проходит моментально.
    Так вот, открываем нашу карту и эту схему, и следим по тексту.

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

    Едет поезд через маркер чВ. Проверяет наличие поездов на перегоне А — Б. Т.е. проверяет переменную чБ. Поездов нет, она равна единице, он проверяет наличие поездов впереди себя. Внимание, проверка идет не след. перегона, а перегона через станцию, потому что боковой-то мы будем занимать в случае чего, след. станции. Но до нее нам целый перегон ехать, а пока мы доедем, возможно, что и тот поезд доедет до станции В. Поэтому проверяем аж там. Так вот, проверяем переменную нГ. Видите, мы уже проверяем нечетную переменную, т.е. встречную. Так вот, она равна единице, потому что нет поездов, стало быть условие не выполняется, значит собираем маршрут приоритетом от 2 и выше или главного. Ну, а далее движем его через маркер следующей станции. Обратите внимание, что собираем мы все равно через приоритет 2. Это делается для того, чтобы грузовые расходились между собой, ведь счетчик не учитывает их, плюч, на случай, если есть какой-то поезд на перегоне Г — В.

    Второй вариант, когда пассажирский поезд идет сзади.

    Начинается все так же, движемся через маркер, проверяем условие наличия поезда на предыдущем перегоне. И тут бах! а там есть поезд. Тогда условие выполняется, т.е. переменная чБ выше единицы, значит собираем маршрут приоритетом только выше двух, и движемся к красному светофору. Т.к. маршрут собирается на боковой и только на вход, то мы доезжаем до выходного и останавливаемся. Теперь надо ждать, пока проедет тот поезд. Казалось бы, надо просто зарезервировать маршрут в очереди, и делов-то. А вот нельзя, а если за этим пассом сразу какой-то начальник едет, которого тоже Adair везет? Надо и его пропустить, а наш маршрут может немного опередить его маршрут. Поэтому надо ждать, когда не там просто не будет поездов. Но ведь тогда мы следили за перегоном А — Б, но сейчас это слишком далеко, иначе мы никогда не уедем, поэтому следим только за перегоном Б — В. Поэтому ждем, пока переменная чВ будет равна единице. А потом собираем маршрут на выход и едем через следующий маркер.

    Третий вариант, когда пассажирский поезд идет впереди.

    Теперь по накатанной быстренько рассмотрим третий вариант, и скорей это все делать в ТРС. Итак, все по-прежнему, проезжаем маркер, проверяем поезд сзади, все чисто, условие не выполняется, проверяем поезда спереди. Ага, вот он где, оказывается, переменная нГ больше единицы, значит там поезд. Понятно все, условия выполняется, собираем маршрут приоритетом только два и выше, без главного, и едем к красному. Становимся. А вот сейчас стоит немного подумать, почему мы не проверяем наличие поезда на перегоне Г — В, а только аж на Д — Г. А тут сыграют маршруты самих пассажирских. Ведь, если на том перегоне есть какой-то поезд, то он уже наверняка собрал себе маршрут на вход, и даже поставил в очередь маршрут на выход. Причем, не важно, пассажирский там, или грузовой. Так вот, встали на боковой. Теперь, надо также ждать освобождение перегона. Опять же, ждем теперь только пустоты на следующем перегоне. На малодеятельных участках, можно даже обойтись без ожидания, а сразу собирать на выход. Все равно, пока там поезд, наш маршрут не соберется. Но, я предпочитаю не рисковать, все-таки многотонная техника едет (лол). Ну все, поездов нет, открываем на выход и едем дальше.

    Теперь, давайте совать это все в ТРС.
    Так выглядит пропуск одной станции у меня:


    Ну, поехали. Будем ставить опять же наш пример. Создаем две Schedule Library. Две потому что одна пойдет в класс ДСП, а вторая в класс ТЧМ. Конечно, это условное разделение, и можно сделать одной, но так удобнее. Благо, они работают, хоть их там 100 будет.
    Заходим в первую, которая ТЧМская, назначаем всякую разную фигню, вроде прожекторов, да тифонов, а затем даем команду Ботомашиниста, чтобы он двигался через маркер чВ. Именно через. Следующей командой задаем IfEseVariable, там выбираем переменную чБ, условием которой ставим больше одного. Закрываем все это дело. Открываем вторую ДСПшную библиотеку. Можно создать группы по станциям, например. Но это сейчас не важно, это сами решайте. Создаем первый набор команд, для постановки под обгон. Там делаем такие команды: подготовить маршрут приоритета 2 и выше. После чего задаем команду движения к красному. После ищем WaitUntilSVariable, и тут-то мы видим в списке вот те переменные из Input Table! Ищем необходимую переменную чВ и задаем ее, как раз ждать, пока она станет равной единице. После любая команда открытия маршрута на выход. Я обычно ставлю определенного приоритета, т.е. нуля. Ну и я еще ставлю команду ожидания, пока на светофоре красный. Закрываем это, возвращаемся в ТЧМную библиотеку и задаем такую команду.
    Copy Commands —> Insert —> From Library —> выбираем только что созданную библиотеку.

    Закрываем, идем в ДСПшную. Копируем ту, что уже создана. Теперь, убиваем команду WaitUntilSVariable. А на ее место, ставим другую WaitUntilSVariable, а именно ту, где есть переменная нВ. А дальше все оставляем так.

    Теперь там же надо сделать проверку условия пропуска. Для этого создаем другой набор команд, куда ставим это:
    Проверяем переменную нГ на предмет больше одного, затем ставим Copy Commands, и по аналогии с верхней, ставим ту, которую мы только что создали копией. Следующей командой ставим команду сбора маршрута приоритетом выше 2, или главного. Не забудьте про главный. Ну и след. командой сбор маршрута на выход, такой же, как и в тех двух.

    Закрываем, идем в ТЧМную библиотеку, там после всего ставим команду Copy Commands, а в ней задаем тот набор, который мы создали третьим. После чего даем команду Проехать через маркер чГ.

    Теперь, по аналогии с этими наборами, создаем по всем станциям участка. Понятно, что прием на последнюю можно сделать не так, потому что все равно идем на бок. Ну и выход с первой можно тоже сделать без всяких проверок. Вот, теперь ставим на первой станции грузовой, заходим в Driver Setup. А там ему ставим лишь одну команду Copy Commands, где указываем тот набор, который был создан в ТЧМной библиотеке. И так, всем поездам. Но, обратите внимание! Так можно задавать только тем поездам, которые стоят в начале участка. Если он стоит где-то в центре, то надо просто вырезать те команды, которые рассчитаны на станции, по которым он уже не проедет никак.

    Ну и такие частные случаи, как узловые станции, где можно с двух перегонов, подходящим с одного направления считать одну переменную, или например, не отправлять поезд с первой станции, пока есть поезда, которые идут сзади где-то и тому подобное. А для бесконечной сессии рандомность можно обеспечить не случайным удалением поездов, а рандомным добавлением одного из наборов команд для разных участков. Если их больше одного, конечно. Тогда мы не знаем, куда поедет поезд из Придачи, то ли в Грязи-Волгоградские, то ли в Казинку, то ли и вовсе в Кочетовку. Но мы знаем другое, что он точно везде пройдет. И такой момент, если есть какой-то пригородный, допустим, который имеет конечную остановку посреди участка, то очевидно он не проследует триггер на уменьшение кол-ва поездов. Поэтому можно прямо в командах машиниста после остановки на станции задавать ему команду вычитания единички из необходимой переменной. Жаль, правда, что все равно, грузовой пойдет на боковой, чтобы пропустить его, а тот и сам остановится, но тут уж сами думайте, авось и есть способ избежать оного.

    Ну и да, аналогичный способ можно использовать и на двухпутке, разве что убрав условие проверки поездов впереди себя. Все, въезжайте (—:
    Последний раз редактировалось B.U.G.O.R.; 16.01.2014 в 22:59.


  2. #Trainz
    Реклама
    Регистрация
    Постоянная
    Адрес
    Весь мир
    Возраст
    2010
    Сообщений
    Много

    Donate with PayPal button N3v New New

     

  3. #2
    Почетный пользователь Аватар для Kompozitor
    Регистрация
    20.07.2010
    Страна
    Адрес
    Харьков
    Сообщений
    5,945

    По умолчанию

    Вот бы еще небольшую карту-пример, для изучения этого всего "в миниатюре".

    PS: А мысли насчет разных длин поездов есть? Или все это подразумевает, что любой поезд по длине помещается на любой станции? Например, если две станции нормальные (около 70 вагонов), а после них идет вообще двухпутная и короткая, на которой только электрички поместиться могут, или же очень короткие грузовые.

  4. #3
    Разработчик Аватар для B.U.G.O.R.
    Регистрация
    07.02.2010
    Адрес
    Montenegro
    Возраст
    30
    Сообщений
    8,379
    Автор

    По умолчанию

    Цитата Сообщение от Kompozitor Посмотреть сообщение
    А мысли насчет разных длин поездов есть?
    Разве маршрутизация это не проверяет? Но в любом случае, по поводу
    Цитата Сообщение от Kompozitor Посмотреть сообщение
    а после них идет вообще двухпутная и короткая, на которой только электрички поместиться могут, или же очень короткие грузовые.
    это считай либо же конкретно по своему участку, немного видоизменяя набор правил. Например, пропуская сквозняком длинные грузовые, будто они пассажирские, либо же играй с приоритетами. Не обязательно же всем поездам давать приоритет выше двух. Можно давать коротким поездам приоритет выше пяти, допустим, где пятый приоритет это короткие пути. А длинный между двумя и пятью, если второй приоритет длинный путь. Это довольно быстро обдумывается, и довольно легко делается.

  5. #4
    Пользователь Аватар для TRam_
    Регистрация
    22.09.2009
    Возраст
    33
    Сообщений
    16,432

    По умолчанию

    А мысли насчет разных длин поездов есть?
    ботомашинист проверяет, если в опции команды выбрана опция "на приём"

  6. Сказал спасибо:


  7. #5
    Пользователь Аватар для Ant.taranish
    Регистрация
    21.03.2011
    Страна
    Возраст
    33
    Сообщений
    582

    По умолчанию

    B.U.G.O.R., ждём сессию с реализацией этой схемы на практике) Применительно к твоей концепции (пассы строго по графику и могут управляться игроком) всё придумано хорошо. Кое-что наверно можно доработать. Например, по твоей схеме получается, что грузовой может сильно задержать встречный пасс, если, проехав чВ, он соберет себе маршруты до станции Г, а пасс в это время будет на станции Д. Решение о выпуске грузового на следующий перегон, вероятно, лучше принимать не в начале перегона, а уже на подъезде к станции. Ну и кроме того есть вероятность заторов.

  8. #6
    Разработчик Аватар для B.U.G.O.R.
    Регистрация
    07.02.2010
    Адрес
    Montenegro
    Возраст
    30
    Сообщений
    8,379
    Автор

    По умолчанию

    Цитата Сообщение от Ant.taranish Посмотреть сообщение
    ждём сессию с реализацией этой схемы на практике)
    Ну, это хз. Делать на куске Родины не охота, потому что придется то ли отрезать кусок, то ли еще хз чего, если только потом-потом, когда я так или иначе это сделаю. А отдельную карту-пример делать как-то не охота.
    Цитата Сообщение от Ant.taranish Посмотреть сообщение
    Например, по твоей схеме получается, что грузовой может сильно задержать встречный пасс, если, проехав чВ, он соберет себе маршруты до станции Г, а пасс в это время будет на станции Д.
    Неверно ты понял. Проехав чВ, он соберет себе только прием на станции В. Он ничего не задержит, я обмусоливал все варианты, в том числе, самые худшие.
    Цитата Сообщение от Ant.taranish Посмотреть сообщение
    Решение о выпуске грузового на следующий перегон, вероятно, лучше принимать не в начале перегона, а уже на подъезде к станции.
    Тоже не верно. Я ранее так и делал, но тогда у меня был полностью "ручной контроль занятости", т.е. я лично следил за всем, а тут так не проканает. Потому что есть вероятность того, что на подъезде к станции уже не останется места на станции, а его надо убрать с перегона. А уже некуда. Это однопутка, поэтому поезд, который заехал на перегон, должен 100% с него выехать. Поэтому как только поезд вступил на перегон, он сразу должен забить себе путь на выход с перегона. В идеале надо и вовсе забивать прием на след. станции, пока еще поезд не вышел с предыдущей, но это будет слишком громоздко к исполнению. Можно и реально, я даже знаю, как, но игра не стоит свеч. А этот маркер можно ставить через 2 метра от последней стрелки, как это делаю я. А триггеры я ставлю в районе входного светофора.
    Цитата Сообщение от Ant.taranish Посмотреть сообщение
    Ну и кроме того есть вероятность заторов.
    Вряд ли. Как только я у себя настрою все это дело, насую кучу пассов, я хочу потестировать различные варианты перенасыщенного графика (когда поездов на участке больше, чем перегонов) и посмотреть, когда же она все-таки треснет, или таки не треснет. Я еще не успел ее много потестировать на практике, но в теории я исключил все варианты краха. Даже этот:
    Цитата Сообщение от B.U.G.O.R. Посмотреть сообщение
    Ведь, если на том перегоне есть какой-то поезд, то он уже наверняка собрал себе маршрут на вход, и даже поставил в очередь маршрут на выход.
    Это не наверное он собрал маршрут на вход, а 100%. Потому что он собирает маршрут на вход абсолютно тогда, когда скидывает свою переменную с предыдущего перегона. Я учел эти моменты, и у меня абсолютный автоматический конроль всех перегонов. Если это все грамотно настроить, конечно.

  9. #7
    Пользователь Аватар для Ant.taranish
    Регистрация
    21.03.2011
    Страна
    Возраст
    33
    Сообщений
    582

    По умолчанию

    Цитата Сообщение от B.U.G.O.R. Посмотреть сообщение
    Проехав чВ, он соберет себе только прием на станции В.
    По твоей блок-схеме и по набору команд "проверка необходимости пропуска", получается что грузовой собирает себе маршрут на вход и сразу на выход, если он не видит поезда впереди или позади себя.
    Цитата Сообщение от B.U.G.O.R. Посмотреть сообщение
    как только поезд вступил на перегон, он сразу должен забить себе путь на выход с перегона.
    по-хорошему, он не должен на него отправляться, пока не забьет себе место на следующей станции. К тому же я говорю про маршрут на выход со следующей станции, а не на вход.
    Цитата Сообщение от B.U.G.O.R. Посмотреть сообщение
    в теории я исключил все варианты краха
    ни что не мешает поездам забить все свободные пути на станциях, если их достаточно много.
    Цитата Сообщение от B.U.G.O.R. Посмотреть сообщение
    Я учел эти моменты, и у меня абсолютный автоматический конроль всех перегонов.
    вот поэтому хотелось бы увидеть реализацию на практике

  10. #8
    Пользователь Аватар для bals1985
    Регистрация
    12.01.2014
    Страна
    Адрес
    Барнаул
    Возраст
    38
    Сообщений
    34

    По умолчанию

    потом как немножко разберётесь-приложите видио урок ко всему этому пожалуйста.

  11. Сказал спасибо:


  12. #9
    Разработчик Аватар для B.U.G.O.R.
    Регистрация
    07.02.2010
    Адрес
    Montenegro
    Возраст
    30
    Сообщений
    8,379
    Автор

    По умолчанию

    Цитата Сообщение от Ant.taranish Посмотреть сообщение
    получается что грузовой собирает себе маршрут на вход и сразу на выход, если он не видит поезда впереди или позади себя.
    Верно, а что тут плохого-то? Смотри, если на ближайшем перегоне оказался пассажирский, то действует это:
    Цитата Сообщение от B.U.G.O.R. Посмотреть сообщение
    Это не наверное он собрал маршрут на вход, а 100%. Потому что он собирает маршрут на вход абсолютно тогда, когда скидывает свою переменную с предыдущего перегона. Я учел эти моменты, и у меня абсолютный автоматический конроль всех перегонов. Если это все грамотно настроить, конечно.
    Т.е. до тех пор, пока пасс не проехал триггер, он еще висит в переменной, т.е. грузовой воспримит его, как помеху и встанет на боковой. Если он проследовал этот триггер, и он отнялся с переменной, то тогда он по этому же самому триггеру УЖЕ собрал себе маршрут на вход\выход след. станции. А т.к. там мы едем, то пассу соберется только на вход, а выход встанет в очередь. Но он соберет на вход. В то же время, я целенаправленно сделал при невыполнении условий команду сбора приоритета все равно выше двух (но при этом и главного) на подобные ситуации. Т.е. он поймет, что главный занят, значит будет искать маршрут приоритетом выше двух. И все равно поедет на боковой, пока проедет пасс. А то, что он сразу себе будет собирать на выход — не беда, поставит его в очередь, и пусть себе ждет, пока все освободится. А если там не пассажирский, а грузовой, то ситуация аналогична: какой-то из этих двух груховых успеет занять себе главный, на который просто примется, а второй соберет на боковой. А т.к. они сразу забивают на выход, то как только они сами же и разъедутся, тут же и поедут, если там впереди опять же ничего не вступило, которое займет просто постанвокой своего маршрут в очередь.
    Цитата Сообщение от Ant.taranish Посмотреть сообщение
    по-хорошему, он не должен на него отправляться, пока не забьет себе место на следующей станции.
    Цитата Сообщение от B.U.G.O.R. Посмотреть сообщение
    В идеале надо и вовсе забивать прием на след. станции, пока еще поезд не вышел с предыдущей, но это будет слишком громоздко к исполнению.
    Можно ставить по маркеру на уровне выходного со станции на всех путях. Но сами понимаете, что это будет очень громоздко. Да и не стоит оно того.
    Цитата Сообщение от Ant.taranish Посмотреть сообщение
    ни что не мешает поездам забить все свободные пути на станциях, если их достаточно много.
    Вот на этот предмет я и хочу потестировать перенасыщенность графика. А ваще, чтобы все 100% работало, достаточно отправлять столько поездов, сколько перегонов, а еще лучше на 2-3 меньше.
    Цитата Сообщение от Ant.taranish Посмотреть сообщение
    вот поэтому хотелось бы увидеть реализацию на практике
    Ну, у меня они ездили от Касторной до Воронежа, но у меня там был опытный образец, который был оформлен весьма некрасиво. Я на днях сделаю полностью рабочего ДСП на всем участке.
    Цитата Сообщение от bals1985 Посмотреть сообщение
    потом как немножко разберётесь-приложите видио урок ко всему этому пожалуйста.
    Это ты кому говоришь? Если мне, то я уже давно разобрался, иначе бы не написал это. Но видеоурок я делать не буду, потому что мне лень. Если другим, то жди, может и найдутся добрые люди.

  13. #10
    Пользователь Аватар для Ant.taranish
    Регистрация
    21.03.2011
    Страна
    Возраст
    33
    Сообщений
    582

    По умолчанию

    Цитата Сообщение от B.U.G.O.R. Посмотреть сообщение
    Смотри, если на ближайшем перегоне оказался пассажирский, то действует это:
    Ближайший перегон здесь не причем. Скажи, что будет, если в момент наезда грузового на чВ пасс проследует станцию Д. Грузовой его никак не увидит, потому что он еще не наехал на нГ и не собрал себе маршруты. Грузовой первым соберет себе маршруты до станции Г, до которой ему пилить еще два перегона, а пассажирскому всего один.
    Цитата Сообщение от B.U.G.O.R. Посмотреть сообщение
    сами понимаете, что это будет очень громоздко
    В общем случае есть два варианта предотвращения заторов - контроль свободных путей на станциях (что громоздко), либо ограничение количества поездов на участке. То есть
    отправлять столько поездов, сколько перегонов, а еще лучше на 2-3 меньше.
    Но тут вопрос, как именно будет ограничиваться количество поездов на участке.

+ Ответить в теме

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения