内科大&amp#183;大延迟滞后系统MATLAB程序报错的纠正

上传人:夏** 文档编号:467075958 上传时间:2022-12-21 格式:DOCX 页数:6 大小:294.75KB
返回 下载 相关 举报
内科大&amp#183;大延迟滞后系统MATLAB程序报错的纠正_第1页
第1页 / 共6页
内科大&amp#183;大延迟滞后系统MATLAB程序报错的纠正_第2页
第2页 / 共6页
内科大&amp#183;大延迟滞后系统MATLAB程序报错的纠正_第3页
第3页 / 共6页
内科大&amp#183;大延迟滞后系统MATLAB程序报错的纠正_第4页
第4页 / 共6页
内科大&amp#183;大延迟滞后系统MATLAB程序报错的纠正_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《内科大&amp#183;大延迟滞后系统MATLAB程序报错的纠正》由会员分享,可在线阅读,更多相关《内科大&amp#183;大延迟滞后系统MATLAB程序报错的纠正(6页珍藏版)》请在金锄头文库上搜索。

1、关于大延迟控制系统的设计MATLAB程序报错的纠正1.实训任务书已知过程控制系统的被控广义对象为一个带延迟的惯性环节,其传递函数为G (s) =e -4 s4 s +1采用大林算法和PID算法实现控制。MATLABR2007b参考程序:%Delay Control with Dalin Alg clear all;2软件版本sys2=tf(l,0.15,l,inputdelay,4); dsys2=c2d(sys2,ts,zoh);%Design Dalin controllerdsys=l/dsysl*dsys2/(l-dsys2); num,den=tfdata(dsys,v);u_l=0

2、.0;u_2=0.0;u_3=0.0;u_4=0.0;u_5=0.0; y_l=0.0;error_l=0.0;error_2=0.0;error_3=0.0;ei=0;for k=l:l:50time(k)=k*ts;rin(k)=1.0; %Tracing Step Signal yout(k)=-den1(2)*y_1+num1(2)*u_2+num1(3)*u_3; error(k)=rin(k)-yout(k);M=1;if M=1 %Using Dalin Methodu(k)=(num(1)*error(k)+num(2)*error_1+num(3)*error_2+num(4

3、)*error_3.-den(3)*u_1-den(4)*u_2-den(5)*u_3-den(6)*u_4-den(7)*u_5)/den(2);elseif M=2%Using PID Methodei=ei+error(k)*ts;u(k)=1.0*error(k)+0.10*(error(k)-error_l)/ts+0.50*ei; end%Return of dalin parametersu_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k); y_1=yout(k);error_3=error_2;error_2=error_1;error_1 end

4、 plot(time,rin,b,time,yout,r); xlabel(time(s);ylabel(rin,yout);ror(k);4程序报错位置运行时,该版本没有一些函数导致了报错。改后完整程序见附程序本没有错,只是 录。1) 第一个错误 %Design Dalin controlle dsys=1/dsys1*dsys2/(1-dsys2)这 段报错 百度搜到的改正方法:%Design Dalin controller Z1=Z0,P;P1=Z;JG=zpk(Z1,P1,1/K,ts); dsys=G*dsys2/(1-dsys2);numc,denc=tfdata(dsys,v)

5、;在该版本这是一个错误的改法,虽然这样改后不报错。但是运行结果不对(传递函数结果与 所给传递函数不符)。我的改法:%Design Dalin controller dena1=denea-numa; fsys=tf(conv(denj,numa),conv(numj,dena1),ts); num4,den4=tfdata(fsys,v)num=num4/den4(1) den=den4/den4(1) z p k=tf2zp(num,den);2) 第二个错误 yout(k)=-den1(2)*y_1+num1(2)*u_2+num1(3)*u_3;这 段报错 改正办法:yout(k)=(-

6、den1(2)*y_1+num1(1)*u_1+num1(2)*u_5);3) 第三个错误%Using Dalin Method u(k)=(num(1)*error(k)+num(2)*error_1+num(3)*error_2+num(4)*error_3.-den 3)*u_1-den *u_2-de M 5)*u_3-den (6) *u_4-den(7)*u_5)/den (2);这段报错 改正办法:%Using Dalin Method u(k)=(num(1)*error(k)+num(2)*error_1+num(3)*error_2+num(4)*error_3.-den(

7、2)*u_1-den(3)*u_2-den(4)*u_3-de ”5) *u_4-de n(6) *u_5);附录clc clear all; close all;%PID=Kp*(1+Ti*1/s+Td*s)整定choose=);%手动优化or算法整定K=2;T=4;num=2;den=4 1;tau=4;choose=2;w=logspace(-1,2);%对数分布向量 num1,den1=pade(tau,4);%pade 时延四阶近似 num2,den2=series(num,den,num1,den1);% 结构串联 num3,den3=cloop(num2,den2);% 单 位负

