PDA

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



B.U.G.O.R.
16.01.2014, 20:18
Т.к. я несколько дней промучался с этой темой, а нигде реально толковых инструкций не было, я решил написать свою, чтобы следующим людям было попроще. Объяснять я, конечно, толком не умею, но будем попытаться. Самое главное, на что я хочу обратить внимание, так это то, что это лишь

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

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

Что нам необходимо для этого?
Для этого нам нужна настроенная сигнализация Su, настроенная маршрутизация и набор команд для создания переменных. Все это можно найти здесь, да и они у всех есть, наверное.

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

Как это работает после того, как все будет готово?
Очень просто. Задаем движение пассажирских поездов по участку любыми удобными способами. Организовываем наличие грузовых поездов на крайних участках, задаем им одну команду, и они сами работают. На любой вновь созданный грузовик надо добавить лишь одну команду.

Что значат цветные текстовые вставки?
Таким цветом обозначена информация, на которую следует обратить особое внимание.
Таким обозначены триггеры и маркеры.
Ну, а таким переменные.


1. Расстановка маркеров и триггеров
В самую первую очередь нам необходимо иметь полностью настроенную сигнализацию sU и маршрутизацию zxPath, как это будет работать с другими не знаю, но скорей всего не будет никак. На этом я останавливаться не буду, не тут это надо объяснять, будем считать, что подобное есть, кроме одной вещи. По моим условиям, надо задавать приоритет в светофорах определенным образом. В принципе, въехавшие, потом могут настраивать приоритет, как угодно, но не все такие, поэтому расскажу, как он должен быть тут. Приоритет 0 должен быть по главному всегда. Приоритет 1 должен быть на тех путях, куда принимаются только пассажирские поезда, такие пути есть. Ну, а все остальные приоритеты, начиная с 2, ставятся путям, на которые будет вестись прием грузовиков. При чем, чем выше приоритет, тем маршрутизация меньше стремится принять туда поезд. Тогда, нам надо расставить триггеры и маркеры. Ставятся они так:
http://i017.radikal.ru/1401/bb/e5d0ad4b8958t.jpg (http://i017.radikal.ru/1401/bb/e5d0ad4b8958.jpg)
Стрелочками сверху указаны направления маркеров с триггерами, т.е. они должны смотреть внутрь перегона всегда. Будьте осторожны с триггером, у него нет явной направленности, можно либо ставить рядом маркером, и судить по нему, разворачивать ли триггер, либо по текстуре (там есть одна такая неприметная полосочка, по которой смотрю я). Обзывать их можно как угодно, но я предпочитаю писать сначала код станции (у меня-то реальная карта, и коды реальные), потом приписывать либо CH, либо N. А, чтобы отличать название триггера от маркера, в маркере ставлю пробел между ними и приписываю (entrance), а в триггере все без пробелов и без кода. Обратите внимание на то, к каким станциям относятся какие триггеры! Конечно, это повлияет лишь на удобство восприятия и настройки в будущем, но все же. Особо расписывать здесь нечего, движемся далее.

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

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

И подобную группу задаю по кол-ву станций. Где надо остановить, конечно, даю не проехать через, а двигаться к. В-общем, это ни на что не влияет, делаем любым удобным способом. Только старайтесь не дефолтом, потому что он трогает маршруты, а нам это не нужно. Теперь, заходим в правила сессии и начинаем собирать маршруты пассажирским поездам. Для начала, нарисую схематично, как он собирает их. Т.к. пассажирские должны проходить в большинстве случаев по строго определенному пути (главному, скажем), то так и будем делать. Собираться маршрут будет по проезду его одного из тех триггеров, которые мы уже расставили. Как раз собираться маршрут по той станции, к какой он и принадлежит. Теперь, предположим, поезд проследовал триггер станции, смотрим, сколько он открыл себе впереди:
http://s018.radikal.ru/i515/1401/3f/84188f9fe1fct.jpg (http://s018.radikal.ru/i515/1401/3f/84188f9fe1fc.jpg)

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

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

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

