Форум 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 04.05.2020 17:47

Это первый раз, когда я использовал их. Потому и много времени взяло. Пришлось посовокупляться - я не мог быть уверен: когда данные передаются, когда по каким-то причинам нет, а когда я "лажаю" с условиями в программе. Самое трудное было сбросить условия , когда лок проехал сигнал. Я там долго "крутил". Три головы, одна сбрасывает, две остальные тут же ставят эти переменные опять. Я ещё думал оставить белый маневровый гореть пока поезд не "коснется" маркера РЦ... мечтатель, блин.


Первая циферь в скобках - "разряд", вторая - само значение. Можно запоминать их сколько угодно! Под каждым "разрядом" - своя переменная. В смысле, под (1,Х) - одни переменные, (2,Х) - другие и т.д.

[size="1"][color="Silver"]Добавлено через 2 минуты[/color][/size]
[QUOTE=КЕ;593065]Идеально сработано! ))
[/QUOTE]
Надо ещё "доработать напильником", чтобы белый не зажигался. Поезд в этот момент за 2 блок-участка и не видит этого, конечно. Но, остальные - видят.

[size="1"][color="Silver"]Добавлено через 1 минуту[/color][/size]
[QUOTE=КЕ;593065]
Но всё остальное горит жёлтым...[/QUOTE]
Неее...
Там все аспекты работают. Просто на видео он на 2Ж и Ж едет только.

КЕ 04.05.2020 17:51

Олег, из твоего проходного:
[B]direction = this_sig_lvar (1);[/B]
- почему здесь одна цифра?
И сами числа - как в аспектах, от 0 до 7, или неважно?
[SPOILER][quote]...оставить белый маневровый гореть...[/quote]
Это только с маневровыми К-Б:
[B]if (enabled && block_state() != BLOCK_JN_OBSTRUCTED ) state = 2; // белый маневровый
else state = 0;[/B]
Белый сменяется на красный, когда сервис уходит за узел.[/SPOILER]

vicente 04.05.2020 19:20

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

[size="1"][color="Silver"]Добавлено через 1 час 11 минут[/color][/size]
[QUOTE=КЕ;593069]
Это только с маневровыми К-Б:
[B]if (enabled && block_state() != BLOCK_JN_OBSTRUCTED ) state = 2; // белый маневровый
else state = 0;[/B]
Белый сменяется на красный, когда сервис уходит за узел.[/QUOTE]
Ты в Open Rails это давно пробовал?
ИМХО, работать [B]не будет[/B]. В смысле, сигнал перекроется сразу, если он NORMAL

КЕ 04.05.2020 19:25

Да, это давно было. Я такими маневриками давно не занимался...
Хрена се... перекрывается и гаснет вообще на оба глаза, гад...
А, все, исправил. В конфиге вместо STOP - S.A.P. был.

vicente 04.05.2020 20:36

По определению, в Open Rails светофор позади сервиса - [I]!enabled[/I] , и если он ограждает узлы, функция [I]block_state[/I] не проверяется. У такой сигнальной головы она [B]всегда[/B] будет возвращать [B]BLOCK_JN_OBSTRUCTED[/B]

vicente 04.05.2020 23:57

Вот упрощённый скрипт маневрового.
[SPOILER]
next_state = next_sig_lr (SIGFN_NORMAL);
interval = opp_sig_id (SIGFN_NORMAL);
main = id_sig_lvar(interval, 1);
shunt = this_sig_lvar (1);

