Рампа с заданием скорости увеличения/уменьшения:
Код:
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