//**********************标准PID算法********************************************
#PID.Thershold:=20.0;
#PID.Alpha := 0.2;
#PID.MDp := #PID.MDn;
#PID.Epp := #PID.Ep;
#PID.Ep := #PID."En";
#PID.dEp := #PID.dEn;
#PID.SVn := #SV;
#PID.PVn := #PV;
#PID.KP := (#PID.Kc); //比例系数
#PID.KI := (#PID.KP) * (#PID.Ts) / (#PID.Ti); //积分系数
#PID.KD := (#PID.KP) * (#PID.Td / #PID.Ts); //微分系数
#PID."En" := #PID.SVn - #PID.PVn; // 偏差E(t)
#PID.dEn := (#PID."En" - #PID.Ep); //E(t)-E(t-1)
#PID.dtEn := #PID.dEn / #PID.Ts;
#PID.MPn := #PID.KP * (#PID."En"); //比例项
// pid.MDn := pid.KD * (pid.En - pid.Ep); //完全微分项
// pid.MDn := pid.KD * (pid.PVp - pid.PVn); //完全微分项 SVn:=SVp
#PID.MDn := (1.0 - #PID.Alpha) * #PID.KD * (#PID."En" - #PID.Ep) + #PID.Alpha * #PID.MDp; //不完全微分项
IF (#PID.PVn < (#PID.SVn - #PID.Threshold)) THEN
#PID.Beta := 0; //积分分离系数
ELSE
#PID.Beta := 1.0;
END_IF;
IF (#PID.MX > #PID.PIDMax) THEN
#PID.MX := #PID.PIDMax;
ELSIF (#PID.MX < (#PID.PIDMin)) THEN
#PID.MX := (#PID.PIDMin);
END_IF;
IF (#PID.MIn >= #PID.PIDMax) THEN//抗积分饱和
//pid.MIn:=pid.PIDOutMax-(pid.MPn+pid.MDn);
#PID.MIn := #PID.PIDMax;
ELSIF (#PID.MIn < (#PID.PIDMin)) THEN
#PID.MIn := (#PID.PIDMin);
ELSE
#PID.MIn := #PID.Beta * (#PID.KI * (#PID."En" + #PID.Ep) / 2 / 2 + #PID.MX);
#PID.MX := #PID.MIn;
END_IF;
IF (#PID.PVn < (#PID.SVn - #PID.Threshold)) THEN
#PID.PIDMV := (#PID.MPn + #PID.MDn);
ELSE
#PID.PIDMV := (#PID.MPn + #PID.MIn + #PID.MDn);
END_IF;
IF (#PID.PIDMV >= #PID.PIDOutMax) THEN
#PID.PIDMV := #PID.PIDOutMax;
ELSIF (#PID.PIDMV <= #PID.PIDOUTMin) THEN
#PID.PIDMV := #PID.PIDOUTMin;
END_IF;
#PID.MVOut := #PID.PIDMV;
#PID.OUTn := #PID.MVOut;
//**********************标准PID算法End********************************************