计算机控制PID编程实现Word下载.docx
《计算机控制PID编程实现Word下载.docx》由会员分享,可在线阅读,更多相关《计算机控制PID编程实现Word下载.docx(5页珍藏版)》请在冰豆网上搜索。
三实验步骤1.对象动态特性实验
(1)差分方程见附录:
(2)编制程序如下:
#include“iostream.h“#include“fstream.h“voidmain(){fstreamoutfile(“data1.xls“,ios:
:
out);
inti,j;
intt;
for(j=0;
jj++){cout“输入采样周期:
“;
cint;
doubleu;
doubley;
for(i=0;
ii++){u[i]=1.0;
y[i]=0.0;
}for(i=2;
(i-2)*ti++){y[i]=u[i]/(1.0+100.0/t/t+20.0/t)-(100.0/t/t)*y[i-2]/(1.0+100.0/t/t+20.0/t)+(200.0/t/t+20.0/t)*y[i-1]/(1.0+100.0/t/t+20.0/t);
}for(i=1;
(i-1)*ti++)couty[i]'\t';
for(i=2;
(i-2)*ti++){outfile(i-2)*t'\t';
}outfile'\n';
for(i=1;
(i-1)*ti++){outfiley[i]'\t';
}outfile.close();
}(3)输出结果如下:
周期T=1:
00.***-*****0.***-*****0.***-*****0.0*****0.***-*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.9120XX年0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.98340.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****周期T=2:
00.***-*****0.***-*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****周期T=3:
00.***-*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****阶跃曲线图如下:
周期T分别1,2,3。
2.单回路PID控制实验
(1)工程整定程序如下:
#include“iostream.h“voidmain(){inti,k;
doublet,k1;
doublem,n,x,l,c,p,f,d;
doublej=0;
cout“输入采样周期:
doublee;
ii++){y[i]=u[i]/(1.0+100.0/t/t+20.0/t)-(100.0/t/t)*y[i-2]/(1.0+100.0/t/t+20.0/t)+(200.0/t/t+20.0/t)*y[i-1]/(1.0+100.0/t/t+20.0/t);
ii++){if(j=(y[i+1]-y[i])){j=y[i+1]-y[i];
k=i;
k1=(k-1)*t;
}}m=(y[k]+y[k+1])/2.0;
n=(2.0*k1+t)/2.0;
x=(y[k+1]-y[k])/t;
l=n-m/x;
c=(1.0-m)/x+n-l;
cout“最大值k1的取值及对应的输出值:
“k1'\t'y[k]'\t'y[k+1]'\n';
cout“斜率“xendl;
cout“延迟为“(l+t/2.0)'\n'“时间常数为“cendl;
cout“延迟/时间常数为“((l+t/2.0)/c)endl;
if(((l+t/2.0)/c)=0.2){p=0.38*(((l+t/2.0)/c)+0.88)/(((l+t/2.0)/c)-0.15);
f=0.81*c+0.19*(l+t/2.0);
d=0.25*c;
}else{p=1.2*c/(l+t/2.0);
f=2*(l+t/2.0);
d=0.5*(l+t/2.0);
}cout“整定参数为:
“endl;
cout“Kp=“pendl;
cout“Ti=“fendl;
cout“Td=“dendl;
}
(2)输出结果:
Kp=11.5323Ti=5.*****Td=1.*****注:
以上整定的参数是在采样周期T=1时候的结果,为简化处理,采用该参数作为PID调节器的参数。
3.具有积分分离的控制系统
(1)差分方程见附录:
#include“iostream.h“#include“math.h“#include“fstream.h“voidmain(){fstreamoutfile(“data1.xls“,ios:
inti,k,i1;
doublesx,aa,bb,cc,dd1,dd2,ee,ff;
doublej=0.0;
doubleu1;
doubley1;
doubler;
//以上为PID整定程序。
//以下为给定值阶跃程序。
aa=(1.0+10.0/t)*(1.0+10.0/t);
bb=20.0*(1.0+10.0/t)/t;
cc=100.0/t/t;
dd1=(1.0+t/f+d/t);
dd2=(1.0+d/t);
ee=(1.0+2.0*d/t);
ff=d/t;
cout“相关参数:
coutaa'\t'bb'\t'cc'\t'dd1'\t'dd2'\t'ee'\t'ffendl;
for(i1=0;
i1i1++){cout“输入积分限:
cinsx;
ii++){r[i]=1.0;
e[i]=0.0;
u1[i]=0.0;
y1[i]=0.0;
}u1=p*aa*dd1*r/(aa+p*dd1);
y1=0.0;
e=1.0;
if(sxfabs(e)){u1=u1*(aa+bb+p*ee)/(aa+p*dd2)+p/(aa+p*dd2)*(aa*dd2*r-(bb*dd2+aa*ee)*r);
}else{u1=u1*(aa+bb+p*ee)/(aa+p*dd1)+p/(aa+p*dd1)*(aa*dd1*r-(bb*dd1+aa*ee)*r);
}y1=u1/(1.0+100.0/t/t+20.0/t);
e=r-y1;
if(sxfabs(e)){u1=u1*(aa+bb+p*ee)/(aa+p*dd2)-(bb+cc+p*ff)/(aa+p*dd2)*u1+p/(aa+p*dd2)*(aa*dd2*r-(bb*dd2+aa*ee)*r+(dd2*cc+bb*ee+aa*ff)*r);
}else{u1=u1*(aa+bb+p*ee)/(aa+p*dd1)-(bb+cc+p*ff)/(aa+p*dd1)*u1+p/(aa+p*dd1)*(aa*dd1*r-(bb*dd1+aa*ee)*r+(dd1*cc+bb*ee+aa*ff)*r);
}y1=u1/(1.0+100.0/t/t+20.0/t)-(100.0/t/t)*y/(1.0+100.0/t/t+20.0/t)+(200.0/t/t+20.0/t)*y/(1.0+100.0/t/t+20.0/t);
if(sxfabs(e)){u1=u1*(aa+bb+p*ee)/(aa+p*dd2)-(bb+cc+p*ff)/(aa+p*dd2)*u1+(cc)/(aa+p*dd2)*u1+p/(aa+p*dd2)*(aa*dd2*r-(bb*dd2+aa*ee)*r+(dd2*cc+bb*ee+aa*ff)*r-(cc*ee+bb*ff)*r);
}else{u1=u1*(aa+bb+p*ee)/(aa+p*dd1)-(bb+cc+p*ff)/(aa+p*dd1)*u1+(cc)/(aa+p*dd1)*u1+p/(aa+p*dd1)*(aa*dd1*r-(bb*dd1+aa*ee)*r+(dd1*cc+bb*ee+aa*ff)*r-(cc*ee+bb*ff)*r);
if(sxfabs(e)){u1=u1*(aa+bb+p*ee)/(aa+p*dd2)-(bb+cc+p*ff)/(aa+p*dd2)*u1+(cc)/(aa+p*dd2)*u1+p/(aa+p*dd2)*(aa*dd2*r-(bb*dd2+aa*ee)*r+(dd2*cc+bb*ee+aa*ff)*r-(cc*ee+bb*ff)*r+ff*cc*r);
}else{u1=u1*(aa+bb+p*ee)/(aa+p*dd1)-(bb+cc+p*ff)/(aa+p*dd1)*u1+(cc)/(aa+p*dd1)*u1+p/(aa+p*dd1)*(aa*dd1*r-(bb*dd1+aa*ee)*r+(dd1*cc+bb*ee+aa*ff)*r-(cc*ee+bb*ff)*r+ff*cc*r);
for(i=6;
ii++){if(sxfabs(e[i-1])){u1[i]=u1[i-1]*(aa+bb+p*ee)/(aa+p*dd2)-(bb+cc+p*ff)/(aa+p*dd2)*u1[i-2]+(cc)/(aa+p*dd2)*u1[i-3]+p/(aa+p*dd2)*(aa*dd2*r[i]-(bb*dd2+aa*ee)*r[i-1]+(dd2*cc+bb*ee+aa*ff)*r[i-2]-(cc*ee+bb*ff)*r[i-3]+ff*cc*r[i-4]);
}else{u1[i]=u1[i-1]*(aa+bb+p*ee)/(aa+p*dd1)-(bb+cc+p*ff)/(aa+p*dd1)*u1[i-2]+(cc)/(aa+p*dd1)*u1[i-3]+p/(aa+p*dd1)*(aa*dd1*r[i]-(bb*dd1+aa*ee)*r[i-1]+(dd1*cc+bb*ee+aa*ff)*r[i-2]-(cc*ee+bb*ff)*r[i-3]+ff*cc*r[i-4]);
}y1[i]=u1[i]/(1.0+100.0/t/t+20.0/t)-(100.0/t/t)*y[i-2]/(1.0+100.0/t/t+20.0/t)+(200.0/t/t+20.0/t)*y[i-1]/(1.0+100.0/t/t+20.0/t);
e[i]=r[i]-y1[i];
}cout“U1的曲线为“endl;
ii++){coutu1[i]'\t';
}cout“Y1的曲线为“endl;
ii++){couty1[i]'\t';
ii++){outfile(i-1)*t'\t';
}outfileendl;
ii++){outfileu1[i]'\t';
ii++){outfiley1[i]'\t';
积分限较小时:
U(t)的阶跃数据:
24.41927.*****7.*****8.*****10.204211.428412.484513.3413.989614.447414.738614.894114.945914.924114.854914.759814.655414.553614.461914.384814.323814.278614.247914.229414.220614.21914.05313.627112.908611.913310.69049.31017.*****6.*****5.003043.74152.*****1.75231.059780.*****0.*****0.*****0.***-*****0.*****0.*****0.*****0.*****0.*****1.*****1.*****1.*****1.*****1.*****1.*****1.*****1.*****1.*****1.21031.*****1.075341.019110.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****1.001431.012231.020XX年1.024891.026991.026741.024621.021151.016861.012211.007611.003390.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****1.00021.00092Y(t)的阶跃数据:
00.***-*****0.***-*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****积分限适中时:
U(t)阶跃数据:
24.41927.*****7.*****8.*****10.204211.428412.484513.3413.989614.447414.738614.894114.767214.289813.456512.308310.91729.37177.*****6.*****4.*****3.38612.*****1.*****0.*****0.*****0.***-*****-0.***-*****-0.***-*****0.*****0.*****0.*****0.*****0.*****1.*****1.*****1.*****1.*****1.49251.*****1.*****1.*****1.*****1.20XX年91.*****1.054510.*****0.*****0.*****0.*****0.*****0.*****0.*****0.920XX年30.*****0.*****0.*****0.*****1.007281.018071.025451.029551.030721.029441.02631.021891.016791.01151.006441.001940.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****1.000611.001331.001811.002061.002111.001991.001751.001441.001081.000711.000371.000070.*****0.*****0.*****0.*****Y(t)阶跃数据:
00.***-*****0.***-*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*****0.*