3. Создаем счетчики кол-ва пассажирских поездов на перегонах.
Для того, чтобы грузовики ставились на боковой, они должны знать ситуацию позади себя и впереди себя. Забегая вперед, скажу, что грузовой, который движется по перегону Б — В, знает ситуацию по пассажирским поездам на всем том отрезке участка, который представлен на схеме. Т.е. он знает кол-во четных поездов на перегоне А — Б и кол-во нечетных поездов на перегонах Д — Г и Г — В. И в зависимости от этих данных, он либо едет прямо, либо ставится на боковой. Достигается это переменными. Каждый перегон имеет по две переменных (четную и нечетную), которые я обзываю абсолютно так же, как и триггеры. А принцип работы счетчика заключается в след.: машинист Adair (т.е. самый настоящий пассажирский поезд под любым локомотивом), который проехал триггер нВ добавил единицу к переменной нВ. Он же, когда проехал триггер нБ отнял ту же единицу от той же переменной нВ. Т.о. получается, что это счетчик кол-ва поездов не совсем на перегоне, но еще и на станции, но для удобства назовем его счетчик конкретно перегона. Как нам это сделать?
Идем в настройки сессии, создаем там правило VariableSetup и заходим в его настройки:
http://s020.radikal.ru/i706/1401/90/1760a3a49129t.jpg (http://s020.radikal.ru/i706/1401/90/1760a3a49129.jpg)
Видим кнопку Add. Жмем ее, вводим название переменной. Повторюсь, что весьма удобно называть переменные так же, как и триггеры. Но это не обязательно. Создали. Теперь, в пункт Value пишем 1, а в след. два надо поставить минимум и максимум. В минимум ставим 0 само собой, не может же у нас быть -1 поезд на перегоне, а в максимум можно ставить сколько угодно, я обычно ставлю 10. Сомневаюсь, что где-то может быть более 9 поездов на однопутном перегоне одновременно. Первичное значение ставим единицей, а не нулем, потому что ТРС не хочет работать с нулем почему-то. По крайней мере, у меня не получалось. Мы просто смещаем систему счета на одну вправо (поэтому я и написал о девяти поездах на перегоне, хотя предел выставлен десятью). В описании можно добавить свой текст, чтобы понимать. Я обычно пишу. Все, создали все переменные. Закрываем. Теперь создаем правило InputTable. Заходим в настройки:
http://s018.radikal.ru/i505/1401/fb/aedb3f6fc421t.jpg (http://s018.radikal.ru/i505/1401/fb/aedb3f6fc421.jpg)
Видим здесь кучу непонятной фигни. Сейчас все разъясним. Собственно, это необходимо для созданий команд ожидания, когда кол-во пассажирских поездов на перегоне будет равно нулю, ну т.е. единице в нашей ситуации. Довольно просто, несмотря на непонятки. Жмем add, в появившемся окне пишем следующее:
svar,[название переменной],eq,1
И таких штук нужно создать так же ровно столько же, сколько мы имеем переменных. Текст значит примерно следующее:
Variable [такая-то переменная] эквивалента (ну, т.е. равна) единице.
Создали по аналогу всем переменным, жмем ок. Да, кстати, не забывайте сохраняться, а то потеряете все.
Теперь, сам счетчик. Рассмотрим а примере одной переменной, далее по аналогии сделаете для всех перегонов всех направлений.
Перво наперво, посмотрим, какие триггеры как работают с переменными и какими. Обратите внимание, что центральные триггеры работают с двумя переменными.
http://s019.radikal.ru/i627/1401/9f/f4ce4bc11bfat.jpg (http://s019.radikal.ru/i627/1401/9f/f4ce4bc11bfa.jpg)