8、反馈 z p k=tf2zp(num3,den3);%传函转换为零极点 bode(num2,den2),%bode 图 margin(num2,den2)%显示幅值裕量和相位裕量法,1 Ziegler-Nichols参数整定法,2临界比例度2 PI, 3 PD, 4 PID m=);%选择控制器类型choose=input(输入数字,0自动整定, while choose=0% 自动整定 n=input(输入数字,0 Cohen-Coon 参 法3大林算法n=);%选择整定方 if n=1|n=0|n=2 % 逻辑或 m=input(输入数字,控 end switch n %switc 开关选

9、case 0%Cohen-Coon(柯恩-库恩)法参数整定 Gc,Kp,Ti,Td = cc01(m,K,T,tau);break case 1 、,、%Ziegler-Nichols 法参数整定 Gc,Kp,Ti,Td = zn01(m,K,T,tau);break; case 2%临界比例度法整定rlocus(num2,den2)% 根轨迹图 rlocfind(num2,den2)%鼠标选择点求临界增益、周期 KL=input(临界 K 值=);Tk=input(临界震荡周期=);Gc,Kp,Ti,Td = ljbld(m,KL,Tk);break %调用 ljbld ()函数 case

10、3%大林算法ts=input(采样时间,ts=);tau=4;Tcloop=input(期望 T,Tcloop=);KL=1;N=tau/ts;%Plantp0=zeros(1,N);numj=Z0 num1;%产生和denj同维的矩阵 denj=den1 p0;%补充矩阵。ZAN%Ideal closed loop sys2=tf(1,Tcloop,1,inputdelay,4);%期望闭环传函 dsys2=c2d(sys2,ts,zoh);%带零阶保持器离散 numn,denn=tfdata(dsys2,v);x1=zeros(1,N);numa=x1 numn; x2=zeros(1,N

11、);denea=denn x2;sys1=tf(2,4,1,inputdelay,4);%系统传递函数 dsys1=c2d(sys1,ts,zoh)%专换离散模型时,输入加入零阶保持器。 num1,den1=tfdata(dsys1,v)%获得 z 传函的分子和分母 Z0=zeros(1,N);%Design Dalin controller2dena1=denea-numa;% Q(Z)/(1-Q(Z) =numa/(dena-numa)fsys=tf(conv(denj,numa),conv(numj,dena1),ts);%D(Z)=1/G(Z)*Q(Z)/(1-Q(Z)=(denj/n

12、umj)*numa/(dena-numa)num4,den4=tfdata(fsys,v)num=num4/den4(1)% 同除值不变den=den4/den4(1)% 化为首 1,最高次为 1z p k=tf2zp(num,den);u_1=0.0;u_2=0.0;u_3=0.0;u_4=0.0;u_5=0.0;u_6=0.0;u_7=0.0;u_8=0.0;u_9=0.0;u_10=0.0;y_1=0.0;%缓冲区赋初值error_1=0.0;error_2=0.0;error_3=0.0;%赋初值%ei=0;for k=1:1:200%k 初值 1 步长 1 终值 200time(k)

13、=k*ts;%定义 time(k) rin(k)=1.0; %单位阶跃信号 yout(k)=(-den1(2)*y_1+num1(1)*u_1+num1(2)*u_5);%系统输出响应差分方程,u_(N+1) error(k)=rin(k)-yout(k);% 误 差%Using Dalin Method u(k)=(num(1)*error(k)+num(2)*error_1+num(3)*error_2+num(4)*error_3.-de n( 2)*u_1-den *u_2-de n(4) *u_3-den (5)*u_4-den(6)*u_5);%大林控制器输出,u_(N+1)%Re

14、turn of dalin parametersu_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);%更 新缓冲区 u_9=u_8;u_8=u_7;u_7=u_6;u_6=u_5;y_1=yout(k);error_3=error_2;error_2=error_1;error_1=error(k);endotherwisedisp(This option is not available);break %n 为其他值endbreakendenddisp(This option is not available);完整,需要完整程序请留言。注:附录程序大林算法部分是完整的,但对于整个设计并不

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号