Показать сообщение отдельно
Старый 21.09.2021, 06:41   #11
roman5
Новичок
 
Регистрация: 25.06.2017
Сообщений: 114
Вы сказали Спасибо: 35
Поблагодарили 71 раз(а) в 34 сообщениях
roman5 стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
Сообщение от vicente Посмотреть сообщение
Лёша использует и DISTANCE и INFO в своей сигнализации. Так что, сигнальные головы в табло не должны быть этих типов. Надо поменять их на что-нибудь другое. SHUNTING, REPEATER...
В табло головы REPEATER, так что вроде все нормально, мы не вмешиваемся в его логику.

Цитата:
Сообщение от vicente Посмотреть сообщение
Так вот, эта "блуждающая" рабочая переменная WORK1 меня всегда настораживала. Это не С++ и даже не С.
Хочешь сказать, что она может быть не локальной
Код:
float 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.
То есть в это условие не попадаем.

Последний раз редактировалось roman5; 21.09.2021 в 06:10.
roman5 вне форума   Ответить с цитированием
Старый 01.01.2007, 12:00  
Яndex
Спонсор
 
 
Регистрация: 01.01.2007
Сообщения: 500


Реклама показывается изредка по случайному принципу
По умолчанию РЕКЛАМА