PDA

Просмотр полной версии : ПР205(slave)+СП307б - Реализация программного таймера процесса



КАТРАН
25.02.2026, 06:54
Добрый день! Искал в существующих компонентах, не смог найти. Может кто-то уже решил задачу (написал макрос) и сможет им поделиться. Задача: создать программный таймер процесса, время работы таймера инкрементируется/декрементируется с программных кнопок панели СП307б с определённым шагом, далее после установки нужного времени работы программной кнопкой с панели запускается процесс, пока таймер активен на дискретном выходе держится логическая единица, индикатор работы тэга кнопки запуска также удерживается в единице. После отработки времени таймера на дискретном выходе состояние сбрасывается в ноль, состояние индикатора кнопки также сбрасывается в ноль.

EFrol
25.02.2026, 07:52
Здесь пример таймера, реализованного прямо в панели.

kondor3000
25.02.2026, 07:56
Добрый день! Искал в существующих компонентах, не смог найти. Может кто-то уже решил задачу (написал макрос) и сможет им поделиться. Задача: создать программный таймер процесса, время работы таймера инкрементируется/декрементируется с программных кнопок панели СП307б с определённым шагом, далее после установки нужного времени работы программной кнопкой с панели запускается процесс, пока таймер активен на дискретном выходе держится логическая единица, индикатор работы тэга кнопки запуска также удерживается в единице. После отработки времени таймера на дискретном выходе состояние сбрасывается в ноль, состояние индикатора кнопки также сбрасывается в ноль.

Здесь простые таймеры, таймеры с задачей времени и наработкой, универсальный таймер, программные таймеры https://owen.ru/forum/showthread.php?t=37203&page=9&p=429061#81

КАТРАН
25.02.2026, 21:03
Штуки интересные есть, но почему то ни одна из них не реализована именно как таймер, с выходным воздействующим сигналом любого типа, и да, почему-то таймер переходит за ноль. 88262

kondor3000
25.02.2026, 21:14
Штуки интересные есть, но почему то ни одна из них не реализована именно как таймер, с выходным воздействующим сигналом любого типа, и да, почему-то таймер переходит за ноль. 88262

Вы универсальный таймер используете не совсем правильно. Задача меньше наработки, отсюда переполнение. Он сделан для отсчёта заданного времени, в примере 100 часов и наработка не может быть больше, иначе её надо обнулить (вход Res).
Для наработки лучше используйте Опер таймер, там счёт идёт пока есть 1 на входе и пауза когда на входе 0.
ФБ Опер Таймер (наработка) вариант 3 https://owen.ru/forum/showthread.php?t=38721#8
А сделать любой выход, одна строка в ФБ.

TON, TOF и TP по ссылке тоже считают время, в отличие от стандартных.

По первому посту вам надо типа такого, Простой шаговый автомат https://owen.ru/forum/showthread.php?t=38239&page=43#424
или тут
Шаговик попроще (задачу времени можно сделать как вам надо, по кнопкам +/-, отдельно часы и минуты, или просто всё перевести в секунды)
или посложнее
Прогр. управление 6 нагрузками, 6 режимов по 12 шагов _ФБ_фунции__https://owen.ru/forum/showthread.php?t=38239&page=11#105

EFrol
26.02.2026, 07:45
Здесь пример таймера, реализованного прямо в панели.

Такой же таймер для ПР:
88263



function_block TMR_Run

var_input
ctrl_in : udint;
delta : udint;
end_var

var_output
TMR : udint;
ctrl_out : udint;
end_var

var
rtInc, rtDec : SYS.RTRIG;
tmrSec : SYS.TON;
end_var

rtInc(I:=ctrl_in.0); rtDec(I:=ctrl_in.1); // Фиксируем нажатие кнопок

if rtInc.Q then TMR := TMR + delta; end_if // +10 к TMR
if rtDec.Q then // -10 или 0 в TMR
if TMR >= delta then
TMR := TMR - delta;
else
TMR := 0;
end_if
end_if

ctrl_out := ctrl_in; // Продублируем на выход
ctrl_out.2 := ctrl_out.2 and (TMR > 0); // Сбросить бит запуска при TMR = 0

if ctrl_out.2 then // Бит запуска активен
tmrSec(I:=true, T:=T#1s); // Отсчитываем 1сек
if tmrSec.Q then
TMR := TMR - 1; tmrSec(I:=false); // Декремент TMR и перезапуск секундного таймера
end_if
end_if

end_function_block