Просмотр полной версии : Чтение прошедшего времени с таймера TON
asu.optim-toledo
04.10.2024, 15:57
Здравствуйте. Возможно ли с таймера считать сколько времени прошло (в идеале, сколько времени осталось)? Задача: как то вывести на экран сколько времени осталось до конца таймера.
Задумкин Сергей
04.10.2024, 15:59
Здравствуйте. Возможно ли с таймера считать сколько времени прошло (в идеале, сколько времени осталось)? Задача: как то вывести на экран сколько времени осталось до конца таймера.
wCoolDownTimeLeft := DWORD_TO_WORD((60000*WORD_TO_DWORD(wCoolDownTime) - TIME_TO_DWORD(fbCoolDownTimer.ET))/1000);
Из уставки таймера вычитаешь сколько уже прошло, получаешь сколько осталось. Предварительно все перевести в одни единицы (миллисекунды)
asu.optim-toledo
04.10.2024, 16:07
wCoolDownTimeLeft := DWORD_TO_WORD((60000*WORD_TO_DWORD(wCoolDownTime) - TIME_TO_DWORD(fbCoolDownTimer.ET))/1000);
Из уставки таймера вычитаешь сколько уже прошло, получаешь сколько осталось. Предварительно все перевести в одни единицы (миллисекунды)
А в FBD это можно сделать? у меня тут для чтения только уставка доступна.
79079
Если имеется в виду Лоджик, то нельзя. Надо свой таймер писать - если достаточно секунд, то на FBD, если нужны миллисекунды - тогда ST
asu.optim-toledo
04.10.2024, 16:14
Если имеется в виду Лоджик, то нельзя. Надо свой таймер писать - если достаточно секунд, то на FBD, если нужны миллисекунды - тогда ST
Понял, спасибо.
kondor3000
04.10.2024, 17:07
Понял, спасибо.
Тут есть готовые таймеры на ST с выходом ET в сек. и мс, считывайте сколько насчитал таймер или PT - время таймера= сколько осталось
И не только таймеры, а разные примеры
https://owen.ru/forum/showthread.php?t=37203&page=9&p=429067#81
На FBD если для визуализации достаточно отсчётов в 1 секунду
79083
asu.optim-toledo
07.10.2024, 08:43
Спасибо всем ответившим! Уже нашел пример таймера на ST на канале ОВЕНа. Отдельное спасибо kondor3000 за ссылки, пригодятся.
Тут есть готовые таймеры на ST с выходом ET в сек. и мс, считывайте сколько насчитал таймер или PT - время таймера= сколько осталось
И не только таймеры, а разные примеры
https://owen.ru/forum/showthread.php?t=37203&page=9&p=429067#81
В продолжение темы таймеров на ST...
Для отсчёта времени в предлагаемых таймерах используется запоминание времени начала отсчёта и вычитание этого значения из текущего времени.
Возникает вопрос - как поведёт себя таймер при переполнении 32 разрядной переменной, т.е. когда Get_Time() вернёт значение меньшее, чем значение начала отсчёта?
Вопрос по причине необходимости сделать энергонезависимый таймер для многостадийной установки - при включении питания будет время стадии инициализации, потом может добавится время ожидания запроса работы и только после этого нужно досчитать остаток времени стадии, прерванной отключением электричества.
Т.е. придётся вручную нарисовать на ST таймер TON с подстановкой в него уже пройденного времени, основываясь на Get_Time.
Что будет при переполнении 32 разрядной переменной после 49d17h02m47s295ms? Будет сбой работы таймера или разность текущего и стартового времени будет корректной?
В продолжение темы таймеров на ST...
Для отсчёта времени в предлагаемых таймерах используется запоминание времени начала отсчёта и вычитание этого значения из текущего времени.
Возникает вопрос - как поведёт себя таймер при переполнении 32 разрядной переменной, т.е. когда Get_Time() вернёт значение меньшее, чем значение начала отсчёта?
Вопрос по причине необходимости сделать энергонезависимый таймер для многостадийной установки - при включении питания будет время стадии инициализации, потом может добавится время ожидания запроса работы и только после этого нужно досчитать остаток времени стадии, прерванной отключением электричества.
Т.е. придётся вручную нарисовать на ST таймер TON с подстановкой в него уже пройденного времени, основываясь на Get_Time.
Что будет при переполнении 32 разрядной переменной после 49d17h02m47s295ms? Будет сбой работы таймера или разность текущего и стартового времени будет корректной?
Разность будет корректной если пауза не превысит 49d17h02m47s295ms
79157
Спасибо
Думаю, не превысит - отсчёт прошедшего времени буду увеличивать каждый цикл.
kondor3000
07.10.2024, 22:12
В продолжение темы таймеров на ST...
Для отсчёта времени в предлагаемых таймерах используется запоминание времени начала отсчёта и вычитание этого значения из текущего времени.
Что будет при переполнении 32 разрядной переменной после 49d17h02m47s295ms? Будет сбой работы таймера или разность текущего и стартового времени будет корректной?
Для наработки лучше использовать другой подход. Таймер на 1 секунду, и считать сек., мин., часы. Такой подход есть у меня в примерах, самописный Опер таймер. Считает наработку и кол-во включений. Только входное время и включения добавить для сохранения.
Либо 2 вариант, плюсовать наработанные часы, каждый час, либо каждые 8 час., либо каждые 24 часа.
Сергей0308
07.10.2024, 22:33
Мой вариант в #170: https://owen.ru/forum/showthread.php?t=33720&page=17
С прямым и обратным отсчётом времени.
79163
Для наработки лучше использовать другой подход. Таймер на 1 секунду, и считать сек., мин., часы.
Нет, в данном моём случае, не для наработки.
Задача - установка, работающая циклично за 3-5 шагов. Кроме этих шагов есть ещё пара-тройка (инициализация, останов при отключении запроса).
Энергонезависимости в исходном ТЗ не было, более того - уточнял этот вопрос до начала работ.
Поэтому собрал обычный конечный автомат на CASE (в ST) с единым таймером для всех шагов.
После восстановления питание возобновление работы с прерванного шага сделать просто. А время - чуть сложнее, т.к. один таймер конечного автомата обслуживает и вспомогательные шаги и рабочий цикл. Т.е. при пуске в работу нужно восстанавливать и прошедшее в прерванном шаге время.
А уже вляпался в ST и всю энергонезависимость реализую через костыли и кодом собственного таймера TON.
Постараюсь отговорить заказчика от запоминания времени - шаги цикла короткие и их повторение с начала вреда не принесёт. Нет желания городить лишние сущности, да и в остальных аспектах - работа полностью завершена и проверена.
Наверное, сегодня в теме "Обсуждение макросов" поделюсь макросами моделирования объектов управления для отладки самодельных регуляторов - как аналоговых, так и 3-позиционных. Идею "подрезал" у "Семёна". Там использую таймер для отсчёта цикла пересчёта - как раз отсчёт "малыми порциями".
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot