AutoEdge:= ManAutoLast AND (NOT Man_Auto ); (***手动转自动上升沿**) ManAutoLast:=Man_Auto; IF AutoEdge THEN Mx:= LIMIT(20.0,Man_Value,60.0); (*自动调节时,积分初始化*) END_IF
IF Man_Auto THEN Mn:= LIMIT(20.0,Man_Value, 60.0); (*手动调节时给定值*) ELSE EVn:=(SPn - PVn ) ; (*自动调节PID计算*) MPn := LIMIT(-60.0,(Kc * EVn),60.0) ; (*设置比例项的边界*) IF Mn>0.0 AND Mn<100.0 THEN (*为防止积分饱和,设置冻结积分计算的条件*) Mx:=LIMIT(18.0,( Kc*Ts/Ti*EVn+Mx), 100.0); (*积分项计算公式,并设置边界*) END_IF MDn := Kc * Td / Ts * (EVn - EVn0); Mn:=LIMIT(18.0,(MPn+Mx+MDn),60.0); (*PID计算:= 比例项+积分项+微分项;积分项是主干*) EVn0:=EVn; END_IF
AutoEdge:= ManAutoLast AND (NOT Man_Auto ); (***手动转自动上升沿**) ManAutoLast:=Man_Auto; IF AutoEdge THEN Mx:= LIMIT(20.0,Man_Value,60.0); (*自动调节时,积分初始化*) END_IF
IF Man_Auto THEN Mn:= LIMIT(20.0,Man_Value, 60.0); (*手动调节时给定值*) ELSE EVn:=(SPn - PVn ) ; (*自动调节PID计算*) MPn := LIMIT(-60.0,(Kc * EVn),60.0) ; (*设置比例项的边界*) IF Mn>0.0 AND Mn<100.0 THEN (*为防止积分饱和,设置冻结积分计算的条件*) Mx:=LIMIT(18.0,( Kc*Ts/Ti*EVn+Mx), 100.0); (*积分项计算公式,并设置边界*) END_IF MDn := Kc * Td / Ts * (EVn - EVn0); Mn:=LIMIT(18.0,(MPn+Mx+MDn),60.0); (*PID计算:= 比例项+积分项+微分项;积分项是主干*) EVn0:=EVn; END_IF