public double CalculateResult(double inputValue, double dt, EmelentP p, ElementI i, ElementD d, int iteration, double maxOutputValue, double minOutputValue) { double proportionalElementResult = p.CalculateResult(inputValue); inputSum += inputValue; double integratingElementValue = i.CalculateResult(inputValue, p, dt, inputSum); double derivativeElementValue = 0d; if (iteration != 0) { derivativeElementValue = d.CalculateResult(inputValue, p, dt, lastInputValue); } double controllerOutputValue = proportionalElementResult + integratingElementValue + derivativeElementValue; lastInputValue = inputValue; if (controllerOutputValue > maxOutputValue) { return(maxOutputValue); } if (controllerOutputValue < minOutputValue) { return(minOutputValue); } return(controllerOutputValue); }
public double CalculateResult(double inputValue, EmelentP p, double dt, double inputSum) { if (Ki == 0) { return(0); } return(p.Kp * dt / Ki * inputSum); }
public double CalculateResult(double inputValue, EmelentP P, double dt, double lastInputValue) { if (Kd == 0) { return(0); } else { return(1d / dt * P.Kp * Kd * (inputValue - lastInputValue)); } }