Вход

Просмотр полной версии : Сигнализация: конфигурация и скрипты


Страницы : 1 2 3 [4]

vicente
26.09.2021, 17:53
WR? Вроде говорилось про зеленый...
Ждём уточнений, короче. ;)

КЕ
26.09.2021, 19:18
Там стоит T_Signal_Small_GR.s - неправильно, это тупиковая станция, должен быть маневровый К-Б.
T_Signal_Small_GR.s имеет одну голову:
SCRIPT T_Small_GR

extern float block_state ();
extern float route_set ();
extern float next_sig_lr ();
extern float next_sig_mr ();
extern float def_draw_state ();
extern float state;
extern float draw_state;
extern float enabled;
extern float sig_feature ();
float next_state;

state = 1;
if (enabled && (block_state() == BLOCK_CLEAR))
{
next_state = next_sig_lr (SIGFN_NORMAL);
if ((next_state == 0) || ((next_sig_mr (SIGFN_NORMAL) == 1) && (next_state == 2)))
{ state = 2; }
else
{ state = 7; }
}
draw_state = def_draw_state (state);
В этой горловине все - карлики T_Signal_Small_GR. Но их там не должно быть, дальше движение только маневровое (в тупик или на подъездные пути).
И этот светофор не даст зайти под состав. Он открывается, только если БУ свободен (поэтому вообще непонятно, зачем в его скрипте прописан маневровый аспект, хотя в конфиге геометрических параметров белого огня нет).
И опять как всегда, в логе - ошибки сигнализации.

vicente
26.09.2021, 19:59
Я, ароде, тоже вижу на скрине тупики. Но, состав не заметил. Конечно, все светофоры, кроме маневровых у Тимаса будут закрыты на занятый путь.
Возможный вариант решения - сделать маршрут на свободный путь (будет, я так понимаю, красный, но его можно будет проехать - RESTRICTING), оттуда опять - точка разворота, не заезжая за сигнал - ещё одна - под состав.

Добавлено через 4 минуты

Немного оффтопа в теме по сигнализациям MSTS - "закончу" тему по С# скриптам в Open Rails - два дня штудирую Шарп и источники кодов и ещё кучу всего. Пока, по крайней мере относительно меня - отбой и "обе машины - стоп". Сыро. Разработчики вставляют только тот функционал, который они считают нужным для целей, для которых и переводят сигналку на С#. Большинство функций sigscr.dat , насколько я врубился в это дело, в С# будут недоступны.
Но, Шарп буду продолжать изучать :D

КЕ
26.09.2021, 20:05
... переводят сигналку на С#. Большинство функций sigscr.dat , насколько я врубился в это дело, в С# будут недоступны.
Но тогда смысл?..
_________________
Короче - выкинуть нафиг оттуда эти светофоры, и установить маневровые К-Б.
И выпустить патч.;)

vicente
26.09.2021, 20:39
Я уже писал: кое-кому из разрабов не хватает сообразительности... терпения... знаний С/С++ ... желания программить в sigscr.dat аспектов и ещё, там, разные отмазки были

Мы разрабатываем некоторые сценарии сигналов для воссоздания испанских систем сигнализации, и мы обнаружили, что SIGSCR немного ограничивает. (...) Вот некоторые из причин, по которым, по нашему мнению, может быть полезен C #:

*** 8 аспектов MSTS недостаточно для представления всех аспектов сигнала (например, в Испании у нас есть до 16 различных аспектов). Каждый сигнал показывает подмножество общих аспектов, поэтому обходным путем является повторное использование одного и того же аспекта MSTS для разных аспектов. Однако это вызывает проблемы с продвинутыми системами управления поездом, такими как ETCS, которые будут предпринимать разные действия в зависимости от аспекта сигнала. (...)

*** Сигналы трудно отлаживать людям, не знакомым с кодом OR. Использование C # позволяет использовать Console.WriteLine (), что полезно для простой отладки логики.

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

*** Работа с глобальными переменными утомительна, потому что их нужно читать и сохранять при каждом обновлении.


*** Некоторые из проблем могут быть решены с помощью существующего интерфейса SIGSCR (например, количество доступных аспектов может быть расширено, как это делается с помощью определений SIGFN_ и SIGSUBT_), но другим потребуется уделить много времени синтаксическому анализатору SIGSCR.

КЕ
26.09.2021, 20:55
Ну понятно, там свои запросы. Но sigscr.dat останется?

vicente
26.09.2021, 21:31
Да, конечно.
Более того, в С# можно будет писать отдельно-взятую сигнальную голову. Сим будет прежде всего проверять наличие скрипта в С#, если не найдёт - sigscr.dat в папке OpenRails , если и там нет - в корневой папке MSTS . Вот такой, вот, геморрой

КЕ
26.09.2021, 21:45
То есть какой-то субобъект можно описать отдельным скриптом на С#, а все остальное в sigscr, так?

roman5
26.09.2021, 22:16
И опять как всегда, в логе - ошибки сигнализации.
А речь про какой лог, в скрипте не вижу debug_out2 функций, сам msts вроде лог не делает. Или это про OR ?

