Да, там сам черт ногу сломит - разбираться почему не сработало. У меня первый проходной (ну, в смысле, вообще все проходные) - довольно ёмкий сигнал. Первым проходным он становится через флаг. Если этот флаг включен и светофор
!enabled - он 1 (на однопутках первый проходной - 2 - не суть - на оба этих аспекта выходные были запрограммированы давать маневровый сигнал (сейчас я изменил условие с новой функцией - я показывал). Ну, и под этим - целый блок с показаниями при аспекте 1, согласно занятости перегона. Плюс учтена возможность давать ЖМ и ЗМ, потому что первый проходной может быть и предвходным одновременно.
Затем идёт блок для обычного движения, когда светофор
enabled. Но само условие
enabled я, в своё время, не вписывал - не нужно было. И весь блок идёт просто под
else if (....
Подозреваю, что этот
store_lvar не в любое место скрипта можно запихнуть.
Ну, и условия эти...
if (block_state ==# BLOCK_JN_OBSTRUCTED... стоит в первом блоке, под
!enabled, a
if (block_state !=# BLOCK_CLEAR... - в блоке под
else if (...
Может, в этом проблема, я хз.
Так как скрипт всё равно переписывать, копать дальше не вижу смысла
Добавлено через 1 час 4 минуты
Упс... прошу прощения. Там было не
else if (..., a просто
else (..., a уже внутри, отдельно , было
if (...
Короче, многоэтажка, родившаяся в тестах и не приведенная в "товарный вид" потому что... ну, работало и так...
Добавлено через 4 минуты
Потихоньку начинаю стороить проходной. Вот "тело":
Цитата:
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);
}
}
|
draw_state = 6 -
не горит. Потом можно будет через функцию "гасить" весь перегон.
Скрипт полностью рабочий. Забирай
Добавлено через 2 минуты
Пока оставлю его так. Пойду к маневровому, "ловить" этот самый
direction