Форум 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 29.10.2016 21:45

Да.
На всех маневровых, если есть точка разворота за ними ( с пути на путь) ставлю точки ожидания "для реалистичности". Двухсекционникам от минуты до 2-х, маневровым локомотивам или составам 10-30 сек, чтобы сразу не возвращались.
Думаю, я понял: к чему ты клонишь. Именно поэтому сейчас снова пытаюсь "пробить" маневровый режим (не получается пока - переменные не хотят запоминать себя). У меня прописано маневровому на занятый путь не открываться, если следующий светофор открыт. То есть, за поездом маневровый сервис не поедет, не сцепится с ним и т.п. Но, эта связка ненадёжна. Я перегоняю локомотивы по главным путям станций, на них останавливаются только пассажирские и пригородные с открытыми выходными. Но, хочется универсальности, потому что, если выходной пассажирскому будет заблокирован, маневровый откроется.

КЕ 29.10.2016 22:16

[quote]переменные не хотят запоминать себя[/quote] Да, всё "сбрасывается", по крайней мере у меня, хотя в МСТС работало...
[quote]маневровому на занятый путь не открываться, если следующий светофор открыт. То есть, за поездом маневровый сервис не поедет, не сцепится с ним и т.п. Но, эта связка ненадёжна. Я перегоняю локомотивы по главным путям станций, на них останавливаются только пассажирские и пригородные с открытыми выходными. Но, хочется универсальности, потому что, если выходной пассажирскому будет заблокирован, маневровый откроется.[/quote]
Была мысль ставить специальные маркеры границы станции - если путь сервиса за них не заходит, то по !enabled выдают нужный управляющий аспект. Но то же самое можно считывать с уже имеющихся светофоров, только надо думать, как... Вот твой случай как раз и показал ненадёжность всего этого.

vicente 29.10.2016 22:22

Да, это недостаток. Но, что сделано - то сделано. У меня маршрут почти 500 км, на всех станциях они стоят и работают. И сценарии только я делаю, так что эта ситуация принимается мной во внимание. Сигнализацию с того, что есть на сегодняшний день, я могу только улучшать. Не получается - будет работать так дальше.
Скрипт как-то странно работает в ОР. Придётся все функции с самого начала проверять на тестовом

КЕ 29.10.2016 22:26

Маневровый Б-С:
[SPOILER]if ( enabled )
{ if ( ( opp_sig_lr (SIGFN_NORMAL) == 1 ) && ( next_N <= 2 ) && ( opp_D == 1 ) )
{ state = 2; draw_state = 1; } /// из горловины на станц. путь
}
else { state = 0; draw_state = 0; }[/SPOILER]
сам DISTANCE, opp_D == 1 - управляющий код в РЦ от оппозитно стоящего около входного светофора маневрового маркера, направленного на середину станции:
[SPOILER]{ state = 0; }
if ( ( block_state() == BLOCK_CLEAR ) && ( next_sig_lr (SIGFN_NORMAL) <=1 ) && ( opp_sig_lr (SIGFN_NORMAL) <=1 ) )
{ state = 1; }[/SPOILER]
Буду проверять...

vicente 29.10.2016 22:44

Ух, ты!!! Поменял на тестовом проходные на DISTANCE --- интересная штука получается. Ну-ка, какие твои выводы?

[size="1"][color="Silver"]Добавлено через 7 минут[/color][/size]
Костя, opp_sig_lr работает [B]только[/B] на попутном светофоре. То есть, это
[QUOTE]{ state = 0; }
if ( ( block_state() == BLOCK_CLEAR ) && ( next_sig_lr (SIGFN_NORMAL) <=1 ) && ( [COLOR="Blue"]opp_sig_lr (SIGFN_NORMAL)[/COLOR] <=1 ) )
{ state = 1; } [/QUOTE]
работать не будет

КЕ 29.10.2016 22:44

Как выводы??? Проходные DISTANCE? И что при этом происходит???

vicente 29.10.2016 23:02

Зависимость DISTANCE от enabled()

[size="1"][color="Silver"]Добавлено через 5 минут[/color][/size]
DISTANCE работают как enabled() пока следующий NORMAL enabled(). Но, у меня тестовый полигон очень короткий. Я как-то тестил DISTANCE - там ещё расстояния имеют значение, если пользоваться этими функциями. Поэтому, я для передачи информации ими не пользуюсь

