Форум 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)

vicente 02.05.2020 13:51

[QUOTE=КЕ;593009]
Как он работает?[/QUOTE]
Если блок свободен:
На следующий 0 даёт 1;
Остальные аспекты дублирует.
Если блок занят (JN_OBSTRUCTED) - 0;
Если блок занят (OCCURRED):
Выходной открыт любым показанием - 0;
Выходной закрыт - 2;

Вроде, всё назвал. С телефона сейчас.

[QUOTE=КЕ;593009]Это если на выходном STOP?[/QUOTE]

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

КЕ 02.05.2020 14:00

А этот маркер не мешает локомотивной сигнализации?

vicente 02.05.2020 14:14

Нет. Он же дублирует выходной. На 2D кабинах я "подправил" себе АЛСН под Open Rails - на 0 у меня КЖ, на 1 - тоже. Остальные аспекты дублируются, так что, всё оk. Даже какую-то трёхмерную кабину так переделал "методом тыка"... или две. Не помню уже. ЭРка, вроде, какая-то и ЧС4т от Spiritа. Давно не гоняю уже. Тупо любуюсь сценарием, лично не участвуя в нём.
:D

КЕ 02.05.2020 14:56

О, не видел такие кабины... Рулил только в трехмерной для 2ТЭ10М.
Где их скачать?

vicente 02.05.2020 15:29

Я не помню уже. Давно это было. Но, руками точно ковырялся. Возможно, прикручивал РТС-овские кабины. Не помню, честно. Сейчас не до кабин.

КЕ 02.05.2020 18:41

РТС-ную можно, да только ничего там работать не будет, поедем по монитору пути. ))

vicente 02.05.2020 20:00

[QUOTE=КЕ;593009]Как он работает?[/QUOTE]
[B]Логика маневрового[/B]:
Если блок не свободен, - аспект 0;
В остальных случаях при свободном блоке - дублирование аспекта маркера РЦ. Также учитываются линки.
Я выше выкладывал его полный скрипт.

[B]Входной сигнал[/B]:
Если блок не свободен, а также если блок свободен, но следующий (маневровый) - 0 или 2 - аспект 0;
В остальных случаях - логика исходит из следующего сигнала. Если маневровый 1, входной будет 3 или 4 исходя из линка, далее при аспектах выше 2 маневровый дублирует выходной, так что там - обычная конвенциональная логика.

[size="1"][color="Silver"]Добавлено через 1 час 8 минут[/color][/size]
Такая логика маневрового позволяет ставить их несколько один за другим. Также у меня есть маневровые с логикой как в маркере РЦ как самостоятельного сигнала - вначале именно такие стояли на маршруте, а маркеров не было, пока, как я уже говорил, разработчик сигнализации Open Rails не "ослепил" сигналы, ограждающие точки. Маршрут огромный, так что, где-то они у меня ещё валяются на каких-то станциях. Там ставил оба типа маневровых. Последним был тот,,который с логикой маркера, остальные - те, что я описал.
Также есть станции "классические" - входной и выходной. Там другие светофоры, почти не отличающиеся от оригинала от Timas.

[B]SNCA[/B] маневрового и РЦ в [B]Open Rails[/B] - "-1". Это позволяет не завышать параметр у остальных светофоров. В [B]MSTS[/B] эта логика тоже работает. Но, там, как известно, [B]SNCA[/B] берется самый высокий в конфигурации. У меня в [B]MSTS[/B]-овском варианте стоит "7", но это зависит от маршрута. В смысле, сколько маневровых на больших станциях стоят один за другим, а также - от устройства станций с маневровыми и маршрутными светофорами.

КЕ 02.05.2020 20:26

[quote]пока, как я уже говорил, разработчик сигнализации Open Rails не "ослепил" сигналы, ограждающие точки[/quote]
Это когда сигнал в STOP - он не читает, что за ним дальше?

vicente 02.05.2020 21:49

Не когда STOP, a когда он !enabled. Не определяет route_set (). И состояние блока - возвращает всегда BLOCK_JN_OBSTRUCTED. Насчет сигналов - надо потестить. Я не использую это

[size="1"][color="Silver"]Добавлено через 11 минут[/color][/size]
В смысле, нет такой ситуации, когда мне маневровым [I]!enabled[/I] нужно знать состояние следующего сигнала.

[size="1"][color="Silver"]Добавлено через 37 минут[/color][/size]
Тем более, в Open Rails, где [I][B] enabled ()[/B][/I] работает отлично от MSTS

vicente 03.05.2020 15:47

Эх, где бы я ещё так славно, долго, а главное - [B]качественно[/B] потрахался, как не с сигналкой в симуляторе!
Короче, долбился я, долбился с этим маневровым показанием - со временем даже то, что, вроде, работало из функций, начало "глючить". Маневровый перестал "видеть" оппозит и т.п. Думаю, я "нагромоздил" там условий и есть какие-то взаимоисключающие. В общем, переписываю "с нуля" скрипт проходного. :D

