控制系统仿真实验二报告

实验二 面向结构图的仿真

四 思考题

(1)在未考虑调节阀饱和特性时,讨论一下两个水箱液位的变化情况,工业上是否允许?讨论阀位的变化情况,工业上是否能实现?

答:在一开始阀位大开,H1,H2液位上升迅速,很快就达到预期值。但显然不能在工业上实现。阀位有其本身的最大最小的限制,在仿真中出现的超过100%的情况在现实生活中不可能出现,因此这一部分对应的控制效果也是无效的。

(2)与实验三相比,考虑调节阀饱和特性前后,响应有何不同?

答:H1 H2的液位在考虑饱和特性之后,响应曲线比不考虑的时候略微平缓一些。

第一部分 线性系统仿真

一 实验目的

1. 掌握理解控制系统闭环仿真技术。

2. 掌握理解面向结构图的离散相似法的原理和程序结构。

3. 掌握 MATLAB 中C2D 函数的用法,掌握双线性变换的原理。

二 实验内容

根据上面的各式,编写仿真程序,实现无扰动时给定值阶跃仿真实验

1. K P = 1.78 ,T i = 85 sT = 10sΔH2 S  =H2set_ percent = 80, ΔQ d = 0,

tend = 700,进行仿真实验,绘制响应曲线。

clc

clear all

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=1.78;

Ti=85;

R12*A

R12

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;ud(1)=0;u1(1)=0;u2(1)=0;

xc(1)=0;xd(1)=0;x1(1)=0;x2(1)=0;

yd(1)=0;yc(1)=0;y1(1)=0;y2(1)=0;

nCounter = 70;

T=10;

k=1;

deltaQd=0;

H20_percent=(H20-H2SpanLo)/(H2SpanHi-H2SpanLo)*100;

H2=80;

tend = nCounter*T;

for t=T:T:tend

    k=k+1;

   

    uc(k)= (H2 - (y2(k-1)+H20-H2SpanLo)/(H2SpanHi-H2SpanLo)*100)/100;

    ud(k)=deltaQd;

    u1(k)=yc(k-1);

    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;

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',[5 10 scrsz(3)-10 scrsz(4)-90]);

    %gca=figure('Position',[5 10 scrsz(3)/2 scrsz(4)/1.5])

    set(gca,'Color','w');

  

    plot(0:T:tend,Hlevel(:,1),'r','LineWidth',2)   

    hold on

    plot(0:T:tend,Hlevel(:,2),'b','LineWidth',2)

    hold on

    plot(0:T:tend,yv,'k','LineWidth',2)

    hold on

    plot(0:T:tend,y2sp,'g','LineWidth',2)

    hold on

    plot(0:T:tend,H2Steady,'y','LineWidth',2)

    line([tend/2 tend/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,' 第一个水箱的液位H1','FontSize',16) 

    line([tend/2 tend/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,' 第二个水箱的液位H2','FontSize',16) 

    line([tend/2 tend/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,' 第二个水箱的液位给定值','FontSize',16) 

    line([tend/2 tend/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([xmin xmax  ymin  ymax]);

    text(tend/5,ymax+1.5,' 实验二 不考虑阀位饱和特性时的控制效果','FontSize',22)  

    grid

2. 用 MATLAB 求出从输入到输出的传递函数,并将其用c2d 函数,利用双线性变换法转

换为离散模型,再用dstep()函数求离散模型的阶跃响应,阶跃幅值为3。

clc

clear all

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=1.78;

Ti=85;

R12*A

R12

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);

numc=[Kc*bc,Kc];% 用 MATLAB 求出从输入到输出的传递函数,

denc=[1];

num1=[K1];

den1=[1,a1];

num2=[K2];

den2=[1,a2];

gc=tf(numc,denc);

g1=tf(num1,den1);

g2=tf(num2,den2);

Sysq=gc*g1*g2;

SysG=feedback(Sysq,1);

gg=c2d(SysG,10,’tustin’);% 用c2d 函数,利用双线性变换法转

换为离散模型

dstep(3*gg.num{1},gg.den{1});%用dstep()函数求离散模型的阶跃响应,阶跃幅值为3

结果

三 实验报告

实验完成后,要写出实验报告,内容包括:

1.实验步骤及说明;

2.实验所用的仿真程序清单,以及程序结构的简单说明;

第二部分 含有非线性环节的控制系统仿真

一 实验目的

4. 掌握理解控制系统闭环仿真技术。

5. 掌握理解面向结构图的离散相似法的原理和程序结构。

6. 掌握理含有非线性环节的控制系统的仿真方法。

二 实验内容

根据上面的各式,编写仿真程序,实现无扰动时给定值阶跃仿真实验

1. K P = 1.78 ,T i = 85 sT = 10sΔH2 S  =H2set_ percent = 80, ΔQ d = 0,

tend = 700,进行仿真实验,绘制响应曲线。

clc

clear all

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=80;

tend = nCounter*T;

for t=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;

    if uv(k)>c

        yv(k)=c;

    end

    if uv(k)<-c

        yv(k)=0;

    end

    if uv(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',[5 10 scrsz(3)-10 scrsz(4)-90])

    %gca=figure('Position',[5 10 scrsz(3)/2 scrsz(4)/1.5])

    set(gca,'Color','w');

  

    plot(0:T:tend,Hlevel(:,1),'r','LineWidth',2)   

    hold on

    plot(0:T:tend,Hlevel(:,2),'b','LineWidth',2)

    hold on

    plot(0:T:tend,yv,'k','LineWidth',2)

    hold on

    plot(0:T:tend,y2sp,'g','LineWidth',2)

    hold on

    plot(0:T:tend,H2Steady,'y','LineWidth',2)

    line([tend/2 tend/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,' 第一个水箱的液位H1','FontSize',16) 

    line([tend/2 tend/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,' 第二个水箱的液位H2','FontSize',16) 

    line([tend/2 tend/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,' 第二个水箱的液位给定值','FontSize',16) 

    line([tend/2 tend/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,'阀位变化情况',16) 

    axis([xmin xmax  ymin  ymax]);

    text(tend/5,ymax+1.5,'实验三 考虑阀位饱和特性时的控制效果','FontSize',22)  

    grid

四 实验报告

实验完成后,要写出实验报告,内容包括:

1.实验步骤及说明;

3.实验所用的仿真程序清单,以及程序结构的简单说明;

相关推荐