控制系统仿真.docx
《控制系统仿真.docx》由会员分享,可在线阅读,更多相关《控制系统仿真.docx(26页珍藏版)》请在冰点文库上搜索。
控制系统仿真
控制系统仿真
实验报告
姓名:
大葱哥
学号:
班级:
测控1202
2015.10.28
实验一经典的连续系统仿真建模方法
一实验目的
1.了解和掌握利用仿真技术对控制系统进行分析的原理和步骤。
2.掌握机理分析建模方法。
3.深入理解一阶常微分方程组数值积分解法的原理和程序结构,学习用Matlab编写
数值积分法仿真程序。
4.掌握和理解四阶Runge-Kutta法,加深理解仿真步长与算法稳定性的关系。
二实验内容
1.编写四阶Runge_Kutta公式的计算程序,对非线性模型(3)式进行仿真。
仿真程序:
主程序:
clc
clearall
u=zeros(2,1);
u
(1)=0.5%稳态
%u
(1)=0.55;%阀位增大%10
%u
(1)=0.45;%阀位减小%10
u
(2)=0.15;
h=zeros(1,2);
h(1,1)=1.5;
h(1,2)=1.4;
hStep=10;
Hlevel=h;
nCounter=25;
fort=0:
hStep:
(nCounter-1)*hStep
h=Z06_SystemSimulation_Lab01_Nonlinear_RK4(hStep,t,h,u);
Hlevel=[Hlevel;h];
end
figure
(1)
plot([0:
hStep:
nCounter*hStep]',Hlevel)
grid
四阶龙格库塔算法:
functionRK4_Result=Z06_SystemSimulation_Lab01_Nonlinear_RK4(h,t0,x0,u0)
K1=Z06_SystemSimulation_Lab01_Linear_dxCompute(t0,x0,u0);
K2=Z06_SystemSimulation_Lab01_Linear_dxCompute(t0+h/2,x0+h*K1/2,u0);
K3=Z06_SystemSimulation_Lab01_Linear_dxCompute(t0+h/2,x0+h*K2/2,u0);
K4=Z06_SystemSimulation_Lab01_Linear_dxCompute(t0+h,x0+h*K3,u0);
RK4_Result=x0+h*(K1+2*K2+2*K3+K4)/6;
(1)将阀位u增大10%和减小10%,观察响应曲线的形状;
稳态仿真曲线:
增大10%:
减小10%:
(2)研究仿真步长对稳定性的影响,仿真步长取多大时RK4算法变得不稳定?
仿真步长的选取范围可以通过理论计算获知,这里我们通过仿真得到当步长大于63时,曲线发散,系统不再稳定,发散曲线如下图:
(3)利用MATLAB中的ode45()函数进行求解,比较与
(1)中的仿真结果有何区别。
2.编写四阶Runge_Kutta公式的计算程序,对线性状态方程(18)式进行
仿真
仿真程序
clc
clearall
closeall
u=zeros(2,1);
u
(1)=0.0;%稳态
%u
(1)=0.05;%阀位增大%10
%u
(1)=-0.05;%阀位减小%10
u
(2)=0;
h=zeros(1,2);
h(1,1)=0;
h(1,2)=0;
hStep=10;
Hlevel=h;
nCounter=25;
fort=0:
hStep:
(nCounter-1)*hStep
h=Z06_SystemSimulation_Lab01_Linear_RK4(hStep,t,h,u);
Hlevel=[Hlevel;h];
end
Hlevel(:
1)=Hlevel(:
1)+1.5;
Hlevel(:
2)=Hlevel(:
2)+1.4;
figure(3)
plot([0:
hStep:
nCounter*hStep]',Hlevel)
grid
holdon
(1)将阀位增大10%和减小10%,观察响应曲线的形状;
稳态仿真曲线:
阀位增大%10:
阀位减小%10:
(2)研究仿真步长对稳定性的影响,仿真步长取多大时RK4算法变得不稳定?
当步长大于62时,算法变得不再稳定
(3)阀位增大10%和减小10%,利用MATLAB中的ode45()函数进行求解阶跃响应,比较与
(1)中的仿真结果有何区别。
三思考题
1.讨论仿真步长对稳定性和仿真精度的影响。
仿真步长越长,系统越倾向于不稳定,仿真步长越短,系统越稳定,但是需要的仿真时间越长。
2.你是怎样实现阀位增大和减小10%的?
对于非线性模型和线性模型方法一样吗?
通过改变u
(1)的初值可以实现对阀位的增大和减小,由于线性模型法是对变量的变化量进行计算的,而非线性模型法是直接对变量进行计算,所以两种方法实现对阀位的增大和减小方面存在一些区别,不完全一致。
四实验总结
通过本次实验我学会了Matlab的基本使用方法,对该软件有了一定程度的认识,同时对仿真步长对系统的稳定性和仿真精度的关系有了一定的理解,对一阶常微分方程组数值积分解法的原理和程序结构有了进一步的掌握,深入了解了Runge-Kutta 法,对MATLAB软件的仿真有了一定程度的认识,为以后的学习奠定了基础。
实验二面向结构图的仿真
第一部分线性系统仿真
一实验目的
1.掌握理解控制系统闭环仿真技术。
2.掌握理解面向结构图的离散相似法的原理和程序结构。
3.掌握MATLAB中C2D函数的用法,掌握双线性变换的原理。
二实验内容
1.编写仿真程序,实现无扰动时给定值阶跃仿真实验
仿真程序:
%面向结构图的离散相似法,线性模型
clc
clearall
%%%%%%%%%%%%%%%%%%%%%定义参数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
A=2;%水箱横截面积
ku=0.1/0.5;%阀门流量系数
H10=1.5;%水箱1的平衡高度
H20=1.4;%水箱2的平衡高度
alpha12=0.25/sqrt(H10);%水箱1流向水箱2流量系数
alpha2=0.25/sqrt(H20);%水箱2流出水流量系数
R12=2*sqrt(H10)/alpha12;%线性化数学模型中的参数
R2=2*sqrt(H20)/alpha2;%线性化数学模型中的参数
H1SpanLo=0;%水箱1量程下限
H2SpanLo=0;%水箱2量程下限
H1SpanHi=2.52;%水箱1量程上限
H2SpanHi=2.52;%水箱2量程上限
Kp=1.78;%PI控制器比例系数
Ti=85;%PI控制器积分时间常数
R12*A
R12
Kc=Kp/Ti;%式(4)中参数
bc=Ti;%式(4)中参数
Kd=1/A;%式(5)中参数
ad=1/(A*R12);%式(5)中参数
a1=1/(A*R12);%式(6)中参数
K1=ku/A;%式(6)中参数
a2=1/(A*R2);%式(7)中参数
K2=1/(A*R12);%式(7)中参数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%定义初值%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
uc
(1)=0;%Gc环节(8)的输入初值
xc
(1)=0;%Gc环节(8)的状态初值
yc
(1)=0;%Gc环节(8)的输出初值
ud
(1)=0;%Gd环节(9)的输入初值
xd
(1)=0;%Gd环节(9)的状态初值
yd
(1)=0;%Gd环节(9)的输出初值
u1
(1)=0;%G1环节(10)的输入初值
x1
(1)=0;%G1环节(10)的状态初值
y1
(1)=0;%G1环节(10)的输出初值
u2
(1)=0;%G2环节(11)的输入初值
x2
(1)=0;%G2环节(11)的状态初值
y2
(1)=0;%G2环节(11)的输出初值
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
nCounter=70;%迭代次数
T=10;%步长
k=1;
deltaQd=0;%扰动量
H20_percent=(H20-H2SpanLo)/(H2SpanHi-H2SpanLo)*100;%稳态工作点的液位百分比
H2=80;%给定液位百分比
tend=nCounter*T;
fort=T:
T:
tend
k=k+1;
uc(k)=(H2-(y2(k-1)+H20-H2SpanLo)/(H2SpanHi-H2SpanLo)*100)/100;%系统(8)的输入百分比
ud(k)=deltaQd;%系统(9)的输入
u1(k)=yc(k-1);%系统(10)的输入
u2(k)=y1(k-1);%系统(11)的输入
xc(k)=xc(k-1)+Kc*T*uc(k-1);yc(k)=xc(k)+bc*Kc*uc(k);
xd(k)=exp(-ad*T)*xd(k-1)+Kd/ad*(1-exp(-ad*T))*ud(k);yd(k)=xd(k);
x1(k)=exp(-a1*T)*x1(k-1)+K1/a1*(1-exp(-a1*T))*u1(k);y1(k)=x1(k);
x2(k)=exp(-a2*T)*x2(k-1)+K2/a2*(1-exp(-a2*T))*u2(k);y2(k)=x2(k);
end
Hlevel(:
1)=(y1+H10-H1SpanLo)/(H1SpanHi-H1SpanLo)*100;
Hlevel(:
2)=(y2+H20-H2SpanLo)/(H2SpanHi-H2SpanLo)*100;
yc=(yc+0.5)*100;
y2sp=H2*ones(size(y1'));
yv=yc;
textPositionH1=max(Hlevel(:
1));
textPositionH2=max(Hlevel(:
2));
H2Steady=Hlevel(size(Hlevel(:
1),1),1)*ones(size(y1'));
xmax=max(0:
T:
tend);
xmin=0;
ymax=110;
ymin=50;
scrsz=get(0,'ScreenSize');
gca=figure('Position',[510scrsz(3)-10scrsz(4)-90]);
%gca=figure('Position',[510scrsz(3)/2scrsz(4)/1.5])
set(gca,'Color','w');
plot(0:
T:
tend,Hlevel(:
1),'r','LineWidth',2)
holdon
plot(0:
T:
tend,Hlevel(:
2),'b','LineWidth',2)
holdon
plot(0:
T:
tend,yv,'k','LineWidth',2)
holdon
plot(0:
T:
tend,y2sp,'g','LineWidth',2)
holdon
plot(0:
T:
tend,H2Steady,'y','LineWidth',2)
line([tend/2tend/2+27],[(ymax-ymin)/2+ymin-(ymax-ymin)/10(ymax-ymin)/2+ymin-(ymax-ymin)/10],'Color','r','LineWidth',6)
text(tend/2+27,(ymax-ymin)/2+ymin-(ymax-ymin)/10,'第1个水箱的液位H1','FontSize',16)
line([tend/2tend/2+27],[(ymax-ymin)/2+ymin-(ymax-ymin)/6(ymax-ymin)/2+ymin-(ymax-ymin)/6],'Color','b','LineWidth',6)
text(tend/2+27,(ymax-ymin)/2+ymin-(ymax-ymin)/6,'第2个水箱的液位H2','FontSize',16)
line([tend/2tend/2+27],[(ymax-ymin)/2+ymin-(ymax-ymin)/4.2(ymax-ymin)/2+ymin-(ymax-ymin)/4.2],'Color','g','LineWidth',6)
text(tend/2+27,(ymax-ymin)/2+ymin-(ymax-ymin)/4.2,'第2个水箱的液位给定值','FontSize',16)
line([tend/2tend/2+27],[(ymax-ymin)/2+ymin-(ymax-ymin)/3.2(ymax-ymin)/2+ymin-(ymax-ymin)/3.2],'Color','k','LineWidth',6)
text(tend/2+27,(ymax-ymin)/2+ymin-(ymax-ymin)/3.2,'阀位变化情况','FontSize',16)
axis([xminxmaxyminymax]);
text(tend/5,ymax+1.5,'实验二不考虑阀位饱和特性时的控制效果','FontSize',22)
grid
%holdoff
仿真实验曲线:
由控制的效果可以看出,阀位的变化出现了超过100%的情况,这是控制系统中不允许出现的,说明控制功能需要改进。
三思考题
在未考虑调节阀饱和特性时,讨论一下两个水箱液位的变化情况,工业上是否允许?
讨论阀位的变化情况,工业上是否能实现?
答:
在未考虑调节阀饱和特性时,两个水箱的液位在阀位一开始大开时,H1,H2液位上升迅速,很快就达到预期值。
但是其控制不能在工业上实现,没有实际可行度。
除此之外,阀位有其本身的最大最小的限制,在仿真中出现的超过100%的情况在现实生活中不可能出现,因此这一部分对应的控制效果在工业上不能实现。
四实验总结
通过本次实验,我对控制系统闭环仿真技术有了进一步的认识,掌握了面向结构图的离散相似法的原理和程序结构,了解了双线性变换的原理,收获颇丰。
第二部分含有非线性环节的控制系统仿真
一实验目的
4.掌握理解控制系统闭环仿真技术。
5.掌握理解面向结构图的离散相似法的原理和程序结构。
6.掌握理含有非线性环节的控制系统的仿真方法。
二实验内容
根据上面的各式,编写仿真程序,实现无扰动时给定值阶跃仿真实验
仿真程序:
%面向结构图的离散相似法,非线性模型
clc
clearall
A=2;
ku=0.1/0.5;
H10=1.5;
H20=1.4;
alpha12=0.25/sqrt(H10);
alpha2=0.25/sqrt(H20);
R12=2*sqrt(H10)/alpha12;
R2=2*sqrt(H20)/alpha2;
H1SpanLo=0;
H2SpanLo=0;
H1SpanHi=2.52;
H2SpanHi=2.52;
Kp=3.91/2.2;;
Ti=0.85*100;
%Kp=3.21;
%Ti=99999999999999;
ad=1/(A*R12);
a1=1/(A*R12);
a2=1/(A*R2);
Kc=Kp/Ti;
bc=Ti;
Kd=1/A;
K1=ku/A;
K2=1/(A*R12);
uc
(1)=0;uv
(1)=0;ud
(1)=0;u1
(1)=0;u2
(1)=0;
xc
(1)=0;xv
(1)=0;xd
(1)=0;x1
(1)=0;x2
(1)=0;
yc
(1)=0;yv
(1)=0;yd
(1)=0;y1
(1)=0;y2
(1)=0;
nCounter=70;
T=10;
k=1;
deltaQd=0;
c=0.5;
H20_percent=(H20-H2SpanLo)/(H2SpanHi-H2SpanLo)*100;
H2set_percent=82;
tend=nCounter*T;
fort=T:
T:
tend
k=k+1;
uc(k)=(H2set_percent-(y2(k-1)+H20-H2SpanLo)/(H2SpanHi-H2SpanLo)*100)/100;
uv(k)=yc(k-1);
ud(k)=deltaQd;
ifuv(k)>c
yv(k)=c;
end
ifuv(k)<-c
yv(k)=0;
end
ifuv(k)<=c&uv(k)>=-c
yv(k)=uv(k);
end
u1(k)=yv(k);
u2(k)=y1(k-1);
xc(k)=xc(k-1)+Kc*T*uc(k-1);yc(k)=xc(k)+bc*Kc*uc(k);
xd(k)=exp(-ad*T)*xd(k-1)+Kd/ad*(1-exp(-ad*T))*ud(k);yd(k)=xd(k);
x1(k)=exp(-a1*T)*x1(k-1)+K1/a1*(1-exp(-a1*T))*u1(k);y1(k)=x1(k);
x2(k)=exp(-a2*T)*x2(k-1)+K2/a2*(1-exp(-a2*T))*u2(k);y2(k)=x2(k);
end
Hlevel(:
1)=(y1+H10-H1SpanLo)/(H1SpanHi-H1SpanLo)*100;
Hlevel(:
2)=(y2+H20-H2SpanLo)/(H2SpanHi-H2SpanLo)*100;
yv=(yv+0.5)*100;
y2sp=H2set_percent*ones(size(y1'));
textPositionH1=max(Hlevel(:
1));
textPositionH2=max(Hlevel(:
2));
H2Steady=Hlevel(size(Hlevel(:
1),1),1)*ones(size(y1'));
xmax=max(0:
T:
tend);
xmin=0;
ymax=110;
ymin=50;
scrsz=get(0,'ScreenSize');
gca=figure('Position',[510scrsz(3)-10scrsz(4)-90])
%gca=figure('Position',[510scrsz(3)/2scrsz(4)/1.5])
set(gca,'Color','w');
plot(0:
T:
tend,Hlevel(:
1),'r','LineWidth',2)
holdon
plot(0:
T:
tend,Hlevel(:
2),'b','LineWidth',2)
holdon
plot(0:
T:
tend,yv,'k','LineWidth',2)
holdon
plot(0:
T:
tend,y2sp,'g','LineWidth',2)
holdon
plot(0:
T:
tend,H2Steady,'y','LineWidth',2)
line([tend/2tend/2+27],[(ymax-ymin)/2+ymin-(ymax-ymin)/10(ymax-ymin)/2+ymin-(ymax-ymin)/10],'Color','r','LineWidth',6)
text(tend/2+27,(ymax-ymin)/2+ymin-(ymax-ymin)/10,'第1个水箱的液位H1','FontSize',16)
line([tend/2tend/2+27],[(ymax-ymin)/2+ymin-(ymax-ymin)/6(ymax-ymin)/2+ymin-(ymax-ymin)/6],'Color','b','LineWidth',6)
text(tend/2+27,(ymax-ymin)/2+ymin-(ymax-ymin)/6,'第2个水箱的液位H2','FontSize',16)
line([tend/2tend/2+27],[(ymax-ymin)/2+ymin-(ymax-ymin)/4.2(ymax-ymin)/2+ymin-(ymax-ymin)/4.2],'Color','g','LineWidth',6)
text(tend/2+27,(ymax-ymin)/2+ymin-(ymax-ymin)/4.2,'第2个水箱的液位给定值','FontSize',16)
line([tend/2tend/2+27],[(ymax-ymin)/2+ymin-(ymax-ymin)/3.2(ymax-ymin)/2+ymin-(ymax-ymin)/3.2],'Color','k','LineWidth',6)
text(tend/2+27,(ymax-ymin)/2+ymin-(ymax-ymin)/3.2,'阀位变化情况','FontSize',16)
axis([xminxmaxyminymax]);
text(tend/5,ymax+1.5,'实验三考虑阀位饱和特性时的控制效果','FontSize',22)
grid
%holdoff
仿真实验曲线:
三思考题
与实验三相比,考虑调节阀饱和特性前后,响应有何不同?
答:
与实验三相比,调节饱和特性阀前后调进行对比,H1 、H2的液位在考虑饱和特性之后,响应曲线比不考虑的时候略微平缓一些,阀位的调节没有出现超过100%的情况。
四实验总结
通过本次实验,我认识了面向结构图的离散相似法的原理和程序结构,掌握了理含有非线性环节的控制系统的仿真方法。
实验三采样系统的仿真
一实验目的
1.掌握理解数字控制系统的仿真技术。
2.掌握理解增量式PID数字控制器的实现方法。
二实验内容1
根据上面的各式,编写仿真程序。
仿真程序:
clc
clearall
closeall;
A=2;
ku=0.1/0.5;
H10=1.5;
H20=1.4;
alpha12=0.25/sqrt(H10);
alpha2=0.25/sqrt(H20);
R12=2*sqrt(H10)/alpha12;
R2=2*sqrt(H20)/alpha2;
H1SpanLo=0;
H2SpanLo=0;
H1SpanHi=2.52;
H2SpanHi=2.52;
K