Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 13

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

  1. #1

    По умолчанию Таймеры

    Здравствуйте.

    Не пойму, почему так таймеры работают? Хочу померить время между началом и концом процесса.
    Пишу:

    TIMEdoz: TON;
    d: TIME;

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

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

    После нажатия на кнопку и концом процесса первый раз d = 0; второй раз - d = первому времени процесса...
    Если добавить перед d:=TIMEdoz.ET еще раз TIMEdoz(IN:=TRUE,PT:=t#100s) , то всё считает. Но так ведь не правильно?

  2. #2

    По умолчанию

    http://www.owen.ru/forum/showthread.php?t=21977
    вот хорошая тема с примерами

  3. #3

    По умолчанию

    spectrum48k:

    В той теме не нашел ответа на мой вопрос. Почему TIMEdoz.ET обновляется только при повторном TIMEdoz(IN:=TRUE,PT:=t#100s)?

  4. #4

    По умолчанию

    TIMEdoz(IN:=TRUE,PT:=t#100s); - чтобы считал должен вызываться не только при нажатии кнопки. Таймер необходимо вызывать, чтобы он обновлял время ET.
    Не знаю какая именно у Вас задача, но навскидку это должно быть так?

    Код:
    TIMEdoz: TON;
    d: TIME;
    
    
    
    IF Knopka= TRUE THEN
    OUT := TRUE;
    END_IF
    
    IF OUT = TRUE THEN
    TIMEdoz(IN:=TRUE,PT:=t#100s);
    END_IF
    
    IF Datchik = TRUE THEN
    d:=TIMEdoz.ET;
    OUT := FALSE;
    TIMEdoz(IN:=FALSE);
    END_IF

  5. #5

    По умолчанию

    spectrum48k:


    В вашем коде добавляется дополнительная проверка условия и запуск таймера, которые будут выполняться на протяжении всего процесса. Неужели без этого нельзя обойтись? С точки зрения загрузки контроллера может лучше тогда добавить повторно строчку, как в первом посте написано. Но как то это коряво выглядит...
    Последний раз редактировалось Атаман; 03.10.2015 в 12:57.

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

    По умолчанию

    Цитата Сообщение от Атаман Посмотреть сообщение
    Здравствуйте.

    Не пойму, почему так таймеры работают? Хочу померить время между началом и концом процесса.
    Пишу:

    TIMEdoz: TON;
    d: TIME;

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

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

    После нажатия на кнопку и концом процесса первый раз d = 0; второй раз - d = первому времени процесса...
    Если добавить перед d:=TIMEdoz.ET еще раз TIMEdoz(IN:=TRUE,PT:=t#100s) , то всё считает. Но так ведь не правильно?
    Можно перед d:=TIMEdoz.ET просто вызывать таймер без параметров вот так TIMEdoz();
    Или даже так
    TIMEdoz(ET=>d );
    Тогда одна строчка (d:=TIMEdoz.ET) экономится, т.к. больше не нужна.
    Последний раз редактировалось petera; 03.10.2015 в 13:38.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  7. #7

    По умолчанию

    Цитата Сообщение от Атаман Посмотреть сообщение
    spectrum48k:


    В вашем коде добавляется дополнительная проверка условия и запуск таймера, которые будут выполняться на протяжении всего процесса. Неужели без этого нельзя обойтись? С точки зрения загрузки контроллера может лучше тогда добавить повторно строчку, как в первом посте написано. Но как то это коряво выглядит...
    А куда "Спасибо" подевалось после редактирования? Вы, смотрю, очень грамотный специалист. Без моих советов разберетесь ))

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

    По умолчанию

    Как вариант при первом вызове таймера сразу назначить ET=>d и обновлять таймер можно вне второго цикла, тогда даже видно изменение d в отладчике

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

    TIMEdoz();

    IF Datchik THEN
    OUT := FALSE;
    TIMEdoz.IN := FALSE;
    END_IF
    Последний раз редактировалось petera; 03.10.2015 в 14:23.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

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

    По умолчанию

    Только для "Хочу померить время между началом и концом процесса" фиксировать конец процесса нужно с помощью детектора фронта R_TRIG, а так у Вас значение d появляются только на время одного цикла и в остольное время d=0
    TIMEdoz: TON;
    d: TIME;
    R_TR1: R_TRIG;

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


    TIMEdoz();
    R_TR1(CLK:=Datchik);


    IF R_TR1.Q THEN
    OUT := FALSE;
    TIMEdoz.IN := FALSE;
    END_IF
    Последний раз редактировалось petera; 03.10.2015 в 14:22.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  10. #10

    По умолчанию

    spectrum48k:
    Не, я вообще не специалист )

    Всем спасибо, за помощь! )

Страница 1 из 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

Ваши права

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