PDA

Просмотр полной версии : таймер обратного отсчёта с возможностью установки в формате ЧАС : МИН : СЕК



LogikASUTP
27.05.2025, 11:23
Всем добрый день.
Нужен таймер обратного отсчёта с возможностью уставки в формате ЧАС : МИН : СЕК на ST?
что бы задавать время с панели ПР307
существует ли похожее готовое решение?

1exan
27.05.2025, 12:46
Переводите свои "ЧАС : МИН : СЕК" в TIME(мсек) и используйте стандартный TON из ST

LogikASUTP
27.05.2025, 14:52
это при вводе данных, да понятно. А как быть при отображении обратного отсчёта?

kondor3000
27.05.2025, 16:19
Всем добрый день.
Нужен таймер обратного отсчёта с возможностью уставки в формате ЧАС : МИН : СЕК на ST?
что бы задавать время с панели ПР307
существует ли похожее готовое решение?

Таймер прямого и обратного отсчёта с задачей времени и памятью наработки____ https://owen.ru/forum/showthread.php?t=36900&p=461025&viewfull=1#post461025

LogikASUTP
27.05.2025, 23:13
Огромное вам спасибо. Очень круто. То что надо.

LogikASUTP
27.05.2025, 23:21
Таймер прямого и обратного отсчёта с задачей времени и памятью наработки____ https://owen.ru/forum/showthread.php?t=36900&p=461025&viewfull=1#post461025

сколько времени ушло на то что бы придумать такое?

LogikASUTP
27.05.2025, 23:26
Таймер прямого и обратного отсчёта с задачей времени и памятью наработки____ https://owen.ru/forum/showthread.php?t=36900&p=461025&viewfull=1#post461025

когда до 0 доходит за ново сам запускается. Так задумано?

kondor3000
28.05.2025, 07:59
когда до 0 доходит за ново сам запускается. Так задумано?Добрый вечер. Очень благодарен вам за код обратного таймера.

но когда начинаю объявлять локальные переменные, codesys начинает ругаться на две последние строчки:

CTU1: SYS.CTN; TON: SYS.TON;
R_TRIG, R_Trig1 : SYS.RTRIG; F_trig1 : SYS.FTRIG;

подскажите как объявить эти переменные в codesys 2.3?

В codesys 2.3 нет SYS.CTN; SYS.TON и SYS.RTRIG SYS.FTRIG; , надо заменить на TON и R_TRIG, F_TRIG, а счётчик нужно сделать свой 32 битный.(код ниже)
GET_TIME() заменить на TIME()
Сброс при 0 можно добавить.




function_block CTN (*// CTN *)

var_input
U : bool;
D : bool;
Res : bool;
N : udint;
end_var

var_output
Q : udint;
end_var

var
RT: bool; (*//переменная для определения переднего фронта на входе «U» *)
x:bool:=true;
end_var
__________________________________________________ __
if Res or x then
Q := N; x:=false;end_if

if U and not RT and not Res then
Q := (Q + 1); RT := U; end_if

if D and not RT and not Res then
Q := (Q - 1); RT := D; end_if

if not U and not D and RT then
RT := false; end_if

LogikASUTP
28.05.2025, 10:44
В codesys 2.3 нет SYS.CTN; SYS.TON и SYS.RTRIG SYS.FTRIG; , надо заменить на TON и R_TRIG, F_TRIG, а счётчик нужно сделать свой 32 битный.(код ниже)
GET_TIME() заменить на TIME()
Сброс при 0 можно добавить.




function_block CTN (*// CTN *)

var_input
U : bool;
D : bool;
Res : bool;
N : udint;
end_var

var_output
Q : udint;
end_var

var
RT: bool; (*//переменная для определения переднего фронта на входе «U» *)
x:bool:=true;
end_var
__________________________________________________ __
if Res or x then
Q := N; x:=false;end_if

if U and not RT and not Res then
Q := (Q + 1); RT := U; end_if

if D and not RT and not Res then
Q := (Q - 1); RT := D; end_if

if not U and not D and RT then
RT := false; end_if




огромное спасибо вам за помощь

kondor3000
28.05.2025, 20:06
огромное спасибо вам за помощь

На всякий случай, вот проект в Codesys 2.3, счётчик и выход кол-ва включений, запоминаются в RETAIN. 84049
ПЛК можно заменить на любой другой.

LogikASUTP
28.05.2025, 22:31
На всякий случай, вот проект в Codesys 2.3, счётчик и выход кол-ва включений, запоминаются в RETAIN. 84049
ПЛК можно заменить на любой другой.

бесконечно вам признателен вы дарите время на сон!

ещё подскажите к чему прицепить в вашем коде "флаг" об окончании отсчёта и как остановить при достижении нолей?

kondor3000
29.05.2025, 08:03
бесконечно вам признателен вы дарите время на сон!

ещё подскажите к чему прицепить в вашем коде "флаг" об окончании отсчёта и как остановить при достижении нолей?

Например так, и флаг и остановка Reset 84064
Можно сделать сброс через второй R_TRIG или всё запихнуть прямо в ФБ

LogikASUTP
29.05.2025, 09:14
Например так, и флаг и остановка Reset 84064
Можно сделать сброс через второй R_TRIG или всё запихнуть прямо в ФБ

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

kondor3000
29.05.2025, 09:55
Да спасибо.
Просто думал в самом коде его вкорячить что бы он на выходе блока был.

Кто мешает? 3- 4 строчки на ST, пробуйте,
2 половина кода
Reset:=(Tyme1=0);

LogikASUTP
30.05.2025, 09:14
Кто мешает? 3- 4 строчки на ST, пробуйте,
2 половина кода
Reset:=(Tyme1=0);

Спасибо Вам за ответ, я уже фбдшек нагромоздил. Сейчас уже дальше ушёл, при возможности обязательно протестирую.


не подскажете есть ли готовые решения для обработки аналогового сигнала 4-20?

kondor3000
30.05.2025, 14:36
Спасибо Вам за ответ, я уже фбдшек нагромоздил. Сейчас уже дальше ушёл, при возможности обязательно протестирую.


не подскажете есть ли готовые решения для обработки аналогового сигнала 4-20?

Какой конкретно обработки?
Есть Scale (oscat_basic_333.lib) для масштабирования и перевода единиц, хотя масштабирование можно сделать и на аналоговом входе. Хотя лучше написать свой Scale.
есть RAMP_REAL (Util.lib) для плавного изменения на выходе.

Если вы измените код одного ФБ, все остальные экземпляры автоматически изменятся тоже.