编辑: 匕趟臃39 | 2019-09-14 |
以碱回收炉的水位控制为例具体论述调整系统控制量的模糊PID控制器的设计、2-D控制表的建立、以及控制器计算机设计与仿真的实现.借助MATLAB模糊控制工具箱和SIMULINK仿真工具进行的仿真实验表明,该控制器既吸收了模糊控制器良好的动态性能,又克服了模糊控制器静态性能较差的缺点.并且为碱回收炉上汽包水位控制提出了一种新的尝试.该控制器结构简单、参数调整方便、快捷. 关键词:模糊PID控制器;
计算机设计;
仿真;
2-D控制表
1 引言 ??? 目前,模糊控制理论及模糊控制系统的应用发展很快,显示出模糊控制在控制领域具有广阔的前景.模糊控制已成为智能控制的重要组成部分.在工业过程控制中,因为PID控制器所涉及的设计算法和控制结构简单,不要求非常精确的受控对象的数学模型,且众多的过程控制软件都带有PID控制器的算法模块,而被广泛应用于工业过程控制中.但是,PID控制器参数的整定尚需工程技术人员才能完成,对于存在时滞、非线性等因素的系统更难整定,调试过程中经常出现超调、振荡等影响系统正常运行的现象.模糊控制器具有不依赖控制对象精确的数学模型,减弱超调、防止振荡等优点.由此该文合理结合两种控制算法的优点提出一种调整系统控制量的模糊PID控制器,这种控制器在大偏差范围内利用模糊推理的方法调整系统控制量U,而在小偏差范围内转化为PID控制,并以给定的偏差范围自动完成二者的转化.该文将论述调整系统控制量的模糊PID控制器的计算机设计与仿真.并以碱回收炉上汽包水位控制为例具体论述该控制器中2-D控制表建立、计算机设计与仿真.
2 调整系统控制量的模糊PID控制器的计算机设计 ??? 该控制器中主要包含二维的模糊控制器和PID控制器.在大偏差范围内通过模糊控制器实现过程控制.模糊控制通过模糊逻辑和近似推理方法,让微机把人的经验形式化、模型化,根据给定的语言控制规则进行模糊推理,给出模糊输出判决,并将其转化为精确量,作为馈送到被控对象(或过程)的控制作用.其中所使用的模糊控制器为常用的二维模糊控制器.在实际应用中,一般是用系统输出的偏差E和输出偏差的变化率EC作为输入信息,而把控制量的变化作为控制器的输出量,以此确定模糊控制器的结构.Ke 和Kec表示量化因子, Ku表示比例因子.并且在实际微机模糊控制中,一般先确定出2-D控制表,然后将此表存入微机的存储器中,这样在实际的过程控制中,微机根据采样到的E和EC通过查询控制表求得控制量U,馈送到控制对象实现过程的模糊控制. ??? 在小偏差范围内通过传统的PID控制算法实现过程控制.控制器的结构如图1所示.下面将以碱回收炉上汽包水位的调整系统控制量的模糊PID控制系统为例介绍控制器的设计. ??? 碱回收炉上汽包水位控制系统通常主要由上汽包、液位变送器、控制器和锅炉给水阀组成.在大偏差范围,一般选上汽包实际水位与给定水位的差值E及其变化率EC作为模糊控制器的输入语言变量,馈送给给水阀的控制量U为其输出控制量,在小偏差范围内,选用实际水位与给定水位的差值E作为PID控制器的输入,其输出作为锅炉给水阀的控制量U.二者通过系统的偏差E实现自动切换.这样既可以通过模糊控制器加快过程动态响应过程,减弱超调和振荡现象,减弱调试过程对碱回收炉正常运行的影响,又可以通过常用的PID控制器在小偏差范围内实现精确控制,减少纯模糊控制器带来的稳态误差. 选取上汽包水位误差E及其误差变化率EC和控制量U的论域分别为: E={-6,-5,-4,-3,-2,-1,-0,+0,1,2,3,4,5,6} EC={-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6} U={-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7} E、EC和U的语言变量值分别为: E={NB,NM,NS,NZ,PZ,PS,PM,PB} EC={NB,NM,NS,Z,PS,PM,PB} E={NB,NM,NS,Z,PS,PM,PB} ??? 依据操作者的控制经验,可建立碱回收炉上汽包水位模糊控制系统的模糊控制规则如表1所示. ??? 实际模糊控制时的2-D控制表可利用MATLAB编制如下的MATLAB语言求得. %模糊控制器设计 %建立FIS fuz2=newfis( simpleFuzzy2 );
??? %设置语言变量E和三角形隶属函数 fuz2=addvar(fuz2, input , e ,[-6,6]);
fuz2=addmf(fuz2, input ,1, NB , trimf ,[-6,-6,-4]);
fuz2=addmf(fuz2, input ,1, NM , trimf ,[-6,-4,-2]);
fuz2=addmf(fuz2, input ,1, NS , trimf ,[-4,-2,0]);
fuz2=addmf(fuz2, input ,1, NZ , trimf ,[-1,0,0]);
fuz2=addmf(fuz2, input ,1, PZ , trimf ,[0,0,1]);
fuz2=addmf(fuz2, input ,1, PS , trimf ,[0,2,4]);
fuz2=addmf(fuz2, input ,1, PM , trimf ,[2,4,6]);
fuz2=addmf(fuz2, input ,1, PB , trimf ,[4,6,6]);
%设置语言变量EC和三角形隶属函数 fuz2=addvar(fuz2, input , ec ,[-6,6]);
fuz2=addmf(fuz2, input ,2, NB , trimf ,[-6,-6,-4]);
fuz2=addmf(fuz2, input ,2, NM , trimf ,[-6,-4,-2]);
fuz2=addmf(fuz2, input ,2, NS , trimf ,[-4,-2,0]);
fuz2=addmf(fuz2, input ,2, Z , trimf ,[-2,0,2]);
fuz2=addmf(fuz2, input ,2, PS , trimf ,[0,2,4]);
fuz2=addmf(fuz2, input ,2, PM , trimf ,[2,4,6]);
fuz2=addmf(fuz2, input ,2, PB , trimf ,[4,6,6]);
%设置控制变量U和三角形隶属函数 fuz2=addvar(fuz2, output , u ,[-7,7]);
fuz2=addmf(fuz2, output ,1, NB , trimf ,[-7,-7,-5]);
fuz2=addmf(fuz2, output ,1, NM , trimf ,[-7,-5,-3]);
fuz2=addmf(fuz2, output ,1, NS , trimf ,[-5,-3,-1]);
fuz2=addmf(fuz2, output ,1, Z , trimf ,[-2,0,2]);
fuz2=addmf(fuz2, output ,1, PS , trimf ,[1,3,5]);
fuz2=addmf(fuz2, output ,1, PM , trimf ,[3,5,7]);
fuz2=addmf(fuz2, output ,1, PB , trimf ,[5,7,7]);
rr=[
7 7
6 5
5 5 5;
????
7 6
5 5
5 5 5;
????
6 5
5 5
4 4 4;
????
5 5
4 4
4 3 3;
????
5 5
4 4
4 3 3;
????
4 4
4 3
3 3 2;
????
3 3
3 3
3 2 1;
????
3 3
3 3
2 1 1];
? r1=zeros(prod(size(rr)),3);
? k1=1;
? for i=1:size(rr,1) ??? for j=1:size(rr,2) ???? r1(k1,:)=[i,j,rr(i,j)];
???? k1=k1+1;
???? end ? end ? [r,s]=size(r1);
? r2=ones(r,2);
? rulelist=[r1,r2];
? fuz2=addrule(fuz2,rulelist);
%设置去模糊方法(重心法) ? fuz2=setfis(fuz2, DefuzzMethod , centroid );
%绘制FIS系统图形 plotfis(fuz2);
Ulist=zeros(13,14) %建立控制表 for i=1:13 ?for j=1:14 ??? e=-7+j;
?if (e........