Цитата Сообщение от EFrol Посмотреть сообщение
Учиться лучше на примерах. Это пример на ST из OL. Попробуйте портировать в CDS.
Код:
function_block Fix
    
    var_input
        in : bool;              // Вход события для фиксации
    end_var
    
    var_output 
        Q : udint;              // Зафиксированный номер текущего клапана
        V1, V2, V3, V4 : bool;  // Выхода клапанов
    end_var
    
    var 
        tmr : SYS.TON;          // Таймер
        nV : udint := 1;        // Номер текущего клапана
        rtIN : SYS.RTRIG;       // Фиксатор нажатия кнопки in
    end_var

    tmr(I:=true, T:=T#60s);     // Таймер все время в работе
    if tmr.Q then               // Пришло время сменить клапан
        tmr(I:=false);                  // Перезапуск таймера
        nV := nV + 1;                   // Следующий клапан
        if nV > 4 then nV := 1; end_if  // Циклически
    end_if

    // Включаем клапан по номеру в nV
    V1 := false; V2 := false; V3 := false; V4 := false;
    case nV of
        1: V1 := true;
        2: V2 := true;
        3: V3 := true;
        4: V4 := true;
    end_case

    // Фиксируем при каждом нажатии номер текущего клапана
    rtIN(I:=in);
    if rtIN.Q then Q := nV; end_if

end_function_block
Кажется, это то, что надо.
Спасибо всем, кто откликнулся!