0.0); RETURN; END_IF // Calculate diff to target _rDiff := rTarget - _rOut; // Check if we need to ramp up or down IF _rDiff > 0 THEN // Ramp up _rStep := ABS(rRiseRate) * _rT; // Clamp to target value IF _rStep > _rDiff THEN _rOut := rTarget; ELSE _rOut := _rOut + _rStep; END_IF ELSIF _rDiff < 0 THEN // Ramp down _rStep := ABS(rFallRate) * _rT; // Clamp to target value IF _rStep > ABS(_rDiff) THEN _rOut := rTarget; ELSE _rOut := _rOut - _rStep; END_IF END_IF // Handle busy flag xBusy := (ABS(rTarget - _rOut) > 0.0); // Copy internals to outputs rOut := _rOut;]]>