if (!enabled || block_state() !=# BLOCK_CLEAR || !route_set () )
{
state = 0;
if (!enabled && (this_sig_lr (SIGFN_NORMAL) <# 1))
{
store_lvar (1,0);
}
}
else
{
state = next_state;
if (main ==#1)
{
store_lvar (1,1);
}
}
draw_state = def_draw_state (state);
if ((state ==# 1) && (shunt ==# 0))
{
draw_state = 1;
}
else if ((state ==# 2) && (shunt ==# 1))
{
draw_state = 0;
}
else if ((state ==# 0) && (this_sig_lr (SIGFN_NORMAL) ># 0))
{
draw_state = 2;
}
[/SPOILER]
Это одна линкованная сигнальная голова. На все линки - тот же скрипт. Один-в-один.

Надеюсь, это поможет сообществу. Для меня это не окончательный вариант. Я уже говорил о "напильнике". Кроме того, эта разработка для однопутного перегона, оборудованного двусторонней автоблокировкой. На многопутных будет по-другому. Кроме того, со временем в планах - маршрутные и сложные по строению станции... это вообще будет жесть.
(Если честно, я даже боюсь взглянуть на скрипт маршрутного :D). Но, сначала - [I][B]Timetable Mode[/B][/I].
Посему, на том откланиваюсь... пока... и возвращаюсь к сценариям.
До новых встреч! :drinks:

КЕ 05.05.2020 00:20

Но для чего маневровому линки? Прямой или боковой путь - показание одинаковое. Я что-то пропустил??

vicente 05.05.2020 00:41

Показания одинаковые. Скорости - разные :)

[size="1"][color="Silver"]Добавлено через 9 минут[/color][/size]
В принципе, на сегодняшний момент в Open Rails есть сигнальные головы SPEED, но, они несовместимы с MSTS. На новых маршрутах их можно расставить. Я не буду перерасставлять сигналы на своём маршруте, длина которого, что-то в районе 800 км только главного хода. Всё, что я делаю -всегда подразумевает то, что маршрут свой я не трогаю. Манёвры можно было и по-другому оформить. И ещё много чего поменять. Но, для меня это - "топтаться на месте".

vicente 07.05.2020 04:17

Прошу прощения. В скрипт [URL="http://www.trainsim.ru/forum/showpost.php?p=593055&postcount=507"]проходного[/URL] закралась ошибка.
Исправленный вариант под спойлером.
[SPOILER]
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 ([B](block_state() ==# BLOCK_CLEAR) &&[/B] (next_state ==# SIGASP_APPROACH_2) )
{
draw_state = 4;
}
else if (([B](block_state() ==# BLOCK_CLEAR) &&[/B] (next_state ==# SIGASP_APPROACH_3))
|| ([B](block_state() ==# BLOCK_CLEAR) &&[/B] (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)
{
store_lvar (1,1);
}
else
{
store_lvar (1,0);
}
}
[/SPOILER]
Поправка выделена. Без неё Жм и Зм будут открываться на занятый блок-участок.
Ещё раз, прошу прощения.

Как бы изловчиться и сделать вот так:
[YOUTUBE="Двусторонняя АБ"]vQlHcR7TFHs[/YOUTUBE]
:cool:
?

[size="1"][color="Silver"]Добавлено через 45 минут[/color][/size]
[YOUTUBE="Ещё дубль :o"]xkAD23p6xmY[/YOUTUBE]

КЕ 07.05.2020 09:28

А про Жм и Зм я тоже тогда подумал, но потом забыл спросить...
Первое видео - это МСТС?
Мне бы тоже хотелось, чтобы попутные проходные сзади горели...

vicente 07.05.2020 13:30

Оба видео - ОР.
У в старой версии горят впереди поезда по SNCA, ререкрываемый после проезда поезда горит красным по не свободному блоку, потом он "желтеет" , а уже затем - гаснет. Но, что-то там начало "глючить" и, нет-нет, предвходные горели желтым даже против движения.

[SPOILER]Блин, "затягивает" сигналка... :confused:
Хотел сценарий в Timetable "продвигать" , а "увяз" здесь. [/SPOILER]

Я поставил на маршруте новые светофоры, которые разоаботал , пришлось "полетать" в редакторе и добавить на двухпутной односторонней АБ обратно-глядящие головы на проходных , чтобы маневровые работали, потому что я манёвры всегда в сторону перегона на правильный путь строю. Потом подумал про однопутку, да и на двухпутном, в случае , когда сервис по неправильному пути, я так понял, правильное направление надо гасить.

[size="1"][color="Silver"]Добавлено через 6 минут[/color][/size]
Кроме "глюка" с желтым предвходным на двухсторонней АБ и того, что всё направление не горит (хотя, в принципе, длинных перегонов таких у меня нет), меня не устраивает, что, когда на перегоне никого нет и никто не расчищает себе маршрут, проходные не горят ни в одном из направлений.
Вот я и подумал: раз теперь есть функция запоминания, поправить саму работу светофоров и даже запомнить последнее рабочее направление

[size="1"][color="Silver"]Добавлено через 1 час 10 минут[/color][/size]
Короче...
Направление запоминать я их "научил" (чуть позже будет ролик). В смысле, остаётся гореть то направление, по которому прошел последний сервис. Но, проблем осталось - вагон и маленькая тележка!
Во-первых, "изначально" , то есть, в начале сцены, пока ни один поезд не прошел, горят оба направления.
Во-вторых, когда происходит смена направления, от открытия выходного и пока сервис не заходит за обратный маневровый, также горят оба направления - тоже не айс.
Но, если эти два пункта ещё можно решить, то с третьим - ума не приложу: что делать. Дело в том, что...
В-третьих, чертов Open Rails учитывает пути сервисов и длину поездов. Таким образом, скажем, при выезде локомотива в маневровом режиме и смене направления его движения между входным и маневровым, симулятор может вполне выпустить встречный сервис до входного. Я тестил этот момент когда SNCA проходных был 4 - скрипт "ловил" направление выезжающей ЧМЭ-ухи и гасил направление и перед встречным горели только 4 светофора. Ночью я "добил" запоминание, в частности, изменив параметр SNCA на "-1" . Что сейчас со встроенным направлением происходит в этом случае, пока не тестил. Возможно, придётся на этот случай разрабатывать блокировку.
Костя, ты работал с функцией [B][I]dist_multi_sig ()[/I][/B]? Знаешь как она [B]точно[/B] работает в конце участка проверки? Если я буду проверять весь перегон до маневрового, "повесив" ограничитель на него, проверка будет включать сам маневровый?

КЕ 07.05.2020 13:46

[QUOTE=vicente;593148]...Костя, ты работал с функцией [B][I]dist_multi_sig ()[/I][/B]? Знаешь как она [B]точно[/B] работает в конце участка проверки? Если я буду проверять весь перегон до маневрового, "повесив" ограничитель на него, проверка будет включать сам маневровый?[/QUOTE]
Что-то пробовал давно; но сейчас не помню ничего...
А что за ограничитель?

vicente 07.05.2020 14:09

В эту функцию вводится два параметра [B]SigFn_Type[/B]
Классическим вариантом по докумнтаци Kuju MSTS является [B]dist_multi_sig_Xr*(SigFn_NORMAL, SigFn_DISTANCE)[/B] . Дословно это работает, как "ищи наиболее/наименее ограничивающий аспект сигнальных голов первого указанного типа , пока не встретится сигнальная голова второго типа". Это и есть ограничитель. Функция возвращает соответствующий аспект на заданном участке пути.

КЕ 07.05.2020 14:15

Вспоминаю... я так понял, что если, например, я эту проверку сделаю в первом проходном, то она вернет аспект входного светофора (стоящего перед узлом) в конце всей цепочки проходных. Так?

vicente 07.05.2020 15:46

Если проверять [B][I]_mr[/I][/B] и перегон свободен - то да. Но, я запутался. Нельзя так делать. Нельзя вмешиваться в уже готовый маршрут скриптом. Вообще, там бред какой-то происходит. [B]Сигнал должен блокироваться симулятором[/B]! Я там в мини сцене своей начудил и свёл сим с ума :crazy:
Сервис игрока стартует на пути трафика "лоб в лоб". Из-за того, что у игрока - точка разворота за маневровым, сим пытается "разрулить" патовую ситуацию и "протолкнуть" манёвры перед идущим навстречу поездом. А, бред заключается в том, что вместо того, чтобы остановить маневровый на выходном, а поезд на входном на "вечный красный", сим выпускает игрока при любом раскладе. В последних ночных тестах маневровому вообще горел красный 0. Я включал автопилот и ЧМЭ-уха преспокойно этот красный проезжала.

[size="1"][color="Silver"]Добавлено через 3 минуты[/color][/size]
Мне кажется, что если я поставлю поезду альтернативный [B]path[/B] по станции, всё заработает и маневровый будет стоять у заблокированного выходного.

[size="1"][color="Silver"]Добавлено через 7 минут[/color][/size]
Через пол-часа расчехлю ноут и попробую.

[size="1"][color="Silver"]Добавлено через 51 минуту[/color][/size]
[IMG][URL=http://piccy.info/view3/13793512/317d6e77046f1cf7c085f3f7b01ea5ce/orig/][IMG]http://i.piccy.info/i9/a10e0acc87381ebfaf57aa08997ed1d8/1588852096/92888/1373151/RunActivityLAA_2020_05_07_14_27_04_54_800.jpg[/IMG][/URL][URL=http://i.piccy.info/a3c/2020-05-07-11-48/i9-13793512/763x559-r][IMG]http://i.piccy.info/a3/2020-05-07-11-48/i9-13793512/763x559-r/i.gif[/IMG][/URL][/IMG]
Да, с блокировкой нормально всё. Неправильный старт сервиса. Я уже писал об этом. Правильно стартовав,описанных мной прежде ситуаций можно и нужно избегать.


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

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