Добрый день попытался написать маршруты запуска механизмов в элеваторе. Получилась не важно в общем вот
Код:
Обработка Маршрутов элеватора.
(***********************Обработка Маршрутов элеватора******************************************)
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 выбирается нужный маршрут и после предупредительного звукового сигнала начинается запуск механизмов вроде как все нормально и запускается, но написано коряво не знаю, как улучшить. Вторая проблема это то, что когда поворотный круг стоит в положение для этого маршрута, то маршрут не запустить, потому что переменные обнулены.
Необходимо как-то обойти эту проблему но почему-то не получается может подскажите что.