Страница 1 из 5 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 42

Тема: Свой таймер

  1. #1
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    704

    По умолчанию Свой таймер

    Добрый вечер, форумчане.

    Для тех кого по каким-либо причинам не устраивают стандартные таймеры TON, TOFF, TP, предлагаю рассмотреть работу с таймером Timer, который я сделал для себя.
    Код таймера приведен в прикрепленном проекте. Здесь я дам короткие комментарии.

    Основное преимущество работы с данным таймером, состоит в том, что все обращения к таймеру лингвистически понятны.
    Так, например, для того чтобы запустить таймер мы пишем:
    Timer.Start(),
    для того чтобы остановить или очистить таймер, мы пишем:
    Timer.Stop() или Timer.Clear().
    Проверка запущен ли таймер или нет также понятна: if Timer.Started then...

    Пример использования в пошаговом алгоритме:
    PROGRAM PLC_PRG
    VAR
    Step : INT := 1;
    StepTimer : Timer;
    StepTime : TIME := T#10s;
    CurTime : TIME;
    END_VAR

    CASE Step OF
    1:
    IF NOT StepTimer.Started THEN
    StepTimer.Start();
    END_IF;

    IF GetTimer(StepTimer) > StepTime THEN
    StepTimer.Stop();
    Step := 2;
    END_IF;
    2:
    Step := 1;
    END_CASE;

    Алгоритм читается без комментариев.
    Вложения Вложения
    • Тип файла: pro Timer.pro (28.1 Кб, Просмотров: 44)

  2. #2
    Пользователь
    Регистрация
    10.11.2014
    Адрес
    Санкт-Петербург
    Сообщений
    704

    По умолчанию

    Отредактирован метод Stop.

    Важное замечание. Удобно использовать в языке ST. Для других языков не предназначен.
    Вложения Вложения
    • Тип файла: pro Timer.pro (28.2 Кб, Просмотров: 48)

  3. #3
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,586

    По умолчанию

    а чего паузы то нет, обратного отсчета, как из него сделать стандартные таймеры это я еще проект не смотрел
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

  4. #4
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,586

    По умолчанию

    Цитата Сообщение от SKV Посмотреть сообщение
    Для других языков не предназначен.
    с чего это, если не умеете не значит что нельзя
    Изображения Изображения
    • Тип файла: png owen.png (2.3 Кб, Просмотров: 169)
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

  5. #5
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,401

    По умолчанию

    Эмм... оукей... Я тоже люблю говорящий код. Но я не люблю инородный код. Прелесть стандартных таймеров в том, что они хорошо работают в бесконечном цикле ПЛК. Пример из первого сообщения реализуется на обычном TON вот так:
    Код:
    VAR
        ton1: TON := (PT := T#10s);
     END_VAR
    
    ton1(IN := NOT ton1.Q);
    Одна строка. А действия в ФБ тяготеют к десктопной однократности, и из-за них приходится ставить IF'ы. В результате растёт цикломатическая сложность программы. И хоть она становится в какой-то мере более читаемой, но читать-то приходится воду. Так что не очень мне по нраву такой подход.

    У меня вот в одном проекте были свои таймеры с перемоткой, паузой и задним ходом на основе стандартных. Делалось подменой функции TIME на свою в таймерах из библиотеки Standard.lib (есть её открытая версия Standard-intern.lib). Презабавнейшая вещь была в плане отладки длительных процессов.

  6. #6
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,345

    По умолчанию

    Часто требуется отсчитывать секунды,минуты , причем вести прямой и обратный независимый отсчет в разных местах программы .
    Для этого я в начале проекта завожу таймер с самосбросом 1сек и получаю секундные тактовые импульсы длительностью в 1скан и уже где надо используя IF ... складываю, вычитаю , замораживаю , сбрасываю различные переменные таймов . Очень удобно , нет геморроя с форматом TIME , а если надо , то есть соотв ФБ в ОСКАТ.

  7. #7

    По умолчанию

    я так понимаю, поиск альтернативы стандартным мэковским таймерам появляется при необходимости продолжить отсчет времени при возврате сигнала на "счетном" (IN) входе таймера обратно в true с возможностью сброса отсчитанного времени. Это стандартная задача при реализации подсчета наработки оборудования. Кто реализовывал данные функцию счета наработки с сохранением времени при IN=false при помощи стандартных таймеров?

  8. #8
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,345

    По умолчанию

    Цитата Сообщение от spectrum48k Посмотреть сообщение
    я так понимаю, поиск альтернативы стандартным мэковским таймерам появляется при необходимости продолжить отсчет времени при возврате сигнала на "счетном" (IN) входе таймера обратно в true с возможностью сброса отсчитанного времени. Это стандартная задача при реализации подсчета наработки оборудования. Кто реализовывал данные функцию счета наработки с сохранением времени при IN=false при помощи стандартных таймеров?
    См.пост выше , это же элементарно , Ватсон !

    Tmr_TON_1S(In:=(Not Tmr_TON_1S.Q)and Wrk_drv1(*Признак работы механизма*),Pt:=t#1s);
    IF Tmr_TON_1S.Q THEN
    Wrk_sec_drv1:=Wrk_sec_drv1+1;
    if Wrk_sec_drv1>=60 then
    Wrk_min_drv1:=Wrk_min_drv1+1;
    Wrk_sec_drv1:=0;
    END_IF
    END_IF

    Получаем переменные секунды и минуты , часы и делаем с ними все , что нужно , безо всякого хитроблудства .

  9. #9

    По умолчанию

    Цитата Сообщение от Sergey666 Посмотреть сообщение
    См.пост выше , это же элементарно , Ватсон !

    Tmr_TON_1S(In:=(Not Tmr_TON_1S.Q)and Wrk_drv1(*Признак работы механизма*),Pt:=t#1s);
    IF Tmr_TON_1S.Q THEN
    Wrk_sec_drv1:=Wrk_sec_drv1+1;
    if Wrk_sec_drv1>=60 then
    Wrk_min_drv1:=Wrk_min_drv1+1;
    Wrk_sec_drv1:=0;
    END_IF
    END_IF

    Получаем переменные секунды и минуты , часы и делаем с ними все , что нужно , безо всякого хитроблудства .
    спасибо, кэп! ) только вот в момент сброса таймера его ET которую вы бесстыдно игнорируете, может принимать значение от нуля до длины цикла. и чем больше время цикла тем еще выше погрешность... не так ли? очень, очень грубый подсчет. попробуйте еще раз)

  10. #10
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,345

    По умолчанию

    Цитата Сообщение от spectrum48k Посмотреть сообщение
    спасибо, кэп! ) только вот в момент сброса таймера его ET которую вы бесстыдно игнорируете, может принимать значение от нуля до длины цикла. и чем больше время цикла тем еще выше погрешность... не так ли? очень, очень грубый подсчет. попробуйте еще раз)
    Во первых при подсчете чего-то там где-то перемешать , чего-то подержать , тем более сколько там что-то работает погрешностью длины скана-цикла можно пренебречь .
    Во вторых длительность цикла для ПЛК100-110 никогда не устанавливаю более 5мс , 5мс тем более можно пренебречь .
    В третьих можно вместо таймера использовать функцию+ переменную TIME , то длительность цикла внесет ту-же погрешность .

    В четвертых можно и с .ET заморочится , не вижу сложностей вообще , только ... надо-ли . Если в ПЛК с временем вообще что-то не то и 100мс это не 100мс , а где-то 120...150 . Гиви! Сколько граммов в килограмме ? -Сэмсот-Васэмсот , где-то так ...
    Так что ... сало оно и в африке сало , чего его пробовать .
    Последний раз редактировалось Sergey666; 26.08.2015 в 11:37.

Страница 1 из 5 123 ... ПоследняяПоследняя

Похожие темы

  1. Как оценить свой труд?
    от a_gricaj в разделе Master SCADA 3
    Ответов: 30
    Последнее сообщение: 12.07.2015, 13:20
  2. Ответов: 2
    Последнее сообщение: 18.03.2015, 16:04
  3. Таймер
    от Deoxes в разделе СПК1хх
    Ответов: 8
    Последнее сообщение: 16.07.2014, 12:19
  4. Таймер(ы)
    от AntoNechayuk в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 23.08.2011, 20:39

Ваши права

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