В-общем, все довольно просто, теперь лезем в те же настройки сессии. Создаем все тот же TriggerCheck, настраиваем по аналогии с тем, только в условиях определения ПЕ указываем нашего машиниста Adair. Кстати, если в тех триггерах настройка шла по машинистам, то можно спокойно объединить эти условия. На предыдущий текст не обращайте внимания, если вы и без того нифига не понимаете.
Создали, допустим по триггеру чВ. Значит, нам надо прибавить единицу к переменной чВ и отнять единицу от переменной чБ. Создаем дочернее правило Variable Modify, лезем в настройки:
http://i047.radikal.ru/1401/02/c5ae0f1bf9b3t.jpg (http://i047.radikal.ru/1401/02/c5ae0f1bf9b3.jpg)
Первая кнопка означает действие с переменное, вторая количественный показатель, а третья саму переменную. Нижние две галки вполне ясны, но нам они не нужны, пожалуй.
Значит, ставим Add 1 и указываем нашу переменную. Кстати, имейте в виду, что скрины и текст в плане переменных разнятся, но у меня нет цели на скринах описывать конкретный пример. Плохо то, что переменную надо писать вручную, а не выбирать из списка, но другого способа я не знаю. Пишем туда переменную чВ. Все, отправляем это правило в дочернее к триггерчеку. Теперь, создаем там же еще один Variable Modify. Только там уже указываем Subtract 1, и от переменной чБ.. И т.о. смотрим на схему взаимодействия переменных и триггеров, и клепаем аналогичным образом все переменные. В принципе, этот этам завершен.

4. Даем команды грузовым поездам.
Ну вот и последний этап. Надо отметить сразу, что есть некоторый смысл отправить общую команду в Schedule Library, чтобы всем грузовикам потом лишь только добавлять одну команду "Копировать команды из этой библиотеки" и все. Но, даже, если вы этого не будете делать, правило Schedule Library нам понадобится. Для начала, обратите внимание на блок-схему команд машинисту грузового поезда. Кстати, вот именно тут нам наконец-то понадобятся маркеры. Посмотрим, блок-схему грузового поезда, который выезжает со станции Б и подъезжает к маркеру чВ:
http://s52.radikal.ru/i137/1401/81/52a9ceba6007t.jpg (http://s52.radikal.ru/i137/1401/81/52a9ceba6007.jpg)
Теперь, давайте разберем ее понятным языком, а затем зададим это все языком, понятным ТРСу.
Сначала, надо понять, каким образом осуществляется сама команда движения. Поезд не едет от конечной станции до конечной. Он проезжает через маркеры своей четности/нечетности, которые принадлежат станциям. И решение о маршруте, он отправляет на ходу. Что, конечно, несколько не в плюс, потому что пока он решает, он начинает немного оттормаживаться, но если не знать, то особо и не заморачиваешься по этому поводу. Главное, что вся эта схема проходит моментально.
Так вот, открываем нашу карту и эту схему, и следим по тексту.

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

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

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

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

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

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

Теперь, давайте совать это все в ТРС.
Так выглядит пропуск одной станции у меня:
http://s019.radikal.ru/i634/1401/48/6b83e74232cdt.jpg (http://s019.radikal.ru/i634/1401/48/6b83e74232cd.jpg)

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

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

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

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

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

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

Ну и да, аналогичный способ можно использовать и на двухпутке, разве что убрав условие проверки поездов впереди себя. Все, въезжайте (—:

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

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

B.U.G.O.R.
16.01.2014, 22:59
А мысли насчет разных длин поездов есть?
Разве маршрутизация это не проверяет? Но в любом случае, по поводу

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

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

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

B.U.G.O.R.
16.01.2014, 23:31
ждём сессию с реализацией этой схемы на практике)
Ну, это хз. Делать на куске Родины не охота, потому что придется то ли отрезать кусок, то ли еще хз чего, если только потом-потом, когда я так или иначе это сделаю. А отдельную карту-пример делать как-то не охота.

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

Решение о выпуске грузового на следующий перегон, вероятно, лучше принимать не в начале перегона, а уже на подъезде к станции.
Тоже не верно. Я ранее так и делал, но тогда у меня был полностью "ручной контроль занятости", т.е. я лично следил за всем, а тут так не проканает. Потому что есть вероятность того, что на подъезде к станции уже не останется места на станции, а его надо убрать с перегона. А уже некуда. Это однопутка, поэтому поезд, который заехал на перегон, должен 100% с него выехать. Поэтому как только поезд вступил на перегон, он сразу должен забить себе путь на выход с перегона. В идеале надо и вовсе забивать прием на след. станции, пока еще поезд не вышел с предыдущей, но это будет слишком громоздко к исполнению. Можно и реально, я даже знаю, как, но игра не стоит свеч. А этот маркер можно ставить через 2 метра от последней стрелки, как это делаю я. А триггеры я ставлю в районе входного светофора.

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

