Цитата:
Сообщение от vicente
Лёша использует и DISTANCE и INFO в своей сигнализации. Так что, сигнальные головы в табло не должны быть этих типов. Надо поменять их на что-нибудь другое. SHUNTING, REPEATER...
|
В табло головы REPEATER, так что вроде все нормально, мы не вмешиваемся в его логику.
Цитата:
Сообщение от vicente
Так вот, эта "блуждающая" рабочая переменная WORK1 меня всегда настораживала. Это не С++ и даже не С.
|
Хочешь сказать, что она может быть не локальной
, а глобальной, то есть один скрипт будет писать в нее, другой прочитает из нее ( в С++ эта называется проблемой обращения с общей памятью - мьютексы ).
Добавлено через 21 минуту
Цитата:
Сообщение от vicente
opp_ONE_WAY будет 1 когда сигнал NORMAL "сзади" входного по ходу движения будет наиболее запрещающим аспектом (нижним) давать STOP_AND_PROCEED.
|
Похоже так.
Добавлено через 13 минут
Цитата:
Сообщение от vicente
методом исключения, голова даст RESTRICTING только когда opp_POEZD 2, или opp_ONE_WAY 1..
|
А там ведь еще условие
Код:
if ( POEZD !=# 0 || next_INFO ==# 7 )
POEZD будет не 0, если
Код:
WORK1 = next_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { POEZD = 1; }
Но DISTANCE next сигнала на табло SIGASP_CLEAR_2.
Потом:
Код:
WORK1 = next_sig_mr ( SIGFN_INFO );
if ( WORK1 ==# SIGASP_CLEAR_1 ) { next_INFO = 7; }
На табло нет INFO, я добавил вывод в лог, поправив скрипт Табло:
Код:
SCRIPT N_DASP
extern float state;
extern float next_sig_mr();
extern float next_sig_lr();
extern float draw_state;
extern float def_draw_state;
extern float debug_header();
extern float debug_out();
extern float debug_out2();
float WORK1;
state = next_sig_mr (SIGFN_DISTANCE);
draw_state = def_draw_state (state);
debug_header();
WORK1 = next_sig_mr ( SIGFN_DISTANCE );
debug_out2 (2001, WORK1);
WORK1 = next_sig_lr(SIGFN_DISTANCE);
debug_out2(2002,WORK1);
WORK1 = next_sig_mr(SIGFN_NORMAL);
debug_out2(2003,WORK1);
WORK1 = next_sig_lr(SIGFN_NORMAL);
debug_out2(2004,WORK1);
WORK1 = next_sig_mr(SIGFN_INFO);
debug_out2(2005,WORK1);
WORK1 = next_sig_lr(SIGFN_INFO);
debug_out2(2006,WORK1);
Получил в логе:
2001.000000 7.000000
2002.000000 7.000000
2003.000000 0.000000
2004.000000 7.000000
2005.000000 7.000000
2006.000000 7.000000
То есть по INFO голове идет SIGASP_CLEAR_2, по обоим аспектам lr,mr.
То есть в это условие не попадаем.