[size="1"][color="Silver"]Добавлено через 2 минуты[/color][/size]
Дал ему
[B]if (block_state ==# BLOCK_JN_OBSTRUCTED...[/B]
А ниже:
[B]if (block_state !=# BLOCK_CLEAR...[/B]
И он первое не выполняет

КЕ 03.05.2020 17:50

То есть даже без [B]else[/B] перед [I][B]if (block_state !=# BLOCK_CLEAR...[/B][/I] не проверяет?

vicente 03.05.2020 23:57

Да, там сам черт ногу сломит - разбираться почему не сработало. У меня первый проходной (ну, в смысле, вообще все проходные) - довольно ёмкий сигнал. Первым проходным он становится через флаг. Если этот флаг включен и светофор [I]!enabled[/I] - он 1 (на однопутках первый проходной - 2 - не суть - на оба этих аспекта выходные были запрограммированы давать маневровый сигнал (сейчас я изменил условие с новой функцией - я показывал). Ну, и под этим - целый блок с показаниями при аспекте 1, согласно занятости перегона. Плюс учтена возможность давать ЖМ и ЗМ, потому что первый проходной может быть и предвходным одновременно.
Затем идёт блок для обычного движения, когда светофор [I]enabled[/I]. Но само условие [I]enabled[/I] я, в своё время, не вписывал - не нужно было. И весь блок идёт просто под [B]else if (...[/B].
Подозреваю, что этот [B]store_lvar[/B] не в любое место скрипта можно запихнуть.
Ну, и условия эти...
[B]if (block_state ==# BLOCK_JN_OBSTRUCTED... [/B] стоит в первом блоке, под [I][B]!enabled[/B][/I], a [B] if (block_state !=# BLOCK_CLEAR... [/B] - в блоке под [B]else if (...[/B]
Может, в этом проблема, я хз.
Так как скрипт всё равно переписывать, копать дальше не вижу смысла

[size="1"][color="Silver"]Добавлено через 1 час 4 минуты[/color][/size]
Упс... прошу прощения. Там было не [B]else if (...[/B], a просто [B]else (...[/B], a уже внутри, отдельно , было [B]if (...[/B]
Короче, многоэтажка, родившаяся в тестах и не приведенная в "товарный вид" потому что... ну, работало и так... :D

[size="1"][color="Silver"]Добавлено через 4 минуты[/color][/size]
Потихоньку начинаю стороить проходной. Вот "тело":
[QUOTE] next_state = next_sig_lr (SIGFN_NORMAL);

state = SIGASP_CLEAR_2;
direction = this_sig_lvar (1);

if (block_state() ==# BLOCK_OCCUPIED)
{
state = SIGASP_STOP;
}
else if ((next_state ==# SIGASP_STOP) || (next_state ==# SIGASP_STOP_AND_PROCEED) || (next_state ==# SIGASP_RESTRICTING))
{
state = SIGASP_APPROACH_1;
}
draw_state = def_draw_state (state);
if (next_state ==# SIGASP_APPROACH_2)
{
draw_state = 4;
}
else if ((next_state ==# SIGASP_APPROACH_3) || (next_state ==# SIGASP_CLEAR_1))
{
draw_state = 5;
}
else if ( direction ==# 1)
{
draw_state = 6;
}
if (!enabled && has_number_plate)
{
if (block_state ==# BLOCK_JN_OBSTRUCTED)
{
state = SIGASP_RESTRICTING;
store_lvar (1,1);
}
else
{
store_lvar (1,0);
}
}[/QUOTE]

[B]draw_state = 6[/B] - [B]не горит[/B]. Потом можно будет через функцию "гасить" весь перегон.

Скрипт полностью рабочий. Забирай :drinks:

[size="1"][color="Silver"]Добавлено через 2 минуты[/color][/size]
Пока оставлю его так. Пойду к маневровому, "ловить" этот самый [I][B]direction[/B][/I] :crazy:

КЕ 04.05.2020 10:52

Думаю все-таки точнее потестить с нулевыми стрелками границы станции [S]и обратной головой на входном[/S].
Нет, не буду, это только путаницу создаст в горловине...

vicente 04.05.2020 15:22

Вот как это работает на тестовом отрезке:
 
Перед тестами на маршруте (неизвестно когда :cool: )

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

[YOUTUBE="Маневпрвый KRN25"]1uSa7pqN0_w[/YOUTUBE]

Табло со стороны перегона показывает когда запоминается переменная, отвечающая за направление:
[QUOTE]
{
[B]state = SIGASP_RESTRICTING[/B];
store_lvar (1,1);
} [/QUOTE]

[size="1"][color="Silver"]Добавлено через 47 минут[/color][/size]
[SPOILER]
Костя, ты говорил о 3d кабинах...
Нашёл у себя на канале старое видео. Сигнализации тоже касается, я там барабан "ковырял руками" - в конце видео обрати внимание: что показывает АЛСН на красный :p

[YOUTUBE="Зd кабина в Open Rails"]QbZjfQ1UmqE[/YOUTUBE]
Ха-ха.. сам лок - попробуй найди ещё.. в моём-то бардаке :crazy:
[/SPOILER]

КЕ 04.05.2020 16:36

Идеально сработано! ))
[Quote]
{
state = SIGASP_RESTRICTING;
store_lvar (1,1);
}[/quote]
Есть еще примеры использования этих новых переменных? Смысл чисел в скобках?..
[quote]что показывает АЛСН на красный[/quote]
Хорошо показывает!:drinks:
Но всё остальное горит жёлтым...


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

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