Показано с 1 по 6 из 6

Тема: время задержки выполнения программы

  1. #1

    По умолчанию время задержки выполнения программы

    Добрый день!

    Только начинаю осваивать CoDeDys.
    Пишу простенькую программу для обработки аварий с дискретных датчиков и выдачу аварий (с запоминанием и сбросом) на языке ST.
    =========
    PROGRAM PLC_PRG
    VAR
    avr1: BOOL := FALSE; (*Температура воды высокая*)
    ...
    END_VAR

    IF Hot=FALSE AND avr1=FALSE
    THEN avr1:=TRUE; KL8:=FALSE; HA:=TRUE;
    ELSIF SA2=TRUE AND Hot=TRUE THEN avr1:=FALSE; HA:=FALSE;
    END_IF
    ...
    IF avr1=TRUE OR avr2=TRUE OR avr3=TRUE OR avr4=TRUE OR avr5=TRUE
    THEN KL3:=TRUE;
    ELSE KL3:=FALSE;
    END_IF
    ...
    =========

    Но вот какой момент:
    Некоторые датчики (к, примеру, напоромеры) после подачи питания
    (включения щита) некоторое время "очухиваются" и соответственно пока там нули на контроллере идёт авария.
    Хоть и некритично, но всё же для приличия хочется обойти этот момент.
    В связи с этим вопросы:
    1. Можно ли сделать задержку выполнения основной программы где-то на 6 секунд после начала выполнения? Если да, то как (желательно на языке ST)?
    2. Существуют ли фильтры обработки дискретных сигналов?
    Ну, например, что бы если дискретных вход был замкнут в течении 1-2 секунды, это была бы авария. Или это пишется вручную?
    И есть ли вообще в этом необходимость (из практики)?

  2. #2
    Пользователь Аватар для Flomaster
    Регистрация
    03.05.2007
    Адрес
    Khabarovsk
    Сообщений
    278

    По умолчанию

    почему бы не вынести этот код для обработки аварий в отдельную функцию или фб?
    в основной программе сделать таймер, который по завершении 6 секунд будет устанавливать определенный флаг (логическую переменную). если флаг не установлен, то функция (фб) не вызывается. если установлен - то вызывается.

  3. #3

    По умолчанию

    Согласен с flomaster - прелесть ПЛК в том, что изначально не надо закладываться на "расчухивание" датчиков...
    В своей программе отслеживаете: если начало программы - запускаю таймер, что то делаю или ничего не делаю... До окончания таймера значение с датчиков считаю таким то. По окончанию таймера проверяю: "датчик расчухался" - использую данные с него... Датчик показывает неправду - авария датчика. Ну и соответственно делаю то то или то то...

  4. #4

    По умолчанию

    Итак, шкаф собран (на объект пока не идёт).
    Программу (на данный момент) не менял, ждал момента, когда можно будет "вживую" опробовать. Потихоньку испытываю (путём имитации). Так вот, при включении шкафа контроллер секунды 2-3 задумывается, а потом мне выдаёт все те аварии, которые происходят при размыкании.
    Хотя:
    1. В настройке проекта я все выхода ставил в положение FALSE при запуске.
    2. Установил перемычки на все эти аварии (т.е. при включении уже всё
    хорошо безо всякой задержки).
    Последний раз редактировалось Artyom; 28.12.2010 в 00:28.

  5. #5
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    Установите к при запуске сброс аврий.
    VAR
    M:BOOL:=TRUE;
    M_TRIG:R_TRIG;
    END_VAR

    В первой строке своей проги инициализируйте функцию
    M_TRIG(CLK:= M);
    В последней строке
    когда M_TRIG.Q равно True,произведите сброс аварий.

  6. #6

    По умолчанию

    простейший способ

    Код:
    Var
      Power:TON;
    END_VAR
    
    Power(IN:=Power_ON,PT:=T#30s);
    IF Power.Q THEN
      Cheсk_error(); (*проверка датчиков*)
    END_IF
    ....
    Power_ON это булева переменная Power status из модуля Statistic в конфигураторе ПЛК, показывающая наличие питания ПЛК...

    Можно конечно использовать просто флаг, как предлогал Flomaster или lara197a, и после включения ПЛК, по прошествии некоторого времени его взводить, например так:

    Код:
    VAR
      Power:ton;
      Power_ON:BOOL:=False;
    END_VAR
    
    Power(IN:=TRUE,PT:=T#30s);
    Power_ON:=Power.Q;
    IF Power_ON Then
      Check_error();
    end_If
    ....
    но при кратковременном выключении питания ПЛК, менее 10 минут (полагаю что при тестировании интервалы небыли больше), ни флаг, ни таймер не сбросится, программа будет продолжать жить своей жизнью и сигнализировать ошибки (ведь питания на датчиках нет), и при включении ПЛК будет радостно сообщать вам о найденых ошибках..
    Последний раз редактировалось Crusash; 29.12.2010 в 13:22.

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •