quote:以下是引用eastar在2009-09-26 09:51:29的发言:
X1:= fValvePositionSV- fValvePositionPV;
IF X1>0.0 THEN k1:=1.0;END_IF;
IF X1<0.0 THEN k1:=-1.0;END_IF;
IF X1=0.0 THEN k1:=0.0;END_IF;
IF X1>=-0.001 AND X1<=0.001 THEN temp:=temp+K1*0.01;END_IF;
IF ((X1>=-0.005 AND X1<-0.001) OR ( X1>0.001 AND X1<=0.005))THEN temp:=temp+k1*0.02;END_IF;
IF ((X1>=-0.01 AND X1<-0.005) OR ( X1>0.005 AND X1<=0.01))THEN temp:=temp+k1*0.05;END_IF;
IF ((X1>=-0.03 AND X1<-0.01) OR ( X1>0.01 AND X1<=0.03))THEN temp:=temp+k1*0.1;END_IF;
IF ((X1>=-0.06 AND X1<-0.03) OR ( X1>0.03 AND X1<=0.06))THEN temp:=temp+k1*0.2;END_IF;
IF ((X1>=-0.1 AND X1<-0.06) OR ( X1>0.06 AND X1<=0.1))THEN temp:=temp+k1*0.3;END_IF;
IF ((X1>=-0.2 AND X1<-0.1) OR ( X1>0.1 AND X1<=0.2))THEN temp:=temp+k1*0.5;END_IF;
IF ((X1>=-0.4 AND X1<-0.2) OR ( X1>0.2 AND X1<=0.4))THEN temp:=temp+k1*0.8;END_IF;
IF ((X1>=-0.6 AND X1<-0.4) OR ( X1>0.4 AND X1<=0.6))THEN temp:=temp+k1*1.0;END_IF;
IF ((X1>=-0.8 AND X1<-0.6) OR ( X1>0.6 AND X1<=0.8))THEN temp:=temp+k1*1.2;END_IF;
IF ((X1>=-1.0 AND X1<-0.8) OR ( X1>0.8 AND X1<=1.0))THEN temp:=temp+k1*1.5;END_IF;
IF ((X1>=-2.0 AND X1<-1.0) OR ( X1>1.0 AND X1<=2.0))THEN temp:=temp+k1*2.0;END_IF;
IF ((X1>=-3.0 AND X1<-2.0) OR ( X1>2.0 AND X1<=3.0))THEN temp:=temp+k1*4.0;END_IF;
IF ((X1>=-5.0 AND X1<-3.0) OR ( X1>3.0 AND X1<=5.0))THEN temp:=temp+k1*6.0;END_IF;
IF ((X1>=-7.0 AND X1<-5.0) OR ( X1>5.0 AND X1<=7.0))THEN temp:=temp+k1*8.0;END_IF;
IF ((X1>=-10.0 AND X1<-7.0) OR ( X1>7.0 AND X1<=10.0))THEN temp:=temp+k1*12.0;END_IF;
IF ((X1>=-13.0 AND X1<-10.0) OR ( X1>10.0 AND X1<=13.0))THEN temp:=temp+k1*30.0;END_IF;
IF ((X1>=-16.0 AND X1<-13.0) OR ( X1>13.0 AND X1<=16.0))THEN temp:=temp+k1*15.0;END_IF;
IF ((X1>=-20.0 AND X1<-16.0) OR ( X1>16.0 AND X1<=20.0))THEN temp:=temp+k1*20.0;END_IF;
IF ((X1>=-25.0 AND X1<-20.0) OR ( X1>20.0 AND X1<=25.0))THEN temp:=temp+k1*25.0;END_IF;
IF ((X1>=-30.0 AND X1<-25.0) OR ( X1>25.0 AND X1<=30.0))THEN temp:=temp+k1*30.0;END_IF;
IF ((X1>=-100.0 AND X1<-30.0) OR ( X1>30.0 AND X1<=100.0))THEN temp:=temp+k1*35.0;END_IF;
Output:=temp;
IF Output<0.0 THEN
Output:= 0.0;
ELSE
IF Output>100.0 THEN
Output:=100.0;
END_IF;
END_IF;
可以试一下这个,或许能解决问题,没有了pid调节那种过调刹车式的波动,随时调节。
这个在PLC里做更好,如果系统没有延迟或延迟小用这个应该响应快的