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

Тема: Странное поведение таймера TON, обьявленного как Retain

  1. #1

    По умолчанию Странное поведение таймера TON, обьявленного как Retain

    Столкнулся со странностью работы таймера TON, объявленного как Retain: при отключении питания контроллера и последующем включении обратно выход таймера ET становится равным PT, соответственно Q=True, независимо от того, какое значение ET было в момент отключения питания. Проявилось на контроллере ПЛК110-24.60-Р.М, прошивка 1.0.11, таргет 3.18.
    Для иллюстрации сделал маленькую программку для проверки:
    Снимок0.PNG
    Переменной Start передергиваю таймер, чтобы пошел отсчет времени, и отключаю питание ПЛК примерно на 10..15 секунде. Делаю паузу секунд 30 и вновь включаю ПЛК. Подключаюсь к нему CoDeSys и вижу вот такое:
    Снимок1.PNG
    Выход таймера установлен в True, ET=10min. Но 10 минут гарантированно не прошло, даже минуты еще не прошло!
    Если объявление таймера перенести из VAR RETAIN в просто VAR, то таймер после подачи питания начинает считать сначала.
    Что это может быть такое с таймером?

  2. #2
    Пользователь
    Регистрация
    12.07.2007
    Адрес
    Воронеж
    Сообщений
    882

    По умолчанию

    Все с таймером хорошо. Просто он так не умеет.
    Нельзя TON остановить или продолжить.
    Нужен другой таймер с паузой.

  3. #3

    По умолчанию

    Да мне и не надо его продолжать, мне надо чтоб он считал в соответствии со своим входом IN. Просто получается так, что таймер используется в функциональном блоке, в котором есть Retain переменные, и CoDeSys автоматом объявляет все внутри этого блока как Retain. Соответственно после передергивания питания все таймеры, которые есть в этом блоке, оказываются сработавшими.

  4. #4

    По умолчанию

    В догонку, и возможно это является причиной - также странно ведет себя функция TIME(), которая должна возвращать количество миллисекунд, которое прошло от момента подачи питания:
    Вот что получается сразу после подачи питания:
    Снимок2.PNG
    Какое то огромное число она возвращает, а секунд через 15..20 благополучно сбрасывается в 0 и начинает считать сначала:
    Снимок3.PNG
    Где-то на форуме промелькнуло, что таймеры из Standard.lib работают, основываясь на этом системном счетчике - может поэтому и таймер срабатывает, т.к. текущее время контроллера в будущее улетает сначала?

    PS. Это TIME() не в будущее улетает, это она показывает минус 23 секунды (DINT), потом досчитывает до FFFF FFFF, переходит через 0 и тогда уже нормально считает.
    Очень бы хотелось увидеть комментарий от разработчиков - это нормальное поведение или ошибка?

    PPS. Сделал блокировку - не разрешаю работать таймерам, пока TIME() не перейдет через 0 - и проблема с таймерами ушла! Но ведь костыль это...
    Последний раз редактировалось Мамонов Михаил; 26.12.2019 в 02:08.

  5. #5

    По умолчанию

    Почему то все отвечающие отвечают на вопрос, который сами себе придумали... Ну либо я слишком многословно написал. И знаю я про целое беззнаковое и как в нем TIME хранится.
    Вопрос - почему TIME() при включении контроллера начинает считать не с нуля, а с минус 23 секунд? Я в первом цикле ПЛК получаю TIME() и сохраняю в переменной DWORD - так вот там число 4294944319. Почему? Я как то был уверен что при подаче питания там 0 должен был быть.
    Да, проверил что дает TIME() в первом цикле в ПЛК100 и в ПЛК110-32 старом - там все четко начинается 0

    Что до таймеров - так те, которые объявлены как retain, сходят с ума при подаче питания, пока TIME() не дойдет до 0. Вот проблему с ними мне и надо решить.
    Последний раз редактировалось Мамонов Михаил; 26.12.2019 в 13:16.

  6. #6

    По умолчанию

    Если не сложно - можете на живом ПЛК110 [M02] написать вот такую программку:
    Снимок0.PNG
    и объяснить, почему таймер, ET которого при выключении питания показывал, скажем, секунд 10, при включении питания покажет 10 минут и выход Q таймера будет True?
    Может я чего и не понимаю в работе ПЛК, но на ПЛК100 и ПЛК110-32 старой версии после включения ПЛК таймер продолжает считать с того времени, на котором его выключили, а вот в ПЛК110 [M02] сразу срабатывает? В общем то это и был изначальный вопрос.

    И да, собственно TIME() меня как то не сильно волнует, просто предположил, что это причина такого поведения таймеров. Дальше про нее можно забыть, пусть считает как может.
    Последний раз редактировалось Мамонов Михаил; 26.12.2019 в 14:37.

  7. #7

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    По той же причине, по которой 12-00 Владика +10 часов не есть 22-00 по Москве.
    Тогда спрошу по другому - почему в разных моделях ПЛК таймеры ведут себя по разному? Это нормально?
    Вот опять всплывет база "TIME()" - в старых контроллерах она стартовала с нуля, а в новых чуть раньше нуля - не в этом ли причина?
    Предстваьте этот бедный таймер в ПЛК110[М02] - когда ему выключали питание, у него значение TIME() было секунд 10-20, а когда включили обратно - стало 49 дней. И что ему с этим делать? А теперь в ПЛК100 - при отключении было 10сек, при включении стало 0 - ну и будет считать себе дальше до уставки.
    И все зло от того, что GoDeSys самовольно обозвала этот таймер retain-ом, т.к. в ФБ, в который он входит, есть несколько retain-переменных. А таймеру то этот retain не нужен совсем...

    В общем, пока сделал проще - на первом цикле ПЛК у всех проблемных таймеров дергаю IN в False и обратно в True - и таймеры честно начинают считать сначала.

  8. #8

    По умолчанию

    Ну как бы из справки CoDeSys:
    "Энергозависимыми или независимыми могут быть переменные и функциональные блоки. Чтобы сделать переменную энергонезависимой, при её объявлении добавьте слово RETAIN. Если хотя бы одна такая переменная объявлена внутри блока, то весь функциональный блок с остальными переменными становится энергонезависимым."
    У меня внутри ФБ есть и RETAIN-переменные, и таймеры. Следовательно, в том числе и все таймеры этого блока стали энергонезависимыми. Не так разве?

  9. #9

    По умолчанию

    Тогда если можете подсказать - как лучше решить такую задачу:
    Есть несколько одинаковых установок, управляемых ПЛК. Алгоритм этих установок одинаковый, количество меняется от проекта к проекту. В алгоритме каждой установки есть некоторое количество задержек времени (TON), и есть энергонезависимые защелки, счетчики и т.п., которые запоминают состояния алгоритма на случай отключения питания. Как лучше реализовать такую систему?
    Мне показалось естественным создать функциональный блок, который выполняет требуемый алгоритм, вставить требуемое количество таких блоков в проект ПЛК и связать блоки с входами-выходами ПЛК. Да, поскольку внутри блоков есть Retain, CoDeSys сделала Retain все блоки целиком, но запас по объему памяти Retain-ов еще приличный, я особо не беспокоился.
    Такие проекты уже много лет работали на контроллерах ПЛК110 [M01]. При переходе на [M02] ФБ правильно функционировать отказались, и теперь я ищу почему. Первое на что наткнулся - на изменившееся поведение таймеров.

  10. #10

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Не нужен ретайн-таймер - объявляете его вне фб-блока. В чем проблема-то ?
    Не нужен. Но вся идея этого ФБ в выполнении алгоритма с кучей задержек. Если вынести из него таймеры - ФБ не останется. И ретейны тоже не вынести, их там много.

    Цитата Сообщение от Валенок Посмотреть сообщение
    В чем самовольно если доки сами доки и цитируете?
    Ну скажем так, не самовольно, но принудительно.
    А вообще не рассчитывал, что программа, годами работающая на одной версии ПЛК, может отказаться на работать на другой, но под той же версией среды программирования и с теми же библиотеками.

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

Похожие темы

  1. Странное поведение при симуляции
    от Serhioromano в разделе Среда программирования OWEN Logic
    Ответов: 2
    Последнее сообщение: 19.11.2017, 14:37
  2. Странное поведение ТРМ151
    от Evgeny Cherednichenko в разделе Эксплуатация
    Ответов: 6
    Последнее сообщение: 23.12.2014, 22:53
  3. странное поведение энкодера
    от woffka в разделе ПЛК1хх
    Ответов: 14
    Последнее сообщение: 06.11.2009, 09:46
  4. Странное поведение МВУ8
    от Benick в разделе Мх110
    Ответов: 4
    Последнее сообщение: 23.01.2008, 16:23
  5. Странное поведение МВУ8
    от Benick в разделе Эксплуатация
    Ответов: 4
    Последнее сообщение: 23.01.2008, 16:23

Ваши права

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