Цитата Сообщение от EFrol Посмотреть сообщение
Здесь пример таймера, реализованного прямо в панели.
Такой же таймер для ПР:
Owen.jpg

Код:
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