Цитата:
Сообщение от vicente
Прграммировать светофоры для этого нужно с С#, а я вообще не знаю его, и в жизни программированием не занимаюсь.
|
Удобный язык для программирования, еще qt c++ мощная штука. В msts внешнее апи очень урезанное, даже под отладку нормальных возможностей не дали - из скрипта невозможно определить с каким из шейпов идет работа. Приходится извращаться: снимать user1-4 опции у нужных сигналов, чтобы получить уникальный набор
future.
Я тут поборол сигналку на БМО 1.8. Покопав далее скрипт distance входных сигналов заметил такое:
Код:
if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
WORK1 = opp_sig_mr ( SIGFN_NORMAL );
if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_ONE_WAY = 1; }
WORK1 = opp_sig_lr ( SIGFN_DISTANCE );
if ( WORK1 ==# SIGASP_RESTRICTING ) { opp_POEZD = 2; } if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { opp_POEZD = 1; }
}
if ( sig_feature( SIGFEAT_GRADIENT_PLATE ) && !sig_feature( SIGFEAT_NUMBER_PLATE ) ) {
if ( ( block_state() ==# BLOCK_OCCUPIED || POEZD !=# 0 ) && opp_POEZD !=# 1 ) { state = SIGASP_STOP_AND_PROCEED; }
if ( opp_ONE_WAY ==# 1 || opp_POEZD ==# 2 ) { state = SIGASP_STOP_AND_PROCEED; }
}
Оказывается для удержания направления перегона используют не только SAP в distance, но и SAP в normal проходных сигналов.
Глянул код голов normal у проходных, нашел это:
Код:
state = SIGASP_STOP;
if ( sig_feature( SIGFEAT_NUMBER_PLATE ) && POEZD !=# 1 ) {
if ( block_state() !=# BLOCK_CLEAR || POEZD ==# 2 || ONE_WAY ==# 1 ) { state = SIGASP_STOP_AND_PROCEED; }
}
То есть, если сигналы включены, то distance
POEZD = 0 по скрипту и занятые участки будут в normal SAP ставить.
А выше это в коде:
Код:
WORK1 = next_sig_mr ( SIGFN_NORMAL ); if ( WORK1 ==# SIGASP_STOP_AND_PROCEED ) { ONE_WAY = 1; }
Обеспечивает удержание sap на головах normal, где участки уже clear.
Направление перегона переключается не в Иванцево, а в Драчеево, то есть с другого конца, по редактору видно, что
enable не дотягивает до входного, его скрипт не срабатывает. Попробовал увеличить в
APK_3AB_YGR_YW_DISTANCE параметр
SignalNumClearAhead до 15. Теперь работает на тестовой сцене.