Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 13 из 13

Тема: Таймеры

  1. #11

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    а так у Вас значение d появляются только на время одного цикла и в остольное время d=0
    Почему на время одного цикла? Постоянно есть значение d.

    В целом я понял, что повторно вызывать таймер наоборот необходимо. И такой вариант лучший получается?

    TIMEdoz: TON;
    d: TIME;

    IF Knopka= TRUE THEN
    OUT := TRUE;
    TIMEdoz(IN:=TRUE,PT:=t#100s);
    END_IF

    IF Datchik = TRUE THEN
    TIMEdoz();
    d:= TIMEdoz.ET;
    OUT := FALSE;
    TIMEdoz.IN := FALSE;
    END_IF
    Последний раз редактировалось Атаман; 03.10.2015 в 14:37.

  2. #12
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,842

    По умолчанию

    Цитата Сообщение от Атаман Посмотреть сообщение
    Почему на время одного цикла? Постоянно есть значение d.

    В целом я понял, что повторно вызывать таймер наоборот необходимо и такой вариант лучший получается?

    TIMEdoz: TON;
    d: TIME;

    IF Knopka= TRUE THEN
    OUT := TRUE;
    TIMEdoz(IN:=TRUE,PT:=t#100s, ET=>d);
    END_IF

    IF Datchik = TRUE THEN
    TIMEdoz();
    OUT := FALSE;
    TIMEdoz.IN := FALSE;
    END_IF
    1. Не используйте IF Knopka= TRUE THEN или IF Datchik = TRUE THEN просто пишите IF Knopka THEN или IF Datchik THEN. Получается масло масляное или так называемый "индусский код".
    2. Для "Хочу померить время между началом и концом процесса" можно таймер не использовать, а пользоваться функцией TIME()

    Код:
    VAR
        d: TIME;
        Datchik: BOOL;
        OUT: BOOL;
        Knopka: BOOL;
        R_TR1: R_TRIG;
        R_TR2: R_TRIG;
        time_start: TIME;
    END_VAR
    
    R_TR1(CLK:=Knopka);
    IF R_TR1.Q THEN
        time_start:=TIME();
        OUT := TRUE;
    END_IF
    
    
    R_TR2(CLK:=Datchik);
    IF R_TR2.Q THEN
        d:=TIME()-time_start;
        OUT := FALSE;
    END_IF
    Подойде для измерения времени процесса до ~49 суток и если макс. время процесса заранее не известно.

    ЗЫ. А на счет таймера, то перед анализом состояния таймера его всегда перед этим нужно вызывать.
    Последний раз редактировалось petera; 03.10.2015 в 14:47.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  3. #13

    По умолчанию

    А как правильно сделать в таком случае.

    добавляется еще одна строка NEWVAR = OLDVAR +1; в первое условие:

    TIMEdoz: TON;
    d: TIME;

    IF Knopka= TRUE THEN
    NEWVAR = OLDVAR +1;
    OUT := TRUE;
    TIMEdoz(IN:=TRUE,PT:=t#100s);
    END_IF

    IF Datchik = TRUE THEN
    TIMEdoz();
    d:= TIMEdoz.ET;
    OUT := FALSE;
    TIMEdoz.IN := FALSE;
    END_IF

    NEWVAR, OLDVAR:REAL - это переменные, получаемые при опросе модулей ввода. И пока в модуле не обновится NEWVAR нельзя запускать процесс OUT. То есть нужна задержка между вычислением NEWVAR и запуском OUT 1 секунда, например.

Страница 2 из 2 ПерваяПервая 12

Похожие темы

  1. Таймеры
    от sd_white в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 01.04.2014, 11:41
  2. ПЛК100: таймеры при отладке
    от drvlas в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 23.04.2011, 17:26
  3. таймеры в функциональном блоке
    от Ермаков Андрей в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 02.12.2009, 23:00
  4. Reset сбрасывает retain-таймеры :( ?
    от Валенок в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 02.04.2009, 17:06
  5. Таймеры в режиме Simulation
    от alex1963 в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 04.12.2008, 19:51

Ваши права

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