Добрый день попытался написать маршруты запуска механизмов в элеваторе. Получилась не важно в общем вот

Код:
Обработка Маршрутов элеватора.

(***********************Обработка Маршрутов элеватора******************************************)
IF OPC_MARCHUT_EL1_START=TRUE THEN (*Обработка кнопки СТАРТ маршрута*)
OPC_MARCHUT_EL1_START_Q:=TRUE;
END_IF

IF OPC_MARCHUT_EL1_STOP=TRUE THEN (*Обработка кнопки СТОП маршрута*)
OPC_MARCHUT_EL1_START_Q:=FALSE;
razrechenie_puska_EL1_Q:=FALSE;
MARCHUT_EL1_STOP_Q:=TRUE;
END_IF

IF razrechenie_puska=TRUE THEN
razrechenie_puska_EL1_Q:=TRUE;
END_IF
(***************************************************************************************************)
CASE OPC_MARCHUT_EL1 OF
(*******Обработка Маршрута 3я Яма--Тр-р №1--НОРИЯ №1--Круг1--Тр-р№12*******)
        1:  IF MARCHUT_EL1_STOP_Q=TRUE THEN(*Остановка маршрута_EL1*)
             TR1_AUTO_STOP:=TRUE;
              timer_MARCHUT_EL1_1(in:=TR1_AUTO_STOP, pt:=T#2s ); (*Время зачистки Нории №1*)
              EL1_AUTO_STOP:=timer_MARCHUT_EL1_1.Q;
              timer_MARCHUT_EL1_2(in:=EL1_AUTO_STOP, pt:=T#2s ); (*Время зачистки Транспортёра №12*)
                TR120_AUTO_STOP:=timer_MARCHUT_EL1_2.Q;
                MARCHUT_EL1_STOP_Q:=NOT timer_MARCHUT_EL1_2.Q;
                ELSE
                TR1_AUTO_STOP:=FALSE;
                EL1_AUTO_STOP:=FALSE;
                TR120_AUTO_STOP:=FALSE;
                timer_MARCHUT_EL1_1(in:=FALSE);
                timer_MARCHUT_EL1_2(in:=FALSE);
                timer_MARCHUT_EL1_3(in:=FALSE);
                timer_MARCHUT_EL1_4(in:=FALSE);
                timer_MARCHUT_EL1_5(in:=FALSE);
                (*KRUG5_AUTO_START:=FALSE;*)
                END_IF
      (*********Запуск маршрута после предпускового сигнала****************)
        IF OPC_MARCHUT_EL1_START_Q=TRUE AND razrechenie_puska_EL1_Q=TRUE THEN
       (*Проверка механизмов на использование в других маршрутах и режим работы АВТОМАТ*)
          IF TR12_REIDI =FALSE (*AND EL1_REIDI = FALSE AND TR1_REIDI = FALSE AND                                                  TR12_AUTO = FALSE AND EL1_AUTO = FALSE AND TR1_AUTO = FALSE AND KRUG1_AUTO = FALSE*) THEN
                        START1:=TRUE;                    (*Установка круга №1 на TR12*)
                        IF START1=TRUE THEN      (*Управление кругом №1*)
                        KRUG5_AUTO_ADRES:=1; (*Адрес тележки*)
                        KRUG5_AUTO_START:=START1;(*Запуск вращения круга №1*)
                        TR120_AUTO_START:=START1; (*Запуск транспортёра №12*)
                        EL1_AUTO_START:=START1;      (*Запуск Нории №1*)
                        TR1_AUTO_START:=START1;      (*Запуск Транспортёра №1*)
                        timer_KRUG5_start(in:=KRUG5_AUTO_START, pt:=T#1s );
                        KRUG5_AUTO_START:=timer_KRUG5_start.Q;
                        TR120_AUTO_START:=timer_KRUG5_start.Q; (*Обнуляем переменную Транспортёр №12 пуск*)
                        EL1_AUTO_START:=timer_KRUG5_start.Q;      (*Обнуляем переменную Нория №1 пуск*)
                        TR1_AUTO_START:=timer_KRUG5_start.Q;      (*Обнуляем переменную Транспортёр №1 пуск*)
                           IF KRUG5_POLOGENIE=1 THEN (*обнуляем переменые по достижению кругом №1 нужного положения*)
                           START1:=FALSE;
                           timer_KRUG5_start(in:=FALSE);
                           END_IF
                        END_IF
                   END_IF
(*******Обработка аварий маршрута Тр-р №1-НОРИЯ №1-Круг1-Тр-р№12********)
              IF TR1_REIDI=TRUE  AND  EL1_REIDI=TRUE AND KRUG1_POLOGENIE=1
              AND TR120_REIDI=TRUE THEN
                   IF TR1_REIDI=FALSE OR  EL1_REIDI=FALSE OR EL1_ALARM>0 OR  TR120_REIDI=FALSE THEN
                   TR1_AUTO_STOP:=TRUE;
                   OPC_MARCHUT_EL1_START_Q:=FALSE;
                   razrechenie_puska_EL1_Q:=FALSE;
                   ELSE
                   TR1_AUTO_STOP:=FALSE;
                   END_IF
               END_IF

          END_IF
(**********************************************************************************)
(*******Обработка Маршрута 3я Яма--Тр-р №1--НОРИЯ №1--Круг1--Б23*******************)
           2:  IF MARCHUT_EL1_STOP_Q=TRUE THEN (*Остановка маршрута_EL1*)
                TR1_AUTO_STOP:=TRUE;
                timer_MARCHUT_EL1_1(in:=TR1_AUTO_STOP, pt:=T#2s ); (*Время зачистки Нории №1*)
                EL1_AUTO_STOP:=timer_MARCHUT_EL1_1.Q;
                timer_MARCHUT_EL1_2(in:=EL1_AUTO_STOP, pt:=T#2s ); (*Время зачистки Транспортёра №12*)
                TR120_AUTO_STOP:=timer_MARCHUT_EL1_2.Q;
                MARCHUT_EL1_STOP_Q:=NOT timer_MARCHUT_EL1_2.Q;
                ELSE
                TR1_AUTO_STOP:=FALSE;
                EL1_AUTO_STOP:=FALSE;
                TR120_AUTO_STOP:=FALSE;
                timer_MARCHUT_EL1_1(in:=FALSE);
                timer_MARCHUT_EL1_2(in:=FALSE);
                timer_MARCHUT_EL1_3(in:=FALSE);
                timer_MARCHUT_EL1_4(in:=FALSE);
                timer_MARCHUT_EL1_5(in:=FALSE);
                (*KRUG5_AUTO_START:=FALSE;*)
                END_IF
                  

 (*********Запуск маршрута после предпускового сигнала*****************)
                IF OPC_MARCHUT_EL1_START_Q=TRUE AND razrechenie_puska_EL1_Q=TRUE THEN
       (*Проверка механизмов на использование в других маршрутах и режим работы АВТОМАТ*)
                   IF TR12_REIDI =FALSE (*AND EL1_REIDI = FALSE AND TR1_REIDI = FALSE AND TR12_AUTO = FALSE
                   AND EL1_AUTO = FALSE AND TR1_AUTO = FALSE AND KRUG1_AUTO = FALSE*) THEN
                        START2:=TRUE;                    (*Установка круга №1 на TR12*)
                        IF START2=TRUE THEN      (*Управление кругом №1*)
                        KRUG5_AUTO_ADRES:=2; (*Адрес тележки*)
                        KRUG5_AUTO_START:=START2;(*Запуск вращения круга №1*)
                        TR120_AUTO_START:=START2; (*Запуск транспортёра №12*)
                        EL1_AUTO_START:=START2;      (*Запуск Нории №1*)
                        TR1_AUTO_START:=START2;      (*Запуск Транспортёра №1*)
                        timer_KRUG5_start(in:=KRUG5_AUTO_START, pt:=T#1s );
                        KRUG5_AUTO_START:=timer_KRUG5_start.Q;
                        TR120_AUTO_START:=timer_KRUG5_start.Q; (*Обнуляем переменную Транспортёр №12 пуск*)
                        EL1_AUTO_START:=timer_KRUG5_start.Q;      (*Обнуляем переменную Нория №1 пуск*)
                        TR1_AUTO_START:=timer_KRUG5_start.Q;      (*Обнуляем переменную Транспортёр №1 пуск*)
                           IF KRUG5_POLOGENIE=2 THEN (*обнуляем переменые по достижению кругом №1 нужного положения*)
                           START1:=FALSE;
                           timer_KRUG5_start(in:=FALSE);
                           END_IF
                        END_IF
                   END_IF
(*******Обработка аварий маршрута Тр-р №1-НОРИЯ №1-Круг1-Тр-р№12********)
              IF TR1_REIDI=TRUE  AND  EL1_REIDI=TRUE AND KRUG1_POLOGENIE=2
              AND TR120_REIDI=TRUE THEN
                   IF TR1_REIDI=FALSE OR  EL1_REIDI=FALSE OR EL1_ALARM>0 OR  TR120_REIDI=FALSE THEN
                   TR1_AUTO_STOP:=TRUE;
                   OPC_MARCHUT_EL1_START_Q:=FALSE;
                   razrechenie_puska_EL1_Q:=FALSE;
                   ELSE
                   TR1_AUTO_STOP:=FALSE;
                   END_IF
               END_IF

          END_IF
(*********************************************************************************)
END_CASE
В мастер скаде выбираю из выпадающего списка нужный маршрут его номер передается в плк
Там в обработчике CASE выбирается нужный маршрут и после предупредительного звукового сигнала начинается запуск механизмов вроде как все нормально и запускается, но написано коряво не знаю, как улучшить. Вторая проблема это то, что когда поворотный круг стоит в положение для этого маршрута, то маршрут не запустить, потому что переменные обнулены.
Необходимо как-то обойти эту проблему но почему-то не получается может подскажите что.