控制系统仿真实验报告
- 格式:doc
- 大小:214.00 KB
- 文档页数:15
控制系统仿真实验实验报告实验一 经典的连续系统仿真建模方法一 实验目的:1 了解和掌握利用仿真技术对控制系统进行分析的原理和步骤。
2 掌握机理分析建模方法。
3 深入理解阶常微分方程组数值积分解法的原理和程序结构,学习用Matlab 编写数值积分法仿真程序。
4 掌握和理解四阶Runge-Kutta 法,加深理解仿真步长与算法稳定性的关系。
二 实验原理: 1非线性模型仿真()()⎪⎪⎭⎪⎪⎬⎫⎪⎪⎩⎪⎪⎨⎧-=-+=221122112111H H A dt dH H Q u k A dt dH d u ααα ⎥⎦⎤⎢⎣⎡∆∆⎥⎥⎦⎤⎢⎢⎣⎡+⎥⎦⎤⎢⎣⎡∆∆⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡--=∆d u Q u A A k H H AR AR ARH 00111012121212三 实验内容:1. 编写四阶 Runge_Kutta 公式的计算程序,对非线性模型(3)式进行仿真。
(1) 将阀位u 增大10%和减小10%,观察响应曲线的形状;2. 编写四阶 Runge_Kutta 公式的计算程序,对线性状态方程(18)式进行仿真 (1) 将阀位增大10%和减小10%,观察响应曲线的形状; (2) 研究仿真步长对稳定性的影响,仿真步长取多大时RK4 算法变得不稳定? 四 程序代码: 龙格库塔: %Rk4文件function [x,y]=Rk4(f,y0,h,a,b,u) %四阶龙格库塔公式%微分方程组的函数名称,初始值,步长,时间起点,时间终点,阀门开度 n=floor((b-a)/h);%求步数 x(1)=a; %时间起点 y(1,:)=y0; %赋初值 for i=1:nx(i+1)=x(i)+h;k1=f(x(i),y(i,:),u);k2=f(x(i)+h/2,y(i,:)+h*k1/2,u); k3=f(x(i)+h/2,y(i,:)+h*k2/2,u); k4=f(x(i)+h,y(i,:)+h*k3,u);y(i+1,:)=y(i,:)+h*(k1+2*k2+2*k3+k4)/6; end状态方程:function dy=f(t,y,u)dy = zeros(2,1);dy(1)=0.5*(0.2*u+0.15-0.20412*sqrt(y(1)));dy(2)=0.5*(0.20412*sqrt(y(1))-0.21129*sqrt(y(2)));dy=dy'水箱模型:clearu=0.6; %阀位大小y0=[1.5 1.4]; %初始值a=0;b=600; %仿真时间h=1; %仿真步长[T,Y]=Rk4(@f,y0,h,a,b,u); %调用PK4plot(T,Y(:,1),'b-',T,Y(:,2),'m-.')title('非线性模型曲线图');legend('第一个水箱液位H1','第二个水箱液位H2');xlabel('时间t');ylabel('液位高度h');1 、阀值u对仿真结果的影响U=0.4;h=1;U=0.6;h=1;2编写四阶 Runge_Kutta 公式的计算程序,对线性状态方程(18)式进行仿真:%RK_4文件function [x,y]=RK_4(f2,y0,h,a,b,u)%参数表顺序依次是微分方程组的函数名称,初始值向量,步长,时间起点,时间终点,阀门开度n=floor((b-a)/h);%求步数x(1)=a;%时间起点y(1,:)=y0; %赋初值,可以是向量,但是要注意维数for i=1:nx(i+1)=x(i)+h;k1=f2(x(i),y(i,:),u);k2=f2(x(i)+h/2,y(i,:)+h*k1/2,u);k3=f2(x(i)+h/2,y(i,:)+h*k2/2,u);k4=f2(x(i)+h,y(i,:)+h*k3,u);y(i+1,:)=y(i,:)+h*(k1+2*k2+2*k3+k4)/6;%按照龙格库塔方法进行数值求解end状态方程:function dy=f2(t,y,u)A=2;Ku=0.1/0.5;dy=zeros(2,1); % a column vector a12=0.25/sqrt(1.5); a2=0.25/sqrt(1.4); R12=2*sqrt(1.5)/a12; R2=2*sqrt(1.4)/a2;AX=[-1/(A*R12) 0;1/(A*R12) -1/(A*R2)]; BX=[Ku/A 1/A;0 0]; dy=AX*y'+BX*u'; dy=dy' end线性函数: clcclear all u=[0.5 0]; y0=[0 0];a=0;b=500;h=1;[T,Y]=RK_4(@f2,y0,h,a,b,u); Y(:,1)=Y(:,1)+1.5; Y(:,2)=Y(:,2)+1.4;plot(T,Y(:,1),'g-',T,Y(:,2),'r-.')title('线性模型曲线图');legend('第一个水箱的液位H1','第二个水箱的液位H2');xlabel('时间t');ylabel('液位高度h'); 1 阀值u 对仿真结果的影响:U=0.4;h=1;0501001502002503003504004505001.41.61.822.22.42.62.8线性模型响应曲线图时间t液位高度hH1H2U=0.6;h=1;0501001502002503003504004505001.41.61.822.22.42.62.83线性模型响应曲线图时间t液位高度hH1H22 步长h 对仿真结果的影响:U=0.5;h=5;0501001502002503003504004505001.41.61.822.22.42.62.8线性模型响应曲线图时间t液位高度hH1H2U=0.5;h=20;0501001502002503003504004505001.41.61.822.22.42.62.8线性模型响应曲线图时间t液位高度hH1H2U=0.5;h=35;0501001502002503003504004505001.41.61.822.22.42.62.8线性模型响应曲线图时间t液位高度hH1H2U=0.5;h=45;0501001502002503003504004505001.41.61.822.22.42.62.8线性模型响应曲线图时间t液位高度hH1H2当步长为45时仿真结果开始不稳定,仿真步长越大,仿真结果越不稳定。
实验二 面向结构图的仿真一 、实验目的1. 掌握理解控制系统闭环仿真技术。
2. 掌握理解面向结构图的离散相似法的原理和程序结构。
3. 掌握 MATLAB 中C2D 函数的用法,掌握双线性变换的原理 二、实验内容根据上面的各式,编写仿真程序,实现无扰动时给定值阶跃仿真实验1. 取Kp=1.78 ,Ti = 85s ,T = 10s , H2s=80 , Qd=0,tend= 700,进行仿真实验,绘制响应曲线。
三、实验程序及代码 响应曲线的绘制: 1)线性程序代码: clc cleartend=700;T=10;Qd=0;Kp=1.78;Ti=85;A=2; %参数 Ku=0.1/0.5;H2set_percent=80; alpha12=0.25/sqrt(1.5); alpha2=0.25/sqrt(1.4); R12=2*sqrt(1.5)/alpha12; R2=2*sqrt(1.4)/alpha2; H1spanLo=0;H1spanHi=2.52;H2spanLo=0;H2spanHi=2.52;H1=1.5;H2=1.4;u=0.5;k=2;Kc=Kp/Ti;bc=Ti;Kd=1/A;ad=1/(A*R12);K1=Ku/A;a1=1/(A*R12);K2=1/(A*R12);a2=1/(A*R2);uc(1)=0;ud(1)=0;u1(1)=0;u2(1)=0;xc(1)=0;xd(1)=0;x1(1)=0;x2(2)=0;yc(1)=0;yd(1)=0;y1(1)=0;y2(2)=0;for t=10:T:tendud(k)=Qd;xc(k)=xc(k-1)+Kc*T*uc(k-1);xd(k)=exp(-ad*T)*xd(k-1)+Kd*(1-exp(-ad*T))/ad*ud(k-1);x1(k)=exp(-a1*T)*x1(k-1)+K1*(1-exp(-a1*T))/a1*u1(k-1);x2(k)=exp(-a2*T)*x2(k-1)+K2*(1-exp(-a2*T))/a2*u2(k-1);y2(k)=x2(k);uc(k)=H2set_percent/100-(y2(k-1)+H2-H2spanLo)/(H2spanHi-H2spanLo); yc(k)=xc(k)+bc*Kc*uc(k);yd(k)=xd(k);y1(k)=x1(k);u1(k)=yc(k);u2(k)=y1(k);k=k+1;endH1_present=(y1+H1-H1spanLo)/(H1spanHi-H1spanLo)*100;%h1的高度H2_present=(y2+H2-H2spanLo)/(H2spanHi-H2spanLo)*100;%h2的高度yc=(yc+u)*100; %控制器的输出plot(0:T:tend,[H1_present',H2_present',yc'])title('线性模型阶跃响应曲线图');legend('H1','H2','yc');xlabel('时间t');ylabel('液位高度h/控制器输出(100%)');曲线图010*******4005006007005060708090100110线性模型阶跃响应曲线图时间t液位高度h /控制器输出(100%)H1H2yc2)非线性程序代码: clc cleartend=700;T=10;Qd=0;Kp=1.78;Ti=85;A=2; c=0.5; %参数 Ku=0.1/0.5;H2set_percent=80; alpha12=0.25/sqrt(1.5); alpha2=0.25/sqrt(1.4); R12=2*sqrt(1.5)/alpha12; R2=2*sqrt(1.4)/alpha2; H1spanLo=0;H1spanHi=2.52; H2spanLo=0;H2spanHi=2.52; H1=1.5;H2=1.4;u=0.5;k=2; Kc=Kp/Ti;bc=Ti;Kd=1/A;ad=1/(A*R12); K1=Ku/A;a1=1/(A*R12); K2=1/(A*R12);a2=1/(A*R2);uc(1)=0;ud(1)=0;u1(1)=0;u2(1)=0; xc(1)=0;xd(1)=0;x1(1)=0;x2(2)=0; yc(1)=0;yd(1)=0;y1(1)=0;y2(2)=0; for t=10:T:tend ud(k)=Qd;xc(k)=xc(k-1)+Kc*T*uc(k-1);xd(k)=exp(-ad*T)*xd(k-1)+Kd*(1-exp(-ad*T))/ad*ud(k-1); x1(k)=exp(-a1*T)*x1(k-1)+K1*(1-exp(-a1*T))/a1*u1(k-1); x2(k)=exp(-a2*T)*x2(k-1)+K2*(1-exp(-a2*T))/a2*u2(k-1);y2(k)=x2(k);uc(k)=H2set_percent/100-(y2(k-1)+H2-H2spanLo)/(H2spanHi-H2spanLo); yc(k)=xc(k)+bc*Kc*uc(k); if yc(k)>c yc(k)=c; elseif yc(k)<-c yc(k)=-c; endyd(k)=xd(k); y1(k)=x1(k); u1(k)=yc(k); u2(k)=y1(k); k=k+1; endH1_present=(y1+H1-H1spanLo)/(H1spanHi-H1spanLo)*100; H2_present=(y2+H2-H2spanLo)/(H2spanHi-H2spanLo)*100; yc=(yc+u)*100;plot(0:T:tend,[H1_present',H2_present',yc']);title('含有非线性环节的模型阶跃响应曲线图');legend('H1','H2','yc'); xlabel('时间t');ylabel('液位高度h/控制器输出(100%)'); 曲线图:10020030040050060070050556065707580859095100含有非线性环节的模型阶跃响应曲线图时间t液位高度h /控制器输出(100%)H1H2yc2.阶跃响应的绘制 1)程序代码Kp=1.78;Ti=85;A=2; %参数Ku=0.1/0.5;H2set_percent=80; alpha12=0.25/sqrt(1.5); alpha2=0.25/sqrt(1.4); R12=2*sqrt(1.5)/alpha12; R2=2*sqrt(1.4)/alpha2; H1spanLo=0;H1spanHi=2.52; H2spanLo=0;H2spanHi=2.52; H1=1.5;H2=1.4;u=0.5;k=2; Kc=Kp/Ti;bc=Ti;Kd=1/A;ad=1/(A*R12); K1=Ku/A;a1=1/(A*R12); K2=1/(A*R12);a2=1/(A*R2);n1=[Kc*bc,Kc];d1=[1 0];s1=tf(n1,d1); n2=[Kd];d2=[1 ad];s2=tf(n2,d2); n3=[K1];d3=[1 a1];s3=tf(n3,d3); n4=[K2];d4=[1 a2];s4=tf(n4,d4); sysq=s1*s3*s4;sys=feedback(sysq,1); G=c2d(sys,10,'tustin');num=[0.1173,0.1303,-0.0912,-0.1042]; den=[1,-1.891,1.415,-0.4715]; num1=3*num;dstep(num1,den); 2)响应曲线:05101520253035400.511.522.533.5Step ResponseTime (sec)A m p l i t u d e实验三采样系统的仿真一实验目的1.掌握理解数字控制系统的仿真技术。