[size="1"][color="Silver"]Добавлено через 8 минут[/color][/size]
Мысль такая.
Первый проходной после станции в противоположном направлении от маневрового (нормальное положение RESTRICTING), в случае, если едет поезд в сторону станции будет !enabled, блок "за ним" по ходу - занят. Прописать в нём особый аспект на этот случай [QUOTE] if (!enabled && (block_state() !=# BLOCK_CLEAR)){state = 1; }[/QUOTE]
Маневровый должен по if ( opp_sig_lr (SIGFN_NORMAL) == 1 ) "ловить" поездной режим и держать его до тех пор, пока сам не станет !enabled
Если условия в рамке не имело место - режим маневровый

КЕ 29.10.2016 23:05

А у меня так отдельный маневровый "датчик" работает.
А не повлияет этот проходной, если манёвры в сторону перегона? Хотя вроде не должен.
------------------------------------------------------------------
Дистансы работают. Я заехал за входной, и они все дружно загорелись жёлтым - для трафика.
"Своего" БУ не имеют.
[quote]DISTANCE работают как enabled() пока следующий NORMAL enabled()[/quote]
Спасибо, про это не знал!

vicente 29.10.2016 23:30

[QUOTE=КЕ;539237]
А не повлияет этот проходной, если манёвры в сторону перегона? [/QUOTE]
Нет. Выходной настраиваем давать на следующий 1 и 2 маневровый белый 2 и всё в ажуре. Проблема в другом. Как сохранить поездной режим?

[size="1"][color="Silver"]Добавлено через 3 минуты[/color][/size]
Лови скрипт моего маневрового :rolleyes:
(Хотя, я давал его уже на Заборе)
[SPOILER] extern float block_state ();
extern float route_set ();
extern float next_sig_lr ();
extern float this_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;


next_state = next_sig_lr (SIGFN_NORMAL);
if (route_set ())
{
state = SIGASP_STOP;
if (enabled && (block_state() ==# BLOCK_CLEAR) && (next_state ==# SIGASP_STOP))
{
state = SIGASP_STOP_AND_PROCEED;
}
else if (enabled && (block_state() !=# BLOCK_CLEAR) && (next_state ==# SIGASP_STOP))
{
state = SIGASP_RESTRICTING;
}
else if (enabled && (block_state() !=# BLOCK_CLEAR) && (next_state ==# SIGASP_STOP_AND_PROCEED))
{
state = SIGASP_RESTRICTING;
}
else if (enabled && (block_state() !=# BLOCK_CLEAR) && (next_state ># SIGASP_RESTRICTING))
{
state = SIGASP_STOP;
}
else if (enabled && (next_state ==# SIGASP_RESTRICTING))
{
state = SIGASP_RESTRICTING;
}
else if (enabled && (block_state() ==# BLOCK_CLEAR) && (next_state ># SIGASP_RESTRICTING))
{
state = next_state;
}
draw_state = def_draw_state (state);
}
else
{
state = SIGASP_STOP; draw_state = 0;
if (this_sig_lr (SIGFN_NORMAL) ># SIGASP_STOP)
{
draw_state = 2;
}
}
[/SPOILER]

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

КЕ 30.10.2016 00:07

Спасибо! Посмотрю ещё раз, подумаю завтра - может, какие идеи появятся (а то спать надо...).
[quote]Как сохранить поездной режим?[/quote]
Или наоборот, маневровый. Какие-то переменные нужны, чтобы не "сбрасывались". Например, у меня такая попытка была:
[SPOILER]///////////////////// УПРАВЛЯЮЩИЙ МАНЕВРОВЫЙ МАРКЕР 1, светофор /////////////////////////////////////////////////////////////////////////////////////
SCRIPT TK_M1-V
extern float enabled;
extern float block_state ();
extern float next_sig_lr ();
extern float opp_sig_lr ();
extern float state;
///{ state = 0; }
if ( ( block_state() == BLOCK_CLEAR ) && ( next_sig_lr (SIGFN_NORMAL) <=1 ) && ( opp_sig_lr (SIGFN_NORMAL) <=1 ) )
{ state = 1; }[/SPOILER]
{ state = 0; } закомментировал.
То есть state равно 0, если только всё заново начинается.

vicente 30.10.2016 00:29

Я пробовал инкримент. Если блок занят, прибавляется единица. Но, как только блок освобождается -- переменная обнуляется почему-то

[size="1"][color="Silver"]Добавлено через 2 минуты[/color][/size]
[QUOTE=КЕ;539244]
/////////////////////////////////////////////////////////////////////////////////////
SCRIPT TK_M1-V
extern float enabled;
extern float block_state ();
extern float next_sig_lr ();
extern float opp_sig_lr ();
extern float state;
///{ state = 0; }
if ( ( block_state() == BLOCK_CLEAR ) && ( next_sig_lr (SIGFN_NORMAL) <=1 ) && ( opp_sig_lr (SIGFN_NORMAL) <=1 ) )
{ state = 1; }[/QUOTE]
И что? Когда оппозит сбрасывается? Что со state?

КЕ 30.10.2016 00:36

Да, и [I][B]dist_multi_sig_xx[/B][/I] до конца пути как проверяет? То есть как это в скрипте выглядит?

[size="1"][color="Silver"]Добавлено через 6 минут[/color][/size]
[QUOTE=vicente;539247]И что? Когда оппозит сбрасывается? Что со state?[/QUOTE]
Вот это я проверять буду, с трафиком. Посмотрю, как оно работает, но только послезавтра.

vicente 30.10.2016 00:59

[IMG][url=http://itmages.ru/image/view/5106146/480c7d5d][img]http://storage7.static.itmages.ru/i/16/1029/s_1477773489_2688766_480c7d5d20.png[/img][/url][/IMG]

[size="1"][color="Silver"]Добавлено через 1 минуту[/color][/size]
[QUOTE=КЕ;539249]Да, и [I][B]dist_multi_sig_xx[/B][/I] до конца пути как проверяет? То есть как это в скрипте выглядит?[/QUOTE]
Как в дефолте
[QUOTE]SCRIPT UKSemDist

// UK Semephore (Distance)

extern float block_state ();
extern float route_set ();
extern float def_draw_state ();
extern float dist_multi_sig_mr ();
extern float state;
extern float draw_state;
extern float enabled;

if ( //!enabled || // Not enabled/cleared to show natural state?
!route_set() || // Switch not set as per link?
dist_multi_sig_mr (SIGFN_NORMAL, SIGFN_DISTANCE) ==# SIGASP_STOP)
{
state = SIGASP_APPROACH_2;
}
else
{
state = SIGASP_CLEAR_2;
}

// Get draw state
draw_state = def_draw_state (state);
[/QUOTE]


Проверяет головы NORMAL до следующего по пути DISTANCE. Если нет такового или путь заканчивается или есть на пути враждебная противошерстная стрелка - до места окончания пути


Для Open Rails заблокированный светофор тоже является "окончанием пути".
По скрипту, если есть [B]хоть один[/B] STOP , считается, что условие выполняется!

[size="1"][color="Silver"]Добавлено через 15 минут[/color][/size]
[url=http://itmages.ru/image/view/5106240/e1cafd4c][img]http://storage7.static.itmages.ru/i/16/1029/s_1477774733_3413209_e1cafd4c37.png[/img][/url]
Как удержать аспект? :mad:

КЕ 31.10.2016 12:11

Не удерживается даже в таком скрипте:
[SPOILER]SCRIPT TK_WB
[I]extern float block_state ();
extern float next_sig_lr ();
extern float state;
extern float draw_state;
float next_N;
float W;[/I]
next_N = next_sig_lr (SIGFN_NORMAL);
if ( ( state == 0 ) && ( block_state()!= BLOCK_CLEAR ) )
W = 1;
else if ( ( ( next_N == 1 ) || ( next_N == 2 ) ) && W == 0 )
{ state = 2; draw_state = 1; } /// из горловины на станц. путь
else { state = 0; draw_state = 0; }[/SPOILER]
Здесь переменная W задана для гашения белого в обратном направлении. Гаснет, но при обороте маневрового в горловине и движении обратно на станцию загорается белый, хотя сброс W в ноль не прописан в скрипте. То есть при перемене направления движения всё обнуляется заново независимо от скрипта.(?)
Похоже, что при переходе из [I]!enabled[/I] в [I]enabled[/I] или обратно происходит то же самое.
Переменная W - в принципе, тот же аспект.

КЕ 31.10.2016 16:57

1. М-м-дя-я... "Головы" SHUNTING тоже оппозиты не читают, условие [B][I]opp_sig_lr (SIGFN_DISTANCE)[/I][/B] всегда возвращает "0". И в стабильной, и в последней тестовой версиях.
2. Если на станц. пути стоят вагоны, а за вагонами горит белый ( [I]state = 2;[/I]), то при этом на манёврах условие [I][B]if ( next_N == 2 )[/B][/I] не работает, [I][B]next_sig_xx[/B][/I] возвращает ноль (вроде как РЦ зашунтирована колёсами, и коды не проходят:)).:mad:
Где можно посмотреть список внешних переменных для OR?


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

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