vicente
26.09.2021, 22:23
Они говорят о Signal Type. Получается - так. Сначала программа ищет его в С#, причём, компилируется это дело в реальном времени - в процессе запуска игры. Если в скрипте на С# есть ошибки или нет такого скрипта для одноименного типа, заявленного в sigcfg.dat, тогда программа обращается к sigscr.dat .
Мне тоже многое пока непонятно. Как быть с заявленной конфигурацией в sigcfg.dat ? С буржуйскими дополнительными аспектами тоже не всё так просто. 8 "родных" MSTS -овских аспектов остаются. Они "двигают" поезда AI (трафики), они выводятся на CabSignal дисплей и т.д. То, что они придумали - некий "текстовый" аспект (обзывай, как хочешь) и этими аспектами светофоры обмениваются как сообщениями. Бррр...
Говорю же, ПОКА, повторюсь, ПОКА, функционал разнообразием не блещет, а класс "наследуется" из нового файла source - ещё вопрос или я могу "снимать" нужные мне внешние функции через включение соответствующего совершенно другого *.cs -файла. Если да - можно будет подумать о каких-то отдельных, особых головах в С#. Но, вряд ли, в том виде, в котором оно сейчас. Но, поиграться можно на досуге (пока этого длсуга у меня нет).

КЕ
26.09.2021, 22:47
А речь про какой лог, в скрипте не вижу debug_out2 функций, сам msts вроде лог не делает. Или это про OR ?
Да, лог OpenRails или RTrainSim - удобно "косяки" искать.

roman5
26.09.2021, 23:19
То, что они придумали - некий "текстовый" аспект (обзывай, как хочешь) и этими аспектами светофоры обмениваются как сообщениями.

Ну это удобно для расширения функционала, отладки.

класс "наследуется" из нового файла source - ещё вопрос или я могу "снимать" нужные мне внешние функции через включение соответствующего совершенно другого *.cs -файла.
По идее да, но разве они недоступны в классе, от которого наследуешь свой класс ?

vicente
27.09.2021, 11:35
Нет. Там урезано "под разработку". В смысле, им не нужна зависимость от next_sig_lr (SigFn_Type) - к этой функции не привязаться. Можно давать каждому аспекту "параллельно" ещё и текстовый аспект и сделать зависимость от этого текста, но преимуществ в этом я не вижу. Есть переменные в sigscr.dat . Но, это пока. Преимуществом может быть функционал С#, какие-то вещи, которые в sigscr.dat нельзя делать... Но, посмотрим. Пока что, программирование на С# даже в тестовые релизы не включено.

Predator
27.09.2021, 12:12
Хм... похоже, маневровый NORMAL WR (?) . У него есть одна интересная деталь. А можно скриншот редактора сценариев и на нем указать место, на котором сделан предыдущий скрин и как-то выделить/обозначить PATH этого сервиса. Сразу обозначу подозрение. Если светофор - тот, о котором я говорю и дальше есть противошерстная стрелка не по марщруту - будет красный
Ждём уточнений, короче. ;)
Пара скринов из редактора сценария:
Скрин № 1:
https://d.radikal.ru/d26/2109/b6/45274fa1a168t.jpg (https://d.radikal.ru/d26/2109/b6/45274fa1a168.png)
Скрин № 2:
https://c.radikal.ru/c24/2109/f8/6edf8e9e8905t.jpg (https://c.radikal.ru/c24/2109/f8/6edf8e9e8905.png)
Проблемный светофор:
https://d.radikal.ru/d42/2109/4f/449f3193705bt.jpg (https://d.radikal.ru/d42/2109/4f/449f3193705b.png)

КЕ
27.09.2021, 12:16
Светофоры не те расставлены. Нет смысла биться об эту "стену" - надо заменять светофоры и выпустить патч. Я серьезно.

vicente
27.09.2021, 12:19
Этот светофор по скрипту не откроется на занятый путь.

КЕ
27.09.2021, 12:22
Вот и нечего ему там делать.

Predator
27.09.2021, 12:25
Этот светофор по скрипту не откроется на занятый путь.
Ввиду того, что стоит служебный вагон на этом пути?

КЕ
27.09.2021, 12:57
Потому что это поездной светофор - открывается при свободности БУ.
А должны стоять маневровые - это тупиковая горловина, за выходной сигнал поездного движения нет.
Белый - это манёвры, а маневры - это движение и на занятый путь.
А у этого какой-то странный скрипт. Может открыться белым, но только на свободный путь.

Predator
27.09.2021, 13:21
Потому что это поездной светофор - открывается при свободности БУ.
Совершенно верно, пересобрал сцену, убрал служебный вагон, продлил путь до конечной точки и всё сработало, но поездной светофор так и остался гореть красным, хотя на мониторе пути зажёгся желтый с ограничением 20 км/ч.
Скрин № 1:
https://a.radikal.ru/a13/2109/94/94e74069270bt.jpg (https://a.radikal.ru/a13/2109/94/94e74069270b.png)
Скрин № 2:
https://c.radikal.ru/c10/2109/6f/fc76898ef249t.jpg (https://c.radikal.ru/c10/2109/6f/fc76898ef249.png)

А у этого какой-то странный скрипт. Может открыться белым, но только на свободный путь.
Уже тестировал на маршруте?

КЕ
27.09.2021, 13:27
Совершенно верно, пересобрал сцену, убрал служебный вагон, продлил путь до конечной точки и всё сработало, но поездной светофор так и остался гореть красным, хотя на мониторе пути зажёгся желтый с ограничением 20 км/ч.

Потому что у этого светофора в конфиге не указаны расположение и размеры белого огня.

Уже тестировал на маршруте?
Да, проверил. Так и есть.

vicente
27.09.2021, 14:06
Я тут подумал... Оппозитные функции надо потестить "чистым" тестом. Да, ещё раз. Особенно тех сигналов, которые не по ходу поезда. В MSTS и в Open Rails

