先进PID控制及MATLAB仿真第3章专家PID学习心得及疑问.docx
《先进PID控制及MATLAB仿真第3章专家PID学习心得及疑问.docx》由会员分享,可在线阅读,更多相关《先进PID控制及MATLAB仿真第3章专家PID学习心得及疑问.docx(77页珍藏版)》请在冰豆网上搜索。
先进PID控制及MATLAB仿真第3章专家PID学习心得及疑问
先进PID控制及MATLAB仿真第3章专家PID学习心得及疑问
因为课题需要,刚开始学习专家控制器matlab仿真,用的是刘金锟先进PID控制及MATLAB仿真。
有一些问题想和大家交流,向大家请教。
1、第三章专家PID中,第一条规则应按最大输出。
在p96例3-1中输出分别为0.45、0.40、0.12、0.01。
如果我的输入信号不是阶跃信号,而是从0到1缓慢变化的s形曲线,如v=[1-cos(pi/50*t)]*735。
输出还可以设定为0.45、0.40、0.12、0.01吗?
2、专家PID控制中第二条规则当误差处在增大阶段,前面讲的输出为,
而例3-1中rule2输出u(k)=u_1+1.5*kp*x
(1)。
这与上式为什么不同?
我觉得kp*x
(2)+ki*x
(1)+kd*[x
(2)-x2_1]等于u(k)的导数,对不对?
它与kp*x
(1)相等吗?
为什么在例3-1中不用?
3、假设某时刻误差处在变大阶段,且x
(1)=0.25。
程序执行时首先执行rule1,因为误差大于0.2,则u(k)=0.12。
然后再判断rule2,因为条件也满足,误差值在变大,也大于0.05所以u(k)又变为u_1+1.5*kp*x
(1)。
这样程序是不是存在二义性?
而且在我应用此算法仿真一五阶系统时(详见附件),rule5误差值小于0.001,则输出震荡,而改为0.1,则输出正常。
这样,很多时候,只要误差小于0.1,则执行rule1,u(k)先等于0.1,再执行rule2,等于u_1+1.5*kp*x
(1),再执行rule5,等于0.4*x
(1)+0.475*x(3)。
这样,使得rule2、rule4根本就不起作用。
我觉得各误差段应既无遗漏又不重叠。
不知我的理解对否?
4、本来我对采样时间的理解是采样时间越短,仿真精度越高。
但我发现只改变采样时间,其它不变,则输出大不相同,甚至震荡。
一开始我以为我的控制器没设计好,后来我找了书上不少例子试了试,例3-1、1-9、1-12都有此现象。
这怎么解释?
那这样仿真,和其他控制方法比较时还有可信度吗?
也必须在相同采样时间下吗?
5、在simulink模型仿真时,怎样设置采样时间?
在configurationparameter中,有sampletime,但都不能设定具体值。
在solver中,当采用固定步长时,不能设置采样时间。
当采用变步长ode45时,maxsteptime和minsteptime又不能设置为相等。
难道只有采用默认采样时间?
而默认的又是多少呢?
6、input delay和transportdelay 、iodelay到底有什么区别啊?
带延迟环节的传递函数应该用哪个来表示,还是都可以?
7、在例3-1加入滞后,sys=tf(5.235e005,[1,87.35,1.047e004,0],'inputdelay',76000000);结果输出和不加滞后完全一样,不管滞后有多大。
我自己的控制器也是如此。
是专家PID抵抗滞后能力强,还是滞后加的不对?
8、例3-2.s.m中最后一句sys=[sys;x(3)];是什么意思?
输出为什么是加上x(3)的增广矩阵?
这些问题困扰我好长时间了,百思不得其解,书上也找不到相关的资料。
如能解惑,不胜感激。
谢谢
我的专家控制器
附:
我的专家控制器
%ExpertPIDController
clearall;
closeall;
ts=0.001;
sys=tf(158.91e6,[0.7596133.7281.405e46.237e51.015e79.015e6]);
dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'v');
u_1=0.0;u_2=0.0;u_3=0.0;u_4=0.0;u_5=0.0;
y_1=0;y_2=0;y_3=0;y_4=0;y_5=0;
x=[0,0,0]';
x2_1=0;
kp=1.44;
ki=1.28;
kd=0.008;
error_1=0;
fork=1:
1:
5000
time(k)=k*ts;
rin(k)=1; %TracingJieyueSignal
u(k)=kp*x
(1)+kd*x
(2)+ki*x(3);%PIDController
%Expertcontrolrule
ifabs(x
(1))>0.8 %Rule1:
Unclosedcontrolfirstly
u(k)=0.45;
elseifabs(x
(1))>0.40
u(k)=0.30;
elseifabs(x
(1))>0.20
u(k)=0.2;
elseifabs(x
(1))>0.10
u(k)=0.03;
elseifabs(x
(1))<=0.05%Rule5:
IntegrationseparationPIcontrol
u(k)=0.25*x
(1)+1.75*x(3);
elseifx
(1)*x
(2)>0|(x
(2)==0) %Rule2
ifabs(x
(1))>=0.1
u(k)=u_1+1.5*[kp*x
(2)+ki*x
(1)];
else
u(k)=u_1+0.6*[kp*x
(2)+ki*x
(1)];
end
elseifx
(1)*x
(2)<0&x
(2)*x2_1<0 %Rule4
ifabs(x
(1))>=0.1
u(k)=u_1+2*kp*error_1;
else
u(k)=u_1+0.4*kp*error_1;
end
end
if(x
(1)*x
(2)<0&x
(2)*x2_1>0)|(x
(1)==0) %Rule3
u(k)=u(k);
end
%Restrictingtheoutputofcontroller
ifu(k)>=2
u(k)=2;
end
ifu(k)<=0
u(k)=0;
end
%Linearmodel
yout(k)=-den
(2)*y_1-den(3)*y_2-den(4)*y_3-den(5)*y_4-den(6)*y_5+num
(2)*u_1+num(3)*u_2+num(4)*u_3+num(5)*u_4+num(6)*u_5;
error(k)=rin(k)-yout(k);
%----------ReturnofPIDparameters------------%
u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
y_5=y_4;y_4=y_3;y_3=y_2;y_2=y_1;y_1=yout(k);
x
(1)=error(k); %CalculatingP
x2_1=x
(2);
x
(2)=(error(k)-error_1)/ts; %CalculatingD
x(3)=x(3)+error(k)*ts; %CalculatingI
error_1=error(k);
end
figure
(1);
plot(time,rin,'b',time,yout,'r');
xlabel('time(s)');ylabel('rin,yout');
gridon;
刚学PID的一点想法
PID
这几天稍微看了一点点的PID,今天有了小小头绪,于是,就想把自己的想法写出来,欢迎拍砖。
最开始的时候,是先了解什么是PID。
PID实指“比例proportional”、“积分integral”、“微分derivative”,如果我们要求被控制的对象最终趋于一个稳定的结果,一般就可以使用PID算法。
假设说,有一辆速度为1m/s的小车,我们要求他的速度改变为5m/s,要完成这样的一件事,我们必须要有,1.小车驱动装置(用程序控制它输出多大的电压,电压决定驱动的马力),2.被驱动器控制的部分(即小车),3.检测当前速度的装置(当前速度与目标速度的差称为误差)。
本来,我们可以给小车一个驱动力让小车加速,直到检测到小车速度达到5m/s,撤去驱动力。
然而,这样做会带来几个问题。
1,当小车速度达到5m/s时,从装置检测到这个速度,通知控制器,让控制器改变输出的电压,这一个过程需要耗费一定时间,在这个时间里面,小车速度可能增加了不少。
2,撤去驱动力后,外界条件如摩擦会让小车速度进一步改变。
PID算法可以在一定误差内解决这些问题。
使用PID算法时,大致是这样的。
每一个采样周期,通过速度检测装置获得当前速度,传入程序,通过程序计算得到电压控制小车得到新速度。
下一个采样周期又把新速度传入,获得新电压,再传入速度,再获得电压,如此反复。
PID算法的关键,是如何根据当前得到的速度值,输出一个“恰当”的电压,以致小车最终能够趋于稳定。
PID算法采用比例,积分,微分三种方法进行控制。
三种方法都有自己对应的一个常量(pconst,iconst,dconst)。
这三个变量都需要在实验中多次尝试得出。
一般地,先把与算法相关的量放入一个结构体,方便调用。
srtuctPID
{
double pconst, //比例控制常量
iconst, //积分控制常量
dconst; //微分控制常量
double ErrorSum; //误差累计
double iMax,iMin; //积分上下限
double Vnew; //当前速度
};
比例:
Vnew=GetV(); //获得当前速度
error=aim-Vnew; //误差=目标速度-当前速度
pTerm=error*pconst; //比例项的值就是误差乘上比例常量
Motor(pTerm); //让电机根据得出的值工作
有时候,我们增大比例常数可以让小车更快的到达目标速度,但是过大的比例常数又容易产生过冲,即速度超过目标速度5m/s,然后再减速,再加速,在减速。
这样,系统产生振荡,然而,振荡的结果不一定能趋于稳定。
积分:
Vnew=GetV(); //获得当前速度
ErrorSum+=(aim-Vnew); //每一次的误差累计起来
if(ErrorSum>iMax)ErrorSum=iMax;
elseif(ErrorSum iTerm=ErrorSum*iconst; //误差和乘上积分常量
Motor(iTerm); //让电机根据得出的值工作
一般我们都让比例配合积分一起使用,即PI算法,类似上面的程序,得出pTerm和iTerm,然后Motor(pTerm+iTerm)。
PI控制一般会比纯比例控制花费更少时间使小车到达目标值,但是我们必须避免积分饱和,通常的做法是像上面程序一样设定iMax和iMin。
它们和积分常量的大小相关。
微分:
我们用比例控制或者PI控制,都不能保证任何系统一定能趋于稳定。
比例控制根据现在来控制。
积分控制根据过去来控制。
而微分能够根据将来来控制,非常强大,能使被控设备更好地趋于稳定。
Vnew=GetV(); //获得当前速度
dTerm=(Vnew-Vlast)*dconst; //当前速度-上次速度,再乘微分常数
Vlast=Vnew; //保留本次速度,下次当成上次速度使用
Motor(dTerm); //让电机根据得出的值工作
同样,微分控制也是与比例,积分一起使用,形成PID算法,Motor(pTerm+iTerm+dTerm)。
微分控制相当强大,然而也很容易出问题。
具体调控和整定我想等到实际应用时再学习。
PID控制是工程控制中最常用的控制算法,最简单的PID控制就是
其实质就是一个关于比例,积分,微分控制公式
注:
上式中第一个Td应改为Ti,为笔误.
其传递函数为G(s)=U(s)/error(s)=Kp*[1+(1/Ti*s +Td*s)}
当反馈中有误差存在时,
(1)比例坏节第一时间对误差进行放大送给控制器,
(2)而积分环节扮演的角色就是当有误差时误差随着时间的增加就会越来越大,
(3)而微分环节所扮演的角色就是当误差变化向减小方向时(即(e(t)-e(t-1)<0)),微分的作用就是负方向的,而当误差变化向较大方向变化时(即e(t)-e(t-1)>0),微分作用就是正方向的且误差变化(e(t)-e(t-1)的值)越快那么微分作用就越大。
从以上三条中我们可以得到一个很有效的信息那就是比例积分对误差的作用都是正作用的,但是微分却不同,微分与误差没有关系只与系统加速与减速有关,若系统在加速那么微分作用为正,若系统为减速那么微分作用为负向,它可以有效地对系统进行动态的调节,对系统的惯性进行有效的抑制。
PID参数整定[原创2011-05-0415:
19:
47]
字号:
大中小
上一章简单介绍了自动调节的发展历程。
搞自动的人,许多人对如何整定PID参数感到比较迷茫。
课本上说:
整定参数的方法有理论计算法和经验试凑法两种。
理论计算法需要大量的计算,对于初学者和数学底子薄弱的人会望而却步,并且计算效果还需要进一步的修改整定,至今还有人在研究理论确认调节参数地方法。
所以,在实际应用过程中,理论计算法比较少。
经验试凑法最广为人知的就是第一章提到的整定口诀了。
该方法提供了一个大致整定的方向形性思路。
当时整定参数,需要两只眼睛盯着数据看,不断地思考琢磨。
上世纪90年代的时候,我就曾经面对着I型和II型仪表,就这么琢磨。
如果是调节周期长的系统,比如汽温控制,需要耗费大量的时间。
科学发展到了今天,DCS应用极其普遍,趋势图收集极其方便。
对于单个仪表,也大都有趋势显示功能。
所以,我们完全可以借助趋势图功能,进行参数整定。
我们可以依靠分析比例、积分、微分的基本性质,判读趋势图中,比例、积分、微分的基本曲线特征,从而对PID参数进行整定。
这个方法虽然基本等同于经验试凑法,但是它又比传统的经验试凑法更快速更直观的,更容易整定。
因而,我把这种依靠对趋势图的判读,整定参数的办法,称之为:
趋势读定法。
趋势读定法三要素:
设定值、被调量、输出。
三个曲线缺一不可。
串级系统参照这个执行。
这个所谓的趋势读定法,其实早就被广大的自动维护人员所掌握,只是有些人的思考还不够深入,方法还不够纯熟。
这里我把它总结起来,大家一起思考。
这个东西看着新鲜,其实一点都不高深,上过初中的人,只要受过严格训练,都可以成为整定参数的好手。
什么?
初中生理解积分微分的原理么?
恩,初中生没有学过微积分,可是一旦你给他讲清楚微积分的物理意义,然后认真训练判断曲线的习惯和能力,完全可以掌握好PID的参数整定。
苦功夫还要花的。
必须要经过比较严格的训练。
怎么才算受过严格训练呢?
我不了解别人是怎么训练的,我只根据我自己理解的情况,把我认为正确的理解给大家讲述一下。
咱既然说了,初中生都可以理解,那么咱依旧避免繁琐的公式推导,只对其进行物理意义分析。
提前声明:
这些物理意义的分析,非常简单,非常容易掌握,但是你必须要把下面一些推导结论的描述弄熟弄透,然后才能够进行参数整定。
很简单的哦。
在介绍PID参数整定之前,先介绍几个基本概念:
2-1几个基本概念
单回路:
就是只有一个PID的调节系统。
串级:
一个PID不够用怎么办?
把两个PID串接起来,形成一个串级调节系统。
又叫双回路调节系统。
在第三章里面,咱们还会更详细的讲解串级调节系统。
在此先不作过多介绍。
主调:
串级系统中,要调节被调量的那个PID叫做主调。
副调:
串级系统中,输出直接去指挥执行器动作的那个PID叫做副调。
主调的输出进入副调作为副调的设定值。
一般来说,主调为了调节被调量,副调为了消除干扰。
正作用:
比方说一个水池有一个进水口和一个出水口,进水量固定不变,依靠调节出水口的水量调节水池水位。
那么水位如果高了,就需要调节出水量增大,对于PID调节器来说,输出随着被调量增高而增高,降低而降低的作用,叫做正作用。
负作用:
还是这个水池,我们把出水量固定不变,而依靠调节进水量来调节水池水位。
那么如果水池水位增高,就需要关小进水量。
对于PID调节器来说,输出随着被调量的增高而降低的作用叫做负作用。
动态偏差:
在调节过程中,被调量和设定值之间的偏差随时改变,任意时刻两者之间的偏差叫做动态偏差。
简称动差。
静态偏差:
调解趋于稳定之后,被调量和设定值之间还存在的偏差叫做静态偏差。
简称静差。
回调:
调节器调节作用显现,使得被调量开始由上升变为下降,或者由下降变为上升。
阶跃:
被观察的曲线呈垂直上升或者下降,这种情况在异常情况下是存在的,比如人为修改数值,或者短路开路。
2-2 P——纯比例作用趋势图的特征分析
前面说过,所谓的P,就是比例作用,就是把调节器的输入偏差乘以一个系数,作为调节器的输出。
温习一下:
调节器的输入偏差就是被调量减去设定值的差值。
一般来说,设定值不会经常改变,那就是说:
当设定值不变的时候,调节器的输出只与被调量的波动有关。
那么我们可以基本上得出如下一个概念性公式:
输出波动=被调量波动*比例增益
注意,这只是一个概念性公式,而不是真正的计算公式。
咱们弄个概念性公式的目的在于:
像你我这样的聪明人,不屑于把精力用在考证那些繁琐的公式上面,我们关注什么呢?
我们关注的是公式内部的深层含义。
呵呵。
我们就来努力挖掘它的深层含义。
通过概念性公式,我们可以得到如下结论,对于一个单回路调节系统,单纯的比例作用下:
输出的波形与被调量的波形完全相似。
纯比例作用的曲线判断其实就这么一个标准。
一句话简述:
被调量变化多少,输出乘以比例系数的积就变化多少。
或者说:
被调量与输出的波形完全相似
为了让大家更深刻理解这个标准,咱们弄几个输出曲线和被调量曲线的推论:
1、对于正作用的调节系统,顶点、谷底均发生在同一时刻。
2、对于负作用的调节系统,被调量的顶点就是输出的谷底,谷底就是输出的顶点。
3、对于正作用的调节系统,被调量的曲线上升,输出曲线就上升;被调量曲线下降,输出曲线就下降。
两者趋势完全一样。
4、对于负作用的调节系统,被调量曲线和输出曲线相对。
5、波动周期完全一致。
6、只要被调量变化,输出就变化;被调量不变化,不管静态偏差有多大,输出也不会变化。
上面6条推论很重要,请大家牢牢记住。
记住不记住其实没有关系,只要你能把它溶化在你的思想里也行。
溶化了么?
那我出个思考题:
1、被调量回调的时候,输出必然回调么?
2、 被调量不动,设定值改变,输出怎么办?
3、 存在单纯的比例调节系统么?
4、 纯比例调节系统会消除静差么?
第一条回答:
是。
第二条回答:
相当于被调量朝相反方向改变。
你想啊,调节器的输出等于输入偏差乘以一个系数,设定值改变就相当于设定值不变被调量突变。
对吧?
第三条回答:
是。
在电脑出现之前,还没有DCS,也没有集中控制系统。
为了节省空间和金钱,对于一些最简单的有自平衡能力的调节系统,比如水池水位,就用一个单纯的比例调节系统完成调节。
第四条回答:
否。
单纯的比例调节系统可以让系统稳定,可是他没有办法消除静态偏差。
那么怎么才能消除静态偏差呢?
依靠积分调节作用。
为了便于理解,咱们把趋势图画出来分析。
见图2:
图2:
比例作用下的调节曲线
假设被调量偏高时,调门应关小,即PID为负作用。
在定值有一阶跃扰动时,调节器输入偏差为-△e。
此时Tout也应有一阶跃量△e·(1/δ),然后被调量不变。
经过一个滞后期t2,被调量开始响应Tout。
因为被调量增加,Tout也开始降低。
一直到t4时刻,被调量开始回复时,Tout才开始升高。
两曲线虽然波动相反,但是图形如果反转,就可以看出是相似形。
一般来说,积分作用往往被初学者过度重视。
因为积分作用造成的超调往往被误读为比例作用的不当。
而对于一个很有经验的整定高手来说,在一些特殊情况况下,积分作用往往又被过度漠视。
因为按照常理,有经验的人往往充分理解积分作用对静态偏差的作用,可是对于积分作用特殊情况下的灵活运用,却反而不容易变通。
以前看史书,毛泽东曾指着邓小平对一个苏联人说:
瞧见那个小个子了没有?
这个人很了不起,既有原则性,又有灵活性。
瞧见没有,最高明的政治家们都注重原则性和灵活性之间的微妙的关系,咱们搞自动的,实际上也离不开原则性和灵活性啊。
当然了,对于一般的初学者,还不到感悟灵活性的时候。
初学者只有老老实实先把原则掌握再说。
灵活性是建立在原则的基础之上的。
就如同现实生活中一样,没有原则的灵活是什么?
老滑头。
什么时候才可以灵活?
等你能够彻底解读调节曲线,并能够迅速判断参数大小的时候,才可以稍微尝试了解灵活性。
千万不要耍滑头哦。
2-6 比例积分微分作用的特征曲线分析
2-7 整定参数的几个原则
大家看过百家讲坛里面王广雄教授讲自动调节系统么?
我没有看过,很遗憾。
不过我听别人说王教授这么说自动调节系统:
她里面处处闪烁着哲学的光辉。
这个光辉我也经常感觉得到。
并且我觉得,似乎它不仅仅是一门技术,而且还是一门艺术。
因为对于一个复杂的自动调节系统,你永远不能确定哪个参数是最好的。
只要你愿意下功夫去整定,似乎总有更适合的参数等着你。
而等到一个系统遇到了很复杂的大干扰的时候,一般情况下,你总想修改已经极其膨胀了的控制策略,效果虽有好转,可总是难以适应各种工况,参数愈来愈多,整定愈来愈复杂。
可是等到你某一天突然灵光一闪,想到一个新鲜思路的时候,你激动得恨不得马上从床上爬下来要去应用,第二天你发现既不需要修改控制策略,应用效果又出奇的好的时候,你会感到一种艺术的成就感和满足感。
这就是自动调节系统的魅力。
它需要你在各个问题、各个参数之间反复权衡,在灵活性和原则性之间思想游走,在全面和孤立之间合并分解。
机械与权衡的变通、灵活性和原则性的关系前面已经说过了。
下面还要说说全面和孤立的关系。
对于一个复杂调节系统,既要全面看待一个系统,又要学会孤立看待一个系统。
原则与灵活,全面与孤立,都是个辩证的问题。
其实谁都知道要全面看待问题这个说法。
要全面了解整个调节系统,要对工艺流程、测量回路、数据处理DCS或者PLC、控制调节过程、PID各个参数、操作器、伺服放大器、执行器、位置反馈、阀门线形等各个环节都要了解,出了问题才能够