Ведь, если на том перегоне есть какой-то поезд, то он уже наверняка собрал себе маршрут на вход, и даже поставил в очередь маршрут на выход.
Это не наверное он собрал маршрут на вход, а 100%. Потому что он собирает маршрут на вход абсолютно тогда, когда скидывает свою переменную с предыдущего перегона. Я учел эти моменты, и у меня абсолютный автоматический конроль всех перегонов. Если это все грамотно настроить, конечно.

Ant.taranish
16.01.2014, 23:54
Проехав чВ, он соберет себе только прием на станции В.
По твоей блок-схеме и по набору команд "проверка необходимости пропуска", получается что грузовой собирает себе маршрут на вход и сразу на выход, если он не видит поезда впереди или позади себя.

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

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

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

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

B.U.G.O.R.
17.01.2014, 09:54
получается что грузовой собирает себе маршрут на вход и сразу на выход, если он не видит поезда впереди или позади себя.
Верно, а что тут плохого-то? Смотри, если на ближайшем перегоне оказался пассажирский, то действует это:

Это не наверное он собрал маршрут на вход, а 100%. Потому что он собирает маршрут на вход абсолютно тогда, когда скидывает свою переменную с предыдущего перегона. Я учел эти моменты, и у меня абсолютный автоматический конроль всех перегонов. Если это все грамотно настроить, конечно.
Т.е. до тех пор, пока пасс не проехал триггер, он еще висит в переменной, т.е. грузовой воспримит его, как помеху и встанет на боковой. Если он проследовал этот триггер, и он отнялся с переменной, то тогда он по этому же самому триггеру УЖЕ собрал себе маршрут на вход\выход след. станции. А т.к. там мы едем, то пассу соберется только на вход, а выход встанет в очередь. Но он соберет на вход. В то же время, я целенаправленно сделал при невыполнении условий команду сбора приоритета все равно выше двух (но при этом и главного) на подобные ситуации. Т.е. он поймет, что главный занят, значит будет искать маршрут приоритетом выше двух. И все равно поедет на боковой, пока проедет пасс. А то, что он сразу себе будет собирать на выход — не беда, поставит его в очередь, и пусть себе ждет, пока все освободится. А если там не пассажирский, а грузовой, то ситуация аналогична: какой-то из этих двух груховых успеет занять себе главный, на который просто примется, а второй соберет на боковой. А т.к. они сразу забивают на выход, то как только они сами же и разъедутся, тут же и поедут, если там впереди опять же ничего не вступило, которое займет просто постанвокой своего маршрут в очередь.

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

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

ни что не мешает поездам забить все свободные пути на станциях, если их достаточно много.
Вот на этот предмет я и хочу потестировать перенасыщенность графика. А ваще, чтобы все 100% работало, достаточно отправлять столько поездов, сколько перегонов, а еще лучше на 2-3 меньше.

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

потом как немножко разберётесь-приложите видио урок ко всему этому пожалуйста.
Это ты кому говоришь? Если мне, то я уже давно разобрался, иначе бы не написал это. Но видеоурок я делать не буду, потому что мне лень. Если другим, то жди, может и найдутся добрые люди.

Ant.taranish
17.01.2014, 10:36
Смотри, если на ближайшем перегоне оказался пассажирский, то действует это:
Ближайший перегон здесь не причем. Скажи, что будет, если в момент наезда грузового на чВ пасс проследует станцию Д. Грузовой его никак не увидит, потому что он еще не наехал на нГ и не собрал себе маршруты. Грузовой первым соберет себе маршруты до станции Г, до которой ему пилить еще два перегона, а пассажирскому всего один.

сами понимаете, что это будет очень громоздко
В общем случае есть два варианта предотвращения заторов - контроль свободных путей на станциях (что громоздко), либо ограничение количества поездов на участке. То есть
отправлять столько поездов, сколько перегонов, а еще лучше на 2-3 меньше. Но тут вопрос, как именно будет ограничиваться количество поездов на участке.