КЕ
27.09.2021, 15:08
Комп налажу и потом займусь на чистом тестовом маршруте.
Да и в RTrainSim тоже.

vicente
27.09.2021, 21:36
Он не сработает по opp_sig_lr, он в оппозитном положении вообще ничего не считывает с других сигналов. Может только менять свой аспект по BLOCK_STATE ().
Но, если нет между светофорами нет поезда, работать будет? Даже, если вообще нет поездов?

КЕ
27.09.2021, 21:38
Это все надо будет потестировать. Чтоб уж точно выяснить.

vicente
28.09.2021, 01:12
Протестировал в Open Rails. Нет, нигде я не ошибся. Только enabled светофоры "видят" по opp_sig_lr (). В свободной поездке, вообще - пока тестовый лок не проехал полностью оппозитный светофор, тот не "видел" открытый перед локом, а когда проезжал - менял аспект по скрипту. И только если состав был между соответствующими светофорами, эта "связка" работала. В Activity - только светофоры впереди тестового локомотива "видят" оппозит. И только на SignalNumClearAhead вперёд. Я поставил 6 табло на перегон, при SignalNumClearAhead 3 - если между оппозитом и локом было больше 3х табло - дальше уже не ловится.

Добавлено через 1 минуту
Забил в табло сразу NORMAL, DISTANCE и INFO - у всех opp_sig_lr (SigFn_NORMAL) работало одинаково.

Добавлено через 6 минут
В MSTS может получиться "поймать", скажем, открытый входной - там светофоры противоположного направления перед сервисом - enabled. К тому же сим расчитывает поезда на дорожках чуть по-другому.

Добавлено через 1 минуту
...и эта фича с составом между светофорами может и не появиться. Хотя, с другой стороны, может случиться и так, как Костя указывал: "через сервис" вообще ничего не будет работать.

КЕ
28.09.2021, 09:06
... И только на SignalNumClearAhead вперёд. Я поставил 6 табло на перегон, при SignalNumClearAhead 3 - если между оппозитом и локом было больше 3х табло - дальше уже не ловится.
Забил в табло сразу NORMAL, DISTANCE и INFO - у всех opp_sig_lr (SigFn_NORMAL) работало одинаково.
Само табло - какого типа, REPEATER?
И оппозит - NORMAL?

vicente
28.09.2021, 11:29
Дык, само табло я и настроил.
Верхний N - NORMAL
Нижний N - INFO
Верхний D - DISTANCE
Нижний D - тоже оставил инфо.
Всем прописал простой скрипт: state = 7 , если оппозит больше 0 (NORMAL - больше 1, иначе не было бы движения), иначе, соответственно, state =0 (у NORMAL - 1)

КЕ
28.09.2021, 16:00
В Activity - только светофоры впереди тестового локомотива "видят" оппозит
То есть только попутный (например, входной) может прочитать аспект оппозитного, и только когда ездючина между ними, так?
Да, Олег, ты не в курсе - в ОРТС есть ограничение количеству огней на тайле? В МСТС 512 было.

vicente
28.09.2021, 17:11
То есть только попутный (например, входной) может прочитать аспект оппозитного, и только когда ездючина между ними, так?.
Нет. Только попутные впередистоящие светофоры в количества SignalNumClearAhead штук могут "ловить" информацию с оппозитов через функции opp_sig_lr (SigFn_Type), opp_sig_mr (SigFn_Type), id_sig_lr (sigid) и пр. opp_XX_XX() в Activity Mode. И это - тоже не всё. Если между светофорами есть SignalNumClearAhead светофоров противоположного направления, тоже перестают ловить. У меня ловят не входные, а маневровые. Когда ездючина приближается к входному, они ловят информацию с маркера, который я присобачил "спиной" к входному (маркеры основаниями друг к другу - эдакая обратно-смотрящая голова, которую я, возможно, "присобачу к входному в сдедующей сигналке - сейчас не хочу весь этот геморрой : изменение конфигурации и замена входных). Эти маркеры я, пока, на крупных станциях поставил с большим маневровым трафиком. На остальных маневровые "ловят" первый проходной - ему я ту же программу поставил.
В Explore Route, первый светофор за ездючиной тоже "ловит" оппозит. Но, только, когда ездючина его проезжает (не знаю: у меня только ЧМЭуха на тестовом была, может, как с block_state () у DISTANCE ов, только моторная голова учитывается - хз: если есть смысл проверять - оно бесполезно вообще). То есть, при подъезде к входному, на последнем блок-участке, можно первым проходным противоположного направления поймать.

Да, Олег, ты не в курсе - в ОРТС есть ограничение количеству огней на тайле? В МСТС 512 было.
Я и про MSTS не знал :D . Никогда с проблемой количества светофоров/огней не сталкивался :confused:

Добавлено через 28 минут
Ругается, гад, на скрипт мой в С#. Ругается, но видит мню :rofl::russian:

Warning: Skipped script folder C:\Train Simulator\ROUTES\CUSTOM_2\Script\Signal with error:
; expected, file: C:\Train Simulator\ROUTES\CUSTOM_2\Script\Signal\KRN23_RC_6 0.cs, line: 1, column: 13
; expected, file: C:\Train Simulator\ROUTES\CUSTOM_2\Script\Signal\KRN23_RC_6 0.cs, line: 2, column: 33

КЕ
28.09.2021, 17:15
Применительно к сигналке "expected" что означает?

vicente
28.09.2021, 18:28
Костя, то что я писал. Симулятор "предполагает", что там будет скрипт, поэтому и expected . К сигналке не имеет отношения. Только к самим файлам.

Добавлено через 14 минут
Только что "соорудил" таймер на светофор в Open Rails. Скриптом :russian::russian::russian:
Этот недо-С "петли" не признаёт. Несмотря на то, что for даже в инструкции кужувской присутствует, когда-то, очень давно пробовал его - не получалось ( может, мозги кривые, конечно, но в for трудно ошибиться). На днях попробовал While - парсер послал меня подальше. Сделал под if: загнал переменную в "запоминалку" переменных Open Rails-овскую. Под if (n <# 45) поставил n = n + 1; и результат - в "запоминалку". Считает :p Поиграл величинами, на 45 - ждёт 28-29 секунд, на 15 - 11-12, на 99 уже, как бы долго получается. Оставлю 45 пока. Теперь - самое главное- потестить не с сейва, а с loading - может быть офигительная вещь. В идеале, конечно, привязать это к флагам... и выбирать птичкой в редакторе: большая станция, маленькая станция и т.п.

Добавлено через 6 минут
Вот скрипт-черновик:

float next_state;
float sigid;
float wait_time;
float k;

if (!enabled || (block_state() !=# BLOCK_CLEAR) || !route_set() )
{
state = SIGASP_STOP;
if (block_state() ==# BLOCK_JN_OBSTRUCTED)
{
store_lvar(time, 0);
}
}
else
{
wait_time = this_sig_lvar(time);
next_state = next_sig_lr (SIGFN_NORMAL);
sigid = next_sig_id (SIGFN_NORMAL);
if ((next_state ==# -1) || ( wait_time <=# 99 ))
{
state = SIGASP_STOP;
wait_time = wait_time + 1;
store_lvar(time, wait_time);
}
else if (!train_requires_next_signal(sigid,1) || (next_state ==# SIGASP_RESTRICTING))
{
state = SIGASP_RESTRICTING;
}
// else if (!check_timing_trigger (45))
// {
// state = SIGASP_STOP;
// }
else
{
state = SIGASP_APPROACH_2;
}
}
draw_state = def_draw_state (state);
if ((state >=# SIGASP_APPROACH_1) && (next_state ># SIGASP_RESTRICTING))
{
draw_state = 2;
}
if ((state == SIGASP_STOP) && (this_sig_lr (SIGFN_NORMAL) ># SIGASP_STOP))
{
draw_state = 4;
}

КЕ
28.09.2021, 20:11
Я так ещё не пробовал, поэтому - что означают строки:

store_lvar(time, 0)
sigid = next_sig_id (SIGFN_NORMAL);
store_lvar(time, wait_time);
train_requires_next_signal(sigid,1);

И как работа светофора будет выглядеть на практике? Задержка переключения огней?

Добавлено через 4 минуты
:DПомню, как-то давно получил мигающий огонь, считывая состояние второй головы в одном светофоре, и изменяя ее состояние в зависимости от первой, которая тоже меняла аспект в зависимости от второй.
Случайно ошибившись в скрипте, получил такой вот круговорот аспектов в светофоре!:D

vicente
28.09.2021, 21:05
Костя, там нет ничего, что я не объяснял в этой теме.
Первая строка - "запоминалка". Первый аргумент - регистр, второй - звпоминаемое значение.
Вторая строка - "метит" светофор. Принцип - MSTS-овский: можно "метить" впередистоящий светофор, по оппозиту, ну и функцией next_Nsig_XX(SigFn_Type) - остоящий дальше следующего.
Третья строка - см. первая - то же самое.
Четвёртую строку я тоже в этой теме объяснял: включает ли маршрут сервиса следующий светофор или нет. В данном случае, используется для маневрового показания - сигнал выходной.
Да, задержка переключения. Меня бесит, когда светофор переключается, когда встречный ещё на стрелке. Выглядит отвратительно-нереалистично.Есть временной триггер (он отключен в примере) - внешний таймер. Но, он не работает когда игра "поднимается". "Завязывать" на него аспект 0 - чревато. После загрузки игры все светофоры, которые я сделал с ним - красные, трафики стоят, десятки трафиков вообще не стартовали. В общем, у меня два файла sigscr.dat : один с таймерами, второй - без. Я загружаю сцену без таймеров, сохраняюсь, подменяю файлы sigscr.dat и захожу снова с сейва. Не айс, короче, совсем не айс. Ещё пол-года назад разработчик кода обещал мне сделать что-то с данным безобразием, но... "как только будет время ". А, требовать чего-то от кого-то - не в моих правилах. Короче, если эта штука пройдёт "клинические испытания" - я буду очень рад. А официальный триггер я уже знаю куда "пристроить")))

На практике, как только встречный проходит стрелку (TrackPin секции пути) готовится маршрут - стрелка переводится. Без "оттяжки" поезду сразу же откроется сигнал. Задача задержки - симитировать освобождение РЦ и несколько секунд на срабатывание СЦБ. В реале это занимает где-то секунд 20, но есть станции с очень длинными горловинами, там должно брать больше времени. Поэтому я писал о возможности в будущем сделать опционально несколько таймеров с возможностью выбора в редакторе.

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

КЕ
28.09.2021, 21:18
Интересное дело! Я тоже слегка думал:D, как можно сделать какой-нибудь "delay", но пока не пробовал.
И вот эта строка интересна:
if ((next_state ==# -1)...
Они всё-таки сделали такой аспект?

vicente
28.09.2021, 22:12
Этот аспект и в MSTS прокатывает. Мы же вместе тестили :confused: на табло ещё 7 у тебя выдавал. Костя, Костя... :eek:
Ну, и в кабине тоже, будет З на АЛСН. Но, мне-то что? Я на них не езжу, на эти -1. На них у меня 0 на выходных завязан. А -1 даёт как раз тот маркер, который "жопой к входному" стоит и сигнализирует маневровым, что поезд приближается к станции с перегона и они должны ловить через оппозитную функцию информацию с него.

vicente
29.09.2021, 08:55
... "соорудил" таймер на светофор в Open Rails.

В общем так.
"Клинические исследования" (пока) показывают следующее:
Фигня эта работает и при загрузке игры. Проблема в том, что такой "таймер" не привязан к игровому времени и, очевидно, при загрузке скрипт "пробегает" процедуру вычисления таким образом, что относительно игрового времени проходят долгие минуты, возможно даже десятки минут, пока он срабатывает и переходит в следующий блок. Это сильно тормозит события, поезда долго ожидают своих сигналов, задерживают следующие поезда в расписании которые должны появиться в тех же точках старта, а Open Rails ожидает освобождения нужных секций только 15 минут, затем выдаёт сообщение в логе "невозможно разместить AI".
Не знаю: имеет ли смысл копать "разницу во времени" .
Так как у нас делают сценарии, это может и не мешать.
Мне такая работа сигналки не подходит. Я так играю в Open Rails: весь трафик работает на всём маршруте.

КЕ
29.09.2021, 09:18
Тогда только точки ожидания ставить... и то не везде, наверно.

vicente
29.09.2021, 09:38
Не поможет. Точка ожидания в Open Rails "держит" светофор в закрытом положении. А, когда он так закрыт, мне не к чему "привязаться": все три функции-условия аспекта 0 не проверяются. Так что, точка ожидания только "добавит масла в огонь"

КЕ
29.09.2021, 11:13
Этот аспект и в MSTS прокатывает. Мы же вместе тестили :confused: на табло ещё 7 у тебя выдавал. Костя, Костя... :eek:
Ну, и в кабине тоже, будет З на АЛСН. Но, мне-то что? Я на них не езжу, на эти -1. На них у меня 0 на выходных завязан. А -1 даёт как раз тот маркер, который "жопой к входному" стоит и сигнализирует маневровым, что поезд приближается к станции с перегона и они должны ловить через оппозитную функцию информацию с него.Этот оппозит как срабатывает, надежно?
А по "минус единице" - там, наверно, 8-битный регистр, и получается при чтении АЛСН-ом в результате сдвига влево с переносом, что - 1 == 7.))

roman5
29.09.2021, 11:13
Только что "соорудил" таймер на светофор в Open Rails. Скриптом
Отступы надо ставить в if,while, а то не читаемо. Обычно к этому приучают на первых курсах :D

vicente
29.09.2021, 12:33
Рома пытается "уколоть" старика? :o
Мои первые курсы (они же и последние) были почти 30 лет назад. С тех пор я очень далёк от программирования - работаю совсем в другой сфере. Так что, как говорится, "всё, что ты знаешь, я давно забыл".
В общем, если есть предложения "по делу" - буду рад конкретике. Мы здесь делимся опытом, идеями, чтобы, может быть, что-то где-то когда-то получилось улучшить, а касаемо Open Rails (в курсе, что тема об MSTS ) - создать. Потому что, что-то я функционирующих сигнализаций на этом симуляторе не вижу в упор.
Оф оф

Добавлено через 15 минут
Этот оппозит как срабатывает, надежно?
Да. Срабатывает, как я отчитывался: впереди по ходу. Маневровые поездной режим ловят. Там в другом загвоздка. В Open Rails стрелки после прохода ездючины остаются в том положении, в котором эта ездюлина их проследовала. Оппозит проверяет путь, естественно, по положннию стрелок. На станциях с большим трафиком (смены локов, маневры и т.д.) может сложиться ситуация, когда ездючина выедет на манёвры, сменит направление, а маневровый "по стрелкам" схватит поездной режим . А они у меня теперь в поездном режиме не отерываются вообще на занятый путь. Да и на свободный по синему - "за что боролись, на то и напоролись". У меня так и в MSTS без всяких оппозитов работало. А в Open Rails я не от хорошей жизни им открываться не даю. Deadlock не дремлет. Открытый светофор "стопорит" стрелки и, если в MSTS входной 0 на следующий 2 прокатывает "на ура", Open Rails такое не любит. Он считает, что если были условия на открытие сигнала - значит он "по делу" открыт. И спокойно резервирует секции для ездючин через закрытые светофоры. А сценаристов как заставить уводить точки разворота с главного хода? Полетят же камни!

roman5
29.09.2021, 14:13
Мы здесь делимся опытом, идеями, чтобы, может быть, что-то где-то когда-то получилось улучшить, а касаемо Open Rails (в курсе, что тема об MSTS ) - создать. Потому что, что-то я функционирующих сигнализаций на этом симуляторе не вижу в упор.

Я так понял, основное - реализовать сигналку, чтобы в OR можно было играть сцены, написанные в мстс.
Я тут после изучения сигналки на бмо 1.8 написал сценарий, удалось реализовать следующее:
1. Скрещение в Иванцево - встречный уходит на перегон.
2. Скрещение (встречный уходит на Иванцево) и обгон в Драчеево - скрещение криво реализовано, с Костино никак не дает отправить, стрелки не по маршруту - сделал трафик, который уходит на перегон с возвратом.
3. По Костино также скрещение на проход и обгон все тем же.

Так и не понял что в Костино такое, если выехал с Иванцево, оттуда не выпускает.

vicente
29.09.2021, 14:43
MSTS?

roman5
29.09.2021, 15:28
MSTS?
Ну да, сцену только в мстс тестил.

vicente
29.09.2021, 16:17
По БМО, у меня нет 1.8 (и не хочу :D ), так что, помощник в маршруте я - никакой.

Интересно, всё-таки, с "запоминалкой" для MSTS. Если попробовать заявить две переменные, скажем, m и n . Вначале поставить безусловное равенство m = n ;, а дальше - if (условие) { n = 1;} else (другое условие) { n = 0; }, m будет "помнить" значение n когда ни одно из условий не выполняется?

roman5
29.09.2021, 16:32
m будет "помнить" значение n когда ни одно из условий не
Да, ведь присваивание до if.

float m;float n;
m=5;
n=5;

// далее какой код, меняющий n

// тут m по прежнему 5


Я правильно понял вопрос ?

Добавлено через 4 минуты
По БМО, у меня нет 1.8 (и не хочу :D )
Эхх, а я хотел узнать, как бороться с нежеланием симулятора прокладывать маршрут по узлам иногда. С сигналкой я понимаю как, я начинаю смотреть скрипт, чтобы понять почему так работает. А вот как бороться с внутренним алгоритмом прокладки маршрута не знаю.

vicente
29.09.2021, 16:46
Да. Совершенно точно.
Проблема в том, что в обычном С/С++ - всё ясно. А здесь - нужно проверять.
Я, когда тестил оппозиты, на одном из тестов не получил вполне ожидаемый результат. Причина - до if у меня 2 строки "наоборот" стояли: сначала я снимал данные со светофора, а потом - определял этот светофор. Повторюсь: скрипт - статический. Я боюсь, что не сработает это постоянное присваивание m значения n "из-под" if. Именно из-за программы.

Добавлено через 8 минут
Хотя... нет. Немного не так. Вопрос был:

(...)
float m;
float n;
(...)

m = n;
if (block_state () !=# 0)
{
state = 1;
n = 1;
}
else if (next_sig_lr (SigFn_NORMAL) ==# 1)
{
state = 3;
n = 0;
}
else
{
state = 7;
}

Когда не выполняется ни if, ни else if, будет ли m в последнем значении n?

Добавлено через 1 минуту
Особое замечание по отступам: с телефона их съедает сайт, а мне недосуг рисовать. Так что... с Вами наши извинения :D

roman5
29.09.2021, 16:58
Когда не выполняется ни if, ни else if, будет ли m в последнем значении n?

В m будет то значение, которое в нее сохранили последний раз, оно не изменится, если позже поменяешь значение n. У нас тут нету ни ссылок, ни указателей, обычные переменные, в которые "по значению" сохраняются.

Кстати еще по стилю скриптов, вместо цифр 0,1,2 стоит писать зарезервированные константы, то есть тут:
if( block_state() != #0) пишем вместо 0 константу Block_clear. По поводу state тоже самое.
А то такой скрипт читаешь и нужно лезть в документацию, вспоминать в каком порядке там идут эти константы.

Кстати а чему изначально тут (...) эти переменные заданы. Они ведь там инициализируются ? Спрашиваю, чтобы понимать смысл сохранения перед if.

vicente
29.09.2021, 18:00
Это я так коряво пытался обозначить, что там пропущееы заявления и это кусок скрипта (и так понятно, да, больше не буду... ;)

Кто-нибудь из вас может проверить эту байду в MSTS? Позязя...

Добавлено через 42 минуты
А я, для себя, "как только, так и сразу" проверю в Open Rails. Если будет запоминать - возможно, это решит мою проблему с таймерами при загрузке игры

КЕ
29.09.2021, 19:40
... Если попробовать заявить две переменные, скажем, m и n . Вначале поставить безусловное равенство m = n ;, а дальше - if (условие) { n = 1;} else (другое условие) { n = 0; }, m будет "помнить" значение n когда ни одно из условий не выполняется?


А потом, обновляя аспекты, сим "пройдёт" по скрипту, и всё снова сбросится!:mad:
Но проверить сейчас не могу...
Кстати еще по стилю скриптов, вместо цифр 0,1,2 стоит писать зарезервированные константы, то есть тут:
if( block_state() != #0) пишем вместо 0 константу Block_clear
Так - и писали всегда. Цифрами только аспекты.

vicente
29.09.2021, 20:17
А потом, обновляя аспекты, сим "пройдёт" по скрипту, и всё снова сбросится!:mad:
Но проверить сейчас не могу...
Обнуляться-то почему? "Заява" идёт без присвоения значения. В этом - суть.
float n;
а не
float n = 0;

КЕ
29.09.2021, 20:52
Было у меня что-то подобное, тоже такая переменная - не соххранялась.
Но проверим потом, конечно.

roman5
29.09.2021, 23:00
Обнуляться-то почему? "Заява" идёт без присвоения значения. В этом - суть.
float n;
а не
float n = 0;
Без присвоения ? Там ведь либо 0, либо что попало (в с++ компиляторы работают по разному: одни 0 по умолчанию ставят, другие ничего не делают). Что ты пытаешься в m закинуть из n, если в n даже не задал ничего.

vicente
30.09.2021, 06:37
Было у меня что-то подобное, тоже такая переменная - не соххранялась.
Но проверим потом, конечно.
Повторение, мать его. В Open Rails не запоминает. Как я его не "крутил". И в начало ставил, и в "хвост" и под ифами присваивал значение m = n. Задавал начальные значения (0, 5...). Фигос. Только заходит под if, где нет условия - все переменные - в 0.

Добавлено через 3 минуты
А, вот, таймер во время загрузки, похоже, отключить удастся. Один из тестов - получилось. Уже совсем перед сном. О полном успехе говорить рано, но похоже не только удастся отключить внешний триггер Open Rails, но и привязать к этому и мои новые таймеры, которые здесь публиковал.

КЕ
30.09.2021, 10:39
Что за внешний триггер?
И похоже, что переменная принимает нулевое значение при ее объявлении, и что это происходит каждый раз при "проходе" скрипта.

vicente
30.09.2021, 15:05
Что за внешний триггер?

Сигнальные функции:

Activate_Timing_Trigger (): активирует триггер по времени.

Check_Timing_Trigger (n): проверяет триггер по времени и возвращает истину, если он был установлен более n секунд назад.

Эти две функции позволяют выполнять действия с сигналами, запускаемые по времени, например фиксированная задержка по времени при открытии светофора и т. д.

Я на проходных испоьзую их для "оттяжки" на несколько секунд момента визуального переключения сигнала с разрешающего на запрещающее показание (см.мои ролики - там это есть), а на светофорах перед стрелками, как я писал раннее, оттягиваю открытие сигнала, имитируя проследлвание изостыков/сч.осей и время требуемое СЦБ на отработку маршрута перед открытием сигнала.

Добавлено через 57 минут
fHOKLFgCmNU

Добавлено через 1 минуту
Вот она - визуальная "оттяжка" момента переключения проходного с использованием вышеупомянутых функций

КЕ
30.09.2021, 15:20
И к это пишется - в конфиге, или еще где-то?

vicente
30.09.2021, 17:20
На втором видео - иммитация открытия светофора с задержкой из-за работы СЦБ/дежурного:
Hg5M-ETih_0

Добавлено через 14 минут
И к это пишется - в конфиге, или еще где-то?
Ничего в конфиге не пишется. В рамке в посте 807 описано: как делать в скрипте. Выбираешь какое-то положение, например, в последнем случае, я включаю триггер этот когда светофор заблокирован, проверку триггера - в условия открытия сигнала. И получается такая "няма":D

Добавлено через 20 минут
Проблема с этими триггерами - при загрузке сценария, они вообще не учитываются. То есть, если я поставил
Check_Timing_Trigger*(n) в условие, оно не будет выполняться пока игра загружается! То есть, светофор на последнем видео при "просчете" трафиков , стартующих до времени старта игрока, будет закрыт! В простых сценариях, может, это не так существенно - сценаристу нужно просто это учитывать. Там же вся движуха стартует практически вместе с игроком. Но, я ишраю по другому. У меня и в Activity Mode всё расписание проигрывается, а в Timetable Mode - там по умолчанию просчитывается всё расписание с 00:00. Поездная ситуация при старте игрока, скажем, в 7:00 у меня в Timetable была очень печальная. Всё стоит на входных/выходных, куча AI поездов не стартовала и была изгнана сцаными тряпками выброшена из симуляции. На проходных - спокойней. Там привязан не аспект, а показание. В смысле, то, что ты видешь на видео - зелёный остаётся, на самом деле светофор, как только нос ездючины поравнялся с ним, сразу же становится STOP , при этом зелёный свет горит ещё 5 секунд.

Добавлено через 14 минут
Вторая проблема, для меня, во всяком случае - таймер этот можно использовать только единожды в сигнальной голове. Он один. В коде самой игры есть clock , он себе бежит, первой функцией мы просто включаем секундомер и таймер считает "с того момента". Я не могу его дважды стартовать- второй старт собъёт мне условие первого. То есть, оба "таймера" включатся. Возможно, теоретически, можно поставить в двух условиях, но эти условия должны "не соприкасаться," друг с другом. Мне лично, это не подходит. Да, и не могу себе представить, что кому-то где-то удастся так разделить работу сигнальной головы.

Добавлено через 44 минуты
А, хочется "няшности"! :o Чтобы и то, что на первом видео и на втором, работало на одном светофоре! Касаемо входных, у меня стоит 45 секунд, плюс - каждый маневровый имеет свой триггер не 15 секунд (в нынешней версии, грядёт коренная переделка всей логики - все Main-светофоры будут работать по-другому), получается на входном - минута, 1:15 и т.д. - зависит от количества маневровых на пути сервиса и положения стрелок.выходные - 20 секунд (я уже писал, что в идеале - сделать "птички" в настройках светофора с разным временем, но где взять время на всё это?). К этому всему нужно "присобачить" delay на смене показания, когда ездючина проезжает маркер... Вот здесь и пригодится тот "таймер" внутри скрипта, что ч на днях здесь написал "онлайн" :p Причём, "моих" таймеров можно пихать в скрипт сколько угодно. :russian:

vicente
30.09.2021, 22:24
Константин, а ты не пробовал "впаривать" USER5, USER6 и так далее? Вы не проверяли это дело с Игорем, случайно?

КЕ
30.09.2021, 22:57
Нет, не тестили, но можно смело рискнуть!:D
Вот 7-ю "Винду" до ума доведу, и начну испытания.;)

vicente
01.10.2021, 13:04
Да, не заморачивайся! Кужувцы, мне кажется, только 4 впихнули, да и то - в Документации указали мол, хз: будет работать или нет, так как сами не тестировали это дело. Да, и нафиг они нужны? Есть 6 (вместе с Gradient и Number) должно хватить "за глаза".
Вообще, всё это - мелочи. Есть проблемы куда серьёзнее, удовлетворительного решения которым я не вижу.

КЕ
01.10.2021, 14:48
...
Loading TRK TDB SIGCFG DAT ACT RDB CARSPAWN SIGSCR

Warning: Incomplete crossover : indices 578 and 586

Warning: Incomplete crossover : indices 239 and 237

ENV SIGCFG SIGCFG TTYPE
...
ORTS написал это в лог. Что это такое - это к сигнализации относится?

vicente
01.10.2021, 15:29
Нет. Это относится к БД путей. Кроссовер - это "глухое" пересечение. Хз, если честно, что они от них хотят. У меня 3 таких сообщения на маршруте. Я нашёл эти кроссоверы - все т.н. ложные, которые я ваял вручную. Причём, таких "ложных" кроссоверов у меня на маршруте гораздо больше, в сим ругается только на три. Я забил. Ругается, ну и мать его так. Это ничему не мешает, по крайней мере, у меня.

Добавлено через 9 минут
Поверь мне, ты не хочешь видеть мой лог :rofl::rofl::rofl:

Злостный оффтоп под спойлером :crazy:

TT File : C:\Train Simulator\ROUTES\CUSTOM_2\ACTIVITIES\OPENRAILS\Mon day.timetable_or


Information: Skipped unknown notch type EngineBrakesControllerRelease in C:\Train Simulator\Trains\trainset\UZ_VL80k-148\uz_vl80k-148a.eng:line 575

Information: Skipped unknown notch type EngineBrakesControllerApply in C:\Train Simulator\Trains\trainset\UZ_VL80k-148\uz_vl80k-148a.eng:line 576

Information: Skipped unknown notch type EngineBrakesControllerApply in C:\Train Simulator\Trains\trainset\UZ_VL80k-148\uz_vl80k-148a.eng:line 577

Information: Skipped unknown notch type EngineBrakesControllerApply in C:\Train Simulator\Trains\trainset\UZ_VL80k-148\uz_vl80k-148a.eng:line 578

Information: Skipped unknown notch type EngineBrakesControllerApply in C:\Train Simulator\Trains\trainset\UZ_VL80k-148\uz_vl80k-148a.eng:line 579

Warning: Expected end of file in C:\Train Simulator\Trains\trainset\zdsEMU_ER9T-732\zdsEMU_ER9T-732_01_part_or.eng:line 41

Warning: Expected end of file in C:\Train Simulator\Trains\trainset\zdsEMU_ER9T-732\zdsEMU_ER9T-732_09_part_or.eng:line 41

Warning: Expected end of file in C:\Train Simulator\Trains\trainset\zdsEMU_ER9T-731\zdsEMU_ER9T-731_01_or_volohov.eng:line 41

Warning: Expected end of file in C:\Train Simulator\Trains\trainset\zdsEMU_ER9T-672\zdsEMU_ER9T-672_01_or.eng:line 41

Warning: Expected end of file in C:\Train Simulator\Trains\trainset\zdsEMU_ER9T-672\zdsEMU_ER9T-672_09_or.eng:line 41

Warning: Expected end of file in C:\Train Simulator\Trains\trainset\zdsEMU_ER9T-731\zdsEMU_ER9T-731_01_or_amber.eng:line 41

Warning: Expected end of file in C:\Train Simulator\Trains\trainset\zdsEMU_ER9T-732\zdsEMU_ER9T-732_01_amb_or.eng:line 41

Warning: Expected end of file in C:\Train Simulator\Trains\trainset\zdsEMU_ER9T-732\zdsEMU_ER9T-732_09_amb_or.eng:line 41

Warning: Expected end of file in C:\Train Simulator\Trains\trainset\zdsEMU_ER9T-732\zdsEMU_ER9T-732_01_vol_or.eng:line 41

Warning: Expected end of file in C:\Train Simulator\Trains\trainset\zdsEMU_ER9T-732\zdsEMU_ER9T-732_09_vol_or.eng:line 41

TTROUTES:185 TTTRAINS:515

Information: Invalid passing path defined for train 8 at section 1109 : overlaps with other passing path

Information: Invalid passing path defined for train 28 at section 4674 : overlaps with other passing path

Information: Invalid passing path defined for train 37 at section 4674 : overlaps with other passing path

Information: Invalid passing path defined for train 43 at section 4674 : overlaps with other passing path

Information: Invalid passing path defined for train 49 at section 4674 : overlaps with other passing path

Information: Invalid passing path defined for train 60 at section 4674 : overlaps with other passing path

Information: Invalid passing path defined for train 233 at section 3290 : overlaps with other passing path

Information: Invalid passing path defined for train 251 at section 3290 : overlaps with other passing path

Information: Invalid passing path defined for train 266 at section 3290 : overlaps with other passing path

Information: Invalid passing path defined for train 280 at section 3290 : overlaps with other passing path

Information: Invalid passing path defined for train 292 at section 3290 : overlaps with other passing path

Information: Invalid passing path defined for train 515 at section 4667 : overlaps with other passing path

Information: Invalid train activation command: train 0-2051:monday not found, for train S-2051_rev:monday

Information: Invalid train activation command: train 0-2053:monday not found, for train S-2053_rev:monday

Information: Invalid train activation command: train 0-2053:monday not found, for train S-2055_rev:monday


Run AI : 512