Ну вот в теме блок на ST и есть, который работает строго по start и начинает сначала.
Ну вот в теме блок на ST и есть, который работает строго по start и начинает сначала.
Bad programmers worry about the code. Good programmers worry about data structures and their relationships
среди успешных людей я не встречала нытиков
Барбара Коркоран
Мне интересно моя реализация блинка имеет право на жизнь или нет? Может я что то не учел? Может есть более тонкая реализация которую я пока не способен осознать с моим уровнем знаний?
http://www.owen.ru/forum/showthread....l=1#post225593
Последний раз редактировалось Kostennikov; 01.11.2016 в 11:26.
я не силен в ST, но ваш вариант работает так же как в других ПО, то есть при start = true начинается новый отсчет...
Ну да. при старт = 0 . возвращается состояние исходное. при повторном все сначала
Хотя вот заметил если вызывать мой блинк в каком нибудь if или case то отсчет начинается с начала но таймер не останавливается хотя выход у него при страт =0 возвращается в исходное состояние и последующий вызов не вызывает проблем.
если вызов в основном цикле плк как в приложении то таймер останавливается...
Ну это я так понимаю потому что Starttime таймера останавливается
Последний раз редактировалось Kostennikov; 01.11.2016 в 11:55.
В общем почитал, посмотрел как таймеры устроены, немного напрягся и родил таймер. Проще брать значения времени отсчёта таймера и суммировать с тем ,что было. Запоминаем сколько времени осталось отсчитать и сколько прошло, если таймер не досчитал до конца просто суммируем отработанное время. Можно как вариант привязывать к внутреннему времени, это если брать исходник таймера. А писать таймеры на основе цикла не имеет смысла т.к. неплохо так накапливается ошибка.
R_TRIG1(CLK:=on AND TIME_TO_DWORD(TIME())MOD 1000>500);
IF on AND time_in<>sec AND NOT pause THEN
sec:=sec + BOOL_TO_DWORD(R_TRIG1.Q);
ELSIF on AND time_in<>sec AND pause THEN
sec:=sec;
ELSIF on AND time_in=sec AND NOT pause THEN
sec:=0;
END_IF;
а так не пойдет?
sec:=sec + BOOL_TO_DWORD(R_TRIG1.Q) ,что значит сиё дествие? не понимаю как двойное слово и секунды дружаться
Dword выбран из за верхнего предела можно DINT поставить sec тоже Dword