Форум Trainsim

Форум Trainsim (http://www.trainsim.ru/forum/index.php)
-   MSTS - Маршруты (http://www.trainsim.ru/forum/forumdisplay.php?f=19)
-   -   Сигнализация: конфигурация и скрипты (http://www.trainsim.ru/forum/showthread.php?t=13819)

КЕ 28.09.2021 17:15

Применительно к сигналке "expected" что означает?

vicente 28.09.2021 18:28

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

[size="1"][color="Silver"]Добавлено через 14 минут[/color][/size]
Только что "соорудил" таймер на светофор в 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 - может быть офигительная вещь. В идеале, конечно, привязать это к флагам... и выбирать птичкой в редакторе: большая станция, маленькая станция и т.п.

[size="1"][color="Silver"]Добавлено через 6 минут[/color][/size]
Вот скрипт-черновик:
[SPOILER]
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;
}
[/SPOILER]

КЕ 28.09.2021 20:11

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

[B]store_lvar(time, 0)
sigid = next_sig_id (SIGFN_NORMAL);
store_lvar(time, wait_time);
train_requires_next_signal(sigid,1);[/B]

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

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

vicente 28.09.2021 21:05

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

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

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

КЕ 28.09.2021 21:18

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

vicente 28.09.2021 22:12

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

vicente 29.09.2021 08:55

[QUOTE=vicente;602397]
... "соорудил" таймер на светофор в Open Rails.
[/QUOTE]
В общем так.
"Клинические исследования" (пока) показывают следующее:
Фигня эта работает и при загрузке игры. Проблема в том, что такой "таймер" не привязан к игровому времени и, очевидно, при загрузке скрипт "пробегает" процедуру вычисления таким образом, что относительно игрового времени проходят долгие минуты, возможно даже десятки минут, пока он срабатывает и переходит в следующий блок. Это сильно тормозит события, поезда долго ожидают своих сигналов, задерживают следующие поезда в расписании которые должны появиться в тех же точках старта, а 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

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

roman5 29.09.2021 11:13

[QUOTE=vicente;602397]
Только что "соорудил" таймер на светофор в Open Rails. Скриптом [/QUOTE]
Отступы надо ставить в [B]if[/B],[B]while[/B], а то не читаемо. Обычно к этому приучают на первых курсах :D

vicente 29.09.2021 12:33

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

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

roman5 29.09.2021 14:13

[QUOTE=vicente;602414]Мы здесь делимся опытом, идеями, чтобы, может быть, что-то где-то когда-то получилось улучшить, а касаемо Open Rails (в курсе, что тема об MSTS ) - создать. Потому что, что-то я функционирующих сигнализаций на этом симуляторе не вижу в упор.
[/QUOTE]
Я так понял, основное - реализовать сигналку, чтобы в OR можно было играть сцены, написанные в мстс.
Я тут после изучения сигналки на бмо 1.8 написал сценарий, удалось реализовать следующее:
1. Скрещение в Иванцево - встречный уходит на перегон.
2. Скрещение (встречный уходит на Иванцево) и обгон в Драчеево - скрещение криво реализовано, с Костино никак не дает отправить, стрелки не по маршруту - сделал трафик, который уходит на перегон с возвратом.
3. По Костино также скрещение на проход и обгон все тем же.

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

vicente 29.09.2021 14:43

MSTS?

roman5 29.09.2021 15:28

[QUOTE=vicente;602417]MSTS?[/QUOTE]
Ну да, сцену только в мстс тестил.


Текущее время: 17:07. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
© 2001-2019, Администраторы и разработчики Клуба Trainsim