Рампа с заданием скорости увеличения/уменьшения:
Код:
FUNCTION RAMP : REAL;
VAR_INPUT
    Q_FB    : REAL; (* Значение выхода на предыдущем цикле (ОС с задержкой с выхода функции) *)
    X       : REAL; (* Входное значение *)
    VU_MAX  : REAL; (* Скорость увеличения *)
    VD_MAX  : REAL; (* Скорость уменьшения *)
    CYCLE   : REAL; (* Цикл, в СЕК *)
    RST     : BOOL; (* Сброс *)
    
END_VAR


    IF 0.0 > VU_MAX THEN VU_MAX := 0.0; END_IF
    IF 0.0 > VD_MAX THEN VD_MAX := 0.0; END_IF
    
    IF RST THEN
        RAMP := X;
        
    ELSIF X > Q_FB THEN
        VU_MAX := VU_MAX * CYCLE;
        VD_MAX := X - Q_FB;
        IF VU_MAX > VD_MAX THEN VU_MAX := VD_MAX; END_IF  
        RAMP := Q_FB + VU_MAX;
        
    ELSIF X < Q_FB THEN
        VD_MAX := -1.0 * VD_MAX * CYCLE;
        VU_MAX := X - Q_FB;
        IF VD_MAX < VU_MAX THEN VD_MAX := VU_MAX; END_IF
        RAMP := Q_FB + VD_MAX;
        
    ELSE 
        RAMP := X;
        
    END_IF
    
END_FUNCTION