Пример #1
0
        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);
        }
Пример #2
0
 public double CalculateResult(double inputValue, EmelentP p, double dt, double inputSum)
 {
     if (Ki == 0)
     {
         return(0);
     }
     return(p.Kp * dt / Ki * inputSum);
 }
Пример #3
0
 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));
     }
 }