B.U.G.O.R.
17.01.2014, 23:44
Грузовой первым соберет себе маршруты до станции Г
Да, тут будет небольшое недоразумение. Но опять же, оно повлечет за собой только немного смещение графика пасс. поезда. Потому что пасс заедет на станцию Г и встанет на главном, как только грузовой доедет до маркера нГ, он соберет себе просто на вход/выход бокового пути той же станции Г. Он проедет по нему, а потом отправится пасс.

---------- Сообщение добавлено 18.01.2014 в 01:44 ---------- Предыдущее сообщение размещено 17.01.2014 в 13:18 ----------

Заметил такую интересную фиговину, которая облегчит жизнь. После того, как собран ДСП по одному направлению, по обратному можно добавлять лишь одну группу заданий в ДСП-шную Шедуле Лайбрари. И это одна будет набор команд для проверки необходимости пропуска, там меняются команды. А вот команды, которые именно ставят на боковой под обгон или пропуск, просто тупо меняются местами. Поэтому команды для одной станции ДСП обоих направлений состоит из 4 наборов:
— Постановка под обгон,
— Постановка под пропуск,
— Проверка необходимости пропуска четная,
— Проверка необходимости пропуска нечетная.

B.U.G.O.R.
19.01.2014, 23:34
Ну, в принципе, у меня система работает безукоризненно. Если все-таки кто-то решится делать подобное, то есть один совет. Когда поезд еще стоит на станции отправления, перед отправкой надо ему обязательно проверить свободность перегонов, из которых может появится пасс. И еще, если перегоны короткие, то есть целесообразность проверять на перегон дальше. Например, у меня перед отправкой из Воронежа-Курского идет проверка свободности перегона Латная — Подклетное (потому что Подклетное — 239 км и 239 км — Воронеж-Курский) ужасно короткие. Так вот, если там есть поезд, то грузовик не выйдет, а если нету, то проверяет наличие поезда на перегоне аж Ведуга — Латная, и если есть, то строит на боковой Подклетное.

Ну и самое главное, вот такие нестандартности определяются в большинстве своем во время тестов.

Fironn
17.06.2014, 21:10
Женя, помоги разобраться. Настраиваю автоматическое движение на последней "Печорской магистрали". С помощью правила Trigger Check и дочернего zxPath AddPath организую проход станции. Наблюдаю следующую картину. когда проходят локомотивы всё работает как надо, но стоит добавить вагоны, больше 4х, (вычислил опытным путём) правило снова срабатывает на последнем вагоне, а бывает и дважды. То есть в очередь добавляется не одна группа команд, а несколько. Менял место тригера, сносил ставил тригер, менял зону действия тригера-результат нулевой. Trigger Check Enhanced,
Directional trigger check разницы ни какой. Настройки Тригер чек. галка на 3й строчке, имя тригера, срабатывает на машиниста. Данное безобразие не на всей карте.

NickLon
18.06.2014, 12:29
Fironn, а вагоны любые? Попробуй поэкспериментировать с вагонами. Поставь дефолтные, т.е. аурановские. Я обычно ПС дефолтный ставлю для проверок всяких, чтоб скрипт не винить в багах.

Fironn
18.06.2014, 15:54
NickLon,Проверил на китайском ПС. Разницы нет. Там где был порядок-норма, в проблемных местах без изменений.

B.U.G.O.R.
22.06.2014, 23:37
Тогда меняй изменение переменной с триггера на команду. Ну т.е. после "проехать через определенный маркер" ставь команду вычитания или прибавление определенной переменной. Я у себя так давно делаю по причине того, что направленный триггер вечно глючит и на однопутках зачастую реагирует на обратные поезда.

LEGION-353
25.10.2014, 16:59
B.U.G.O.R., Если я правильно понял - прописывать в маркере и триггере активаторе код станции и всё остальное надо той станции в которую они смотрят?
:phil:

---------- Сообщение добавлено 25.10.2014 в 16:59 ---------- Предыдущее сообщение размещено 24.10.2014 в 20:20 ----------

B.U.G.O.R., И ещё - в правиле Variable Setup перегоны нужно вводить вручную?

Donate with PayPal button

New New