|
PID的无扰动切换,简而言之就是手动调节切换到自动调节时,自动调节积分项从当前手动输出开始,就是将当前输出给积分初始化。
手上有个倍福plc项目,用变频风机调节管道气体温度,我在调用系统PID库指令时,发现积分项被定义成静态变量,从库指令外部根本没法对积分项操作,如此简单的需求,居然不能实现,只好用自己动手写一段PID程序:
1,先定义PID接口
FUNCTION_BLOCK PID
VAR_INPUT
Man_Auto:BOOL;
Man_Value:REAL;
PVn : REAL;
SPn :REAL;
Kc :REAL;
Ts :REAL;
Ti :REAL;
Td :REAL;
END_VAR
VAR_OUTPUT
Mn :REAL;
END_VAR
VAR
ManAutoLast:BOOL;
AutoEdge:BOOL;
Mx:REAL;
EVn:REAL;
EVn0:REAL;
MPn:REAL;
MDn:REAL;
END_VAR
(********)
2,PID程序:
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);
EVn0:=EVn;
END_IF
|
|