Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- I0 := 0;
- timer_reset := 0;
- //Преобразование сек. в мсек.
- PR_time_mc := PR_time * 1000;
- PR_time_tr_mc := PR_time_tr * 1000;
- //Время хода
- PR_time_close := PR_time_mc;
- PR_time_open := PR_time_mc;
- //Время схода с концевиков
- PR_time_open_tr := PR_time_tr_mc;
- PR_time_close_tr := PR_time_tr_mc;
- //Выбор режима работы
- IF ( HL_Set < 10 OR HL_Set > 15 ) AND HL_Set <> 0 THEN
- HL_Mode := HL_Set;
- ELSE
- CASE HL_Set OF
- //Сброс аварий
- 10:
- HL_Alarms := 0;
- //Выключение аварий
- 11:
- alarms_off := 1;
- //Включение аварий
- 12:
- alarms_off := 0;
- END_CASE;
- END_IF;
- HL_Set := 0;
- //Выбор режима по приоритету
- IF HL_Mode <> 1 THEN
- //Включить автоматический режим
- IF LG_on THEN
- HL_Mode := 3;
- END_IF;
- //Включить местный режим
- IF LC_on THEN
- HL_Mode := 2;
- END_IF;
- END_IF;
- //--------------HL_Command-----------------
- //-----Команды для задвижки при включеном--
- //----------дистанционном управлении-------
- need_open := 0;
- need_close := 0;
- need_stop := 0;
- IF HL_Mode = 4 AND NOT (LC_open OR LC_close OR LC_stop) THEN
- CASE HL_Command OF
- 1:
- need_open := 1;
- need_close := 0;
- need_stop := 0;
- 2:
- need_close := 1;
- need_open := 0;
- need_stop := 0;
- 3:
- need_stop := 1;
- need_open := 0;
- need_close := 0;
- END_CASE;
- END_IF;
- HL_Command := 0;
- //-----Команды для задвижки при включеном--
- //-------------местном управлении----------
- IF HL_Mode = 2 THEN
- //Закрыть
- IF LC_close THEN
- need_close := 1;
- END_IF;
- //Открыть
- IF LC_open THEN
- need_open := 1;
- need_close := 0;
- END_IF;
- //Стоп
- IF LC_stop THEN
- need_stop := 1;
- need_close := 0;
- need_open := 0;
- END_IF;
- END_IF;
- //-----Команды для задвижки при включеном--
- //----------логическое управлении-------
- IF HL_Mode = 3 AND NOT (LC_open OR LC_close OR LC_stop) THEN
- IF LG_close THEN //ЛОГИКА ЗАКРЫТЬ
- need_close := 1; //Вкл. - Закрыть
- END_IF;
- IF LG_open THEN //ЛОГИКА ОТКРЫТЬ
- need_open := 1; //Вкл. - Открыть
- need_close := 0; //Выкл. - Закрыть
- END_IF;
- IF LG_stop THEN //ЛОГИКА СТОП
- need_stop := 1; //Вкл. - Стоп
- need_close := 0; //Выкл. - Закрыть
- need_open := 0; //Выкл. - Открыть
- END_IF;
- END_IF;
- //При аварии
- IF HL_Alarms <> 0 THEN
- need_close := 0; //Выкл. - Закрыть
- need_stop := 1; //Вкл. - Стоп
- need_open := 0; //Выкл. - Открыть
- END_IF;
- //БЛОК ЗАЩИТЫ
- //При местном, авто и тест режиме
- IF HL_Mode <> 1 THEN
- IF PP_close THEN //ЗАЩИТА ЗАКРЫТЬ
- need_close := 1; //Вкл. - Закрыть
- END_IF;
- IF PP_open THEN //ЗАЩИТА ОТКРЫТЬ
- need_open := 1; //Вкл. - Открыть
- need_close := 0; //Выкл. - Закрыть
- END_IF;
- IF PP_stop THEN //ЗАЩИТА СТОП
- need_stop := 1; //Вкл. - Стоп
- need_close := 0; //Выкл. - Закрыть
- need_open := 0; //Вкл. - Открыть
- END_IF;
- END_IF;
- IF PP_pr_close THEN //ЗАЩИТА ЗАПРЕТ ЗАКРЫТИЯ
- need_close := 0; //Выкл. - Закрыть
- END_IF;
- IF PP_pr_open THEN //ЗАЩИТА ЗАПРЕТ ОТКРЫТИЯ
- need_open := 0; //Выкл. - Открыть
- END_IF;
- IF PP_pr_stop THEN //ЗАЩИТА ЗАПРЕТ СТОП
- need_stop := 0; //Выкл. - Стоп
- END_IF;
- (*----------------------СТЕПЫ----------------------*)
- //Обнуление шагов
- step_open := 0;
- step_close := 0;
- step_stop := 0;
- (* При первом запуске присваивается шаг 7*)
- CASE HL_STEP OF
- 1:
- step_stop := 1; //Вкл. шаг стоп
- IF need_close THEN //Выполнить если команда открыть
- HL_STEP := 2; //Присвоить индикацию шага 5
- END_IF;
- IF (NOT PS_closed) AND (NOT PS_opened) THEN //Выполнить если сработал концевик закрытия
- HL_STEP := 7; //Присвоить индикацию шага 7
- HL_Alarms.5 := 1;
- END_IF;
- IF PS_opened AND PS_closed THEN //Выполнить если не сработали оба концевика
- HL_STEP := 8;
- HL_Alarms.4 := 1; //Присвоить индикацию шага 8
- END_IF;
- 2:
- TIME0 := PR_time_close_tr; //Задать значение таймеру
- step_close := 1; //Вкл. шаг закрытия
- I0 := 1; //Включить таймер
- IF need_open THEN //Выполнить если команда открыть
- HL_STEP := 5; //Присвоить индикацию шага 5
- timer_reset := 1; //Сбросить таймер
- END_IF;
- IF need_stop THEN //Выплонить если команда стоп
- HL_STEP := 1; //Присвоить индикацию шага 1
- END_IF;
- IF NOT PS_opened THEN //Выполнить если сработал концевик открытия
- HL_STEP := 3; //Присвоить индикацию 3
- timer_reset := 1; //Сбросить таймер
- END_IF;
- IF PS_closed THEN //Выполнить если не сработал концевик
- HL_STEP := 4; //Присвоить индикацию шага 4
- END_IF;
- IF timeout_end THEN //Выполнить если время закончилось
- HL_STEP := 1;
- HL_Alarms.0 := 1;
- END_IF;
- IF PS_opened AND PS_closed THEN //Выполнить если оба концевика не сработали
- HL_STEP := 8;
- HL_Alarms.4 := 1;
- END_IF;
- 3:
- TIME0 := PR_time_close; //Задать значение таймеру
- step_close := 1; //Вкл. шаг закрытия
- I0 := 1; //Запустить таймер
- IF need_open THEN //Выполнить когда команда открыть
- HL_STEP := 5; //Присвоить индикацию шага 5
- timer_reset := 1; //Сбросить таймер
- END_IF;
- IF need_stop THEN //Выполнить когда команда стоп
- HL_STEP := 7; //Присвоить индикацию шага 7
- END_IF;
- IF PS_closed THEN //Выполнить если не сработал концевик закрытия
- HL_STEP := 4; //Присвоить индикацию шага 4
- END_IF;
- IF PS_opened THEN //Выполнить если не сработал концевик открытия
- HL_STEP := 1;
- HL_Alarms.7 := 1;
- END_IF;
- IF timeout_end THEN //Выполнить если время закончилось
- HL_STEP := 7; //Выполнить индикацию шага 7
- HL_Alarms.1 := 1; //Записать в аварию 1000
- END_IF;
- IF PS_opened AND PS_closed THEN //Выполнить если не сработали оба концевика
- HL_Alarms.4 := 1;
- HL_STEP := 8; //Присвоить индикацию шага 8
- END_IF;
- 4:
- step_stop := 1; //Вкл. шаг стоп
- IF need_open THEN //Выполнить если команда открыть
- HL_STEP := 5; //Присвоить индикацию шага 5
- END_IF;
- IF (NOT PS_closed) AND (NOT PS_opened) THEN //Выполнить если сработал концевик закрытия
- HL_STEP := 7; //Присвоить индикацию шага 7
- HL_Alarms.6 := 1;
- END_IF;
- IF PS_opened AND PS_closed THEN //Выполнить если не сработали оба концевика
- HL_Alarms.4 := 1;
- HL_STEP := 8; //Присвоить индикацию шага 8
- END_IF;
- 5:
- TIME0 := PR_time_open_tr; //Задать время таймеру
- step_open := 1; //Вкл. шаг открыть
- I0 := 1; //Запустить таймер
- IF need_close THEN //Выполнить если команда закрыть
- HL_STEP := 2; //Присвоить индикацию шага 2
- timer_reset := 1; //Сбросить таймер
- END_IF;
- IF need_stop THEN //Выполнить если команда стоп
- HL_STEP := 4; //Присвоить индикацию шага 4
- END_IF;
- IF NOT PS_closed THEN //Выполнить если сработал концевик закрытия
- HL_STEP := 6; //Присвоить индикацию шага 6
- timer_reset:= 1; //Сброс таймера
- END_IF;
- IF PS_opened THEN //Выполнить если не сработал концевик открытия
- HL_STEP := 1; //Присвоить индикацию шага 1
- END_IF;
- IF timeout_end THEN //Выполнить если время закончилось
- HL_STEP := 4; //Присвоить индикацию шага 4
- HL_Alarms.2 := 1; //Записать в аварию 1
- END_IF;
- IF PS_opened AND PS_closed THEN //Выполнить если оба концевика не сработали
- HL_STEP := 8; //Присвоить индикацию шага 8
- HL_Alarms.4 := 1;
- END_IF;
- 6:
- TIME0 := PR_time_open; //Задать время таймеру
- step_open := 1; //Вкл. шаг открытия
- I0 := 1; //Запустить таймер
- IF need_close THEN //Выполнить если команда закрыть
- HL_STEP := 2; //Присвоить индикацию шага 2
- END_IF;
- IF need_stop THEN //Выполнить если команда стоп
- HL_STEP := 7; //Присвоить индикацию шага 7
- END_IF;
- IF PS_opened THEN //Выполнить если не сработал конецевик открытия
- HL_STEP := 1; //Присвоить индикацию шага 1
- END_IF;
- IF PS_closed THEN //Выполнить если не сработал концевик закрытия
- HL_STEP := 4;
- HL_Alarms.8 := 1;
- END_IF;
- IF timeout_end THEN //Выполнить если время закончилось
- HL_STEP := 7; //Присвоить индикацию шага 7
- HL_Alarms.3 := 1;
- END_IF;
- IF PS_opened AND PS_closed THEN //Выполнить если оба концевика не сработали
- HL_STEP := 8;
- HL_Alarms.4 := 1;
- END_IF;
- 7:
- need_stop := 1; //Вкл. - Стоп
- IF need_open THEN //Выполнить если команда открыть
- HL_STEP := 6; //Присвоить индикацию шага 6
- END_IF;
- IF need_close THEN //Выполнить если команда закрыть
- HL_STEP := 3; //Присвоить индикацию шага 3
- END_IF;
- IF PS_opened THEN //Выполнить если не сработал концевик открытия
- HL_STEP := 1; //Присвоить индикацию шага 1
- HL_Alarms.8 := 1;
- END_IF;
- IF PS_closed THEN //Выполнить если не сработал концевик закрытия
- HL_STEP := 4; //Присвоить индикацию шага 4
- HL_Alarms.7 := 1;
- END_IF;
- IF PS_opened AND PS_closed THEN //Выполнить если не сработали оба концевика
- HL_STEP := 8; //Присвоить индикацию шага 8
- HL_Alarms.4 := 1;
- END_IF;
- 8:
- step_stop := 1; //Вкл. шаг стоп
- need_stop := 1; //Вкл. - Стоп
- IF PS_opened AND NOT PS_closed THEN //Выполнить если сработал концевик открытия
- HL_STEP := 1; //Присвоить индикацию
- END_IF;
- IF PS_closed AND NOT PS_opened THEN //Выполнить если сработал концевик закрытия
- HL_STEP := 4; //Присвоить индикацию
- END_IF;
- ELSE //Иначе
- HL_STEP := 7; //Присвоить индикацию шага 7
- END_CASE;
- IF alarms_off THEN //Выполнить если аварий нет
- HL_Alarms := 0; //Присвоить индикацию аварии 0
- END_IF;
- IF HL_Alarms <> 0 THEN
- alarm := 1;
- ELSE
- alarm := 0;
- END_IF;
- //--------------HL_Status-----------------
- HL_Status:=0;
- //Диагностика отключена
- IF alarms_off THEN
- HL_Status.0 :=1;
- END_IF;
- //Защита открыть
- IF PP_open THEN
- HL_Status.1 := 1;
- END_IF;
- //Защита закрыть
- IF PP_close THEN
- HL_Status.2 := 1;
- END_IF;
- //Защита остановить
- IF PP_stop THEN
- HL_Status.3 := 1;
- END_IF;
- //Защита запрет открытия
- IF PP_pr_open THEN
- HL_Status.4 := 1;
- END_IF;
- //Защита запрет закрытия
- IF PP_pr_close THEN
- HL_Status.5 := 1;
- END_IF;
- //Защита запрет остановить
- IF PP_pr_stop THEN
- HL_Status.6 := 1;
- END_IF;
- //По месту открыть
- IF LC_open THEN
- HL_Status.7 := 1;
- END_IF;
- //По месту закрыть
- IF LC_close THEN
- HL_Status.8 := 1;
- END_IF;
- //По месту стоп
- IF LC_stop THEN
- HL_Status.9 := 1;
- END_IF;
- //Логика закрыть
- IF LG_close THEN
- HL_Status.10 := 1;
- END_IF;
- //Логика открыть
- IF LG_open THEN
- HL_Status.11 := 1;
- END_IF;
- //Логика стоп
- IF LG_stop THEN
- HL_Status.12 := 1;
- END_IF;
- //--------------StatusOut-----------------
- StatusOut := 0;
- //Питание
- IF power THEN
- StatusOut.0 := 1;
- END_IF;
- //Открыт
- IF HL_STEP = 1 THEN
- StatusOut.1 := 1;
- END_IF;
- //Закрыт
- IF HL_STEP = 4 THEN
- StatusOut.2 := 1;
- END_IF;
- //Промежуточное
- IF HL_STEP = 7 THEN
- StatusOut.3 := 1;
- END_IF;
- //Открывается
- IF HL_STEP = 6 THEN
- StatusOut.4 := 1;
- END_IF;
- //Закрывается
- IF HL_STEP = 3 THEN
- StatusOut.5 := 1;
- END_IF;
- //Авария
- IF alarm THEN
- StatusOut.6 := 1;
- END_IF;
- //--------------ModeOut-----------------
- ModeOut := 0;
- //Режим ремонт
- IF HL_Mode = 1 THEN
- ModeOut.0 := 1;
- END_IF;
- //Режим локального управления
- IF HL_Mode = 2 THEN
- ModeOut.1 := 1;
- END_IF;
- //Режим автоматического управления
- IF HL_Mode = 3 THEN
- ModeOut.2 := 1;
- END_IF;
- //Режим дистанционного управления
- IF HL_Mode = 4 THEN
- ModeOut.3 := 1;
- END_IF;
- PP_opened:=0; //Выкл. сигнал Открыто
- PP_closed:=0; //Выкл. сигнал Закрыто
- IF HL_STEP=1 THEN
- PP_opened:=1; //Вкл. сигнал Открыто
- END_IF;
- IF HL_STEP=4 THEN
- PP_closed:=1; //Вкл. сигнал Закрыто
- END_IF;
- //------------------------------------------------------------------------------------
- IF TONR_01.PRE = TIME0 AND NOT timer_reset THEN
- TONR_01.PRE := TIME0; //Время отсчета
- TONR_01.Reset := timer_reset; //Сброс времени отсчета
- TONR_01.TimerEnable := I0; //Включение таймера
- TONR (TONR_01);
- ELSE
- TONR_01.PRE := TIME0; //Время отсчета
- TONR_01.Reset := timer_reset; //Сброс времени отсчета
- TONR_01.TimerEnable := 0; //Включение таймера
- TONR (TONR_01);
- END_IF;
- timeout_end := TONR_01.DN; //Срабатывание таймера
- time_elapsed := TONR_01.ACC;
- //------------------------------------------------------------------------------------
- TONR_02.PRE := TIME1; //Время отсчета
- TONR_02.Reset := timer_reset; //Сброс времени отсчета
- TONR_02.TimerEnable := step_open; //Включение таймера
- TONR (TONR_02);
- PS_open := TONR_02.DN; //Срабатывание таймера
- //------------------------------------------------------------------------------------
- TONR_03.PRE := TIME2; //Время отсчета
- TONR_03.Reset := timer_reset; //Сброс времени отсчета
- TONR_03.TimerEnable := step_close; //Включение таймера
- TONR (TONR_03);
- PS_close := TONR_03.DN; //Срабатывание таймера
- //------------------------------------------------------------------------------------
- TONR_04.PRE := TIME3; //Время отсчета
- TONR_04.Reset := timer_reset; //Сброс времени отсчета
- TONR_04.TimerEnable := step_stop; //Включение таймера
- TONR (TONR_04); // TON_1(IN:= , PT:= , Q=> , ET=>TON1_2 );
- PS_stop := TONR_04.DN; //Срабатывание таймера
- //------------------------------------------------------------------------------------
- IF PP_open THEN
- PS_open := 1;
- END_IF;
- IF PP_close THEN
- PS_close := 1;
- END_IF;
- IF PP_stop THEN
- PS_stop := 1;
- END_IF;
- IF PP_pr_open THEN
- PS_open := 0;
- END_IF;
- IF PP_pr_close THEN
- PS_close := 0;
- END_IF;
- IF PP_pr_stop THEN
- PS_stop := 0;
- END_IF;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement