Показать сообщение отдельно
Старый 21.09.2021, 12:54   #11
vicente
Заблокирован
 
Регистрация: 06.10.2007
Сообщений: 1,764
Вы сказали Спасибо: 899
Поблагодарили 1,214 раз(а) в 730 сообщениях
vicente стоит на развилке (репутация по умолчанию)
По умолчанию

Цитата:
Сообщение от roman5 Посмотреть сообщение
В табло головы REPEATER, так что вроде все нормально, мы не вмешиваемся в его логику.
Я не помнил: какие типы голов на табло. Я с телефона всё это делаю.

Цитата:
Сообщение от roman5 Посмотреть сообщение
Хочешь сказать, что она может быть не локальной (...), а глобальной, то есть один скрипт будет писать в нее, другой прочитает из нее ( в С++ эта называется проблемой обращения с общей памятью - мьютексы ).
В неё пишется 4 раза. 2 со следующего/их сигнала/ов (головы DISTANCE и NORMAL, теоретически, могут быть на разных сигналах, я не смотрел всю конфигурацию сигнализации на этот предмет). Я говорю о том, что в реальном времени, если несколько условий для WORK1 будут одинаковыми, соответствующие переменные получат соответствующие значения одновременно. Но, возможно, автор всё просчитал, и так и должно работать. Я бы сделал по-другому: WORK1, WORK2 и т.д. Но, я не Автор

Костя, я как раз пол-года назад задумался над новой сигнализацией с совершенно новой логикой и собирался запоминать переменные по принципу "условие - 1, условие - 0, не выполняется ни то, ни другое условие - переменная остаётся в последнем значении, т.е. запоминается". Не вижу причин, что не будет работать. Но, до сигнализации так и не добрался пока - жизнь закрутилась и пришлось отложить на неопределённый срок.

Цитата:
Сообщение от roman5 Посмотреть сообщение
Похоже так.
"Оппозит" - светофор "сзади по ходу" в противоположном направлении. Но, я хотел бы знать: где стоит маркер табло слева у тебя на скрине?

Цитата:
Сообщение от roman5 Посмотреть сообщение
А там ведь еще условие
Код:
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; }
Мы ищем сейчас: какой из NORMAL -ов даёт этот наиболее разрешающий RESTRICTING. STOP_AND_PROCEED - более запрещающий и нас он сейчас не интересует.
Цитата:
Сообщение от roman5 Посмотреть сообщение
То есть в это условие не попадаем.
Надо искать сигнальную голову, подпадающую под все условия и дающую аспект 2.

Добавлено через 28 минут
Повторяю/поясняю:
Цитата:
if ( block_state() ==# BLOCK_CLEAR ) { if ( POEZD !=# 0 || next_INFO ==# 7 ) { state = SIGASP_STOP_AND_PROCEED;
...даёт STOP_AND_PROCEED, а не требуемый RESTRICTING , поэтому это условие не выполняется. Данная сигнальная голова, когда блок впереди не занят и нет враждебной стрелки, даст RESTRICTING только в случае, который я описал в предыдущем посте.

Добавлено через 4 минуты
Судя по скрину, приведенному КЕ, эта сигнальная голова - "чиста". Попробуйте просчитать следующую голову с ALSN.
vicente вне форума   Ответить с цитированием
Этот пользователь сказал Спасибо vicente за это полезное сообщение:
Старый 01.01.2007, 12:00  
Яndex
Спонсор
 
 
Регистрация: 01.01.2007
Сообщения: 500


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