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


Ответить с цитированием