可以设定这个variable 的取值范围(range)。如图2.4所示。新建的variable默认只有3个子集,在Membership Function Editor中点击EditAdd MFs ,添加子集,加到7个。按照模糊隶属度设定每个子集的名字(Name)、形状(Type)和覆盖范围(Params)。
添加规则:在FIS Editor中点击EditRules,弹出Rule Editor。如图2.5所示。 新建的模糊判决器有0条规则,按照模糊控制规则表,使用Rule Editor底部的“添加规则(Add rule)”和“修改规则(Change rule)”按钮设定模糊控制的49条规则。先添加条数,再按规则修改。最后将该FIS保存,在FIS Editor中点击FileExportTo Disk,保存为fuzzpid.?s 。
图2.4:Membership Function Editor
图2.5:Rule Editor
4.4.1.2 用Matlab程序生成模糊判决器[1]
用Matlab程序语言也能生成和上一节一模一样的fuzzpid.fis。 a=newfis(’fuzzpid’); 建立一个新的FIS,取名fuzzpid。 escale=1;
a=addvar(a,’input’,’e’,[-3*escale,3*escale]);添加variable
a=addmf(a,’input’,1,’NB’,’zmf’,[-3*escale,-1*escale]);本行往下共7行分别添加MFs a=addmf(a,’input’,1,’NM’,’trimf’,[-3*escale,-2*escale,0]);
a=addmf(a,’input’,1,’NS’,’trimf’,[-3*escale,-1*escale,1*escale]); a=addmf(a,’input’,1,’Z’,’trimf’,[-2*escale,0,2*escale]); a=addmf(a,’input’,1,’PS’,’trimf’,[-1*escale,1*escale,3*escale]); a=addmf(a,’input’,1,’PM’,’trimf’,[0,2*escale,3*escale]); a=addmf(a,’input’,1,’PB’,’smf’,[1*escale,3*escale]);
这几行代码添加了e这个variable,作为input,range为[-3,3],e有7个子集,Name、Type和 Params各不相同。ec、kp、ki、kd的添加方式完全类似,只需更改scale和input(output), “addmf(a,’input’,1? ?”中 的“1”依 次 改 为2、3、4、5。个 人 感 觉 这 样 子 生 成FIS比 用FIS Edit还 快。FIS Edit虽 然 有 友 好 的 用 户 界 面,但 每 个variable、每 个mfs、49条 规 则 都 要 一 一 输 入;而 上 述 程 序 具 有 通 用 性,比 如e的range变 为[-30,30],只 需 要 将escale赋 值 为10即 可。ec、kp、ki、kd的scale的更改完全类似。
rulelist=
[1 1 7 1 5 1 1;
1 2 7 1 3 1 1; 。。。。。 。。。。。
7 6 1 7 5 1 1; 7 7 1 7 7 1 1]; (↑总共49行) a=addrule(a,rulelist);
这几十行代码实现49条模糊控制规则的添加。每一行代表一条规则,由前5个 数字来完成对规则的描述。数值1~7按顺序代表从NB到PB7个子集,5个数字的位置对应e、ec、kp、ki、kd。比如,第一行前5个数字为:1-1-7-1-5,代表NB-NB-PB-NB-PS,其对应的模糊规则为:
If (e is NB) and (ec is NB) then (kp is PB)and (ki is NB) and (kd is PS)。
这个rulelist可以完全按照模糊控制规则,用数字代表7个字母符号列出来的。这个rulelist也是通用的。
a=setfis(a,’DefuzzMethod’,’mom’);解模糊的算法设定为Mandani,也可以改为Sugeno。
writefis(a,’fuzzpid’); a=readfis(’fuzzpid’);
这样子就生成了一个和上一小节完全一模一样的fuzzpid.fis。
4.4.1.3 模糊判决器的使用 这个模糊判决模块,可以作为一个模块嵌入到Simulink模型编辑窗口当中,在本章中可以看到其用法。这个模块还能被Matlab编程语言调用,在第5章用Matlab程序进行模糊PID控制仿真的时候会用到。
4.4.2 建立系统模型
模糊PID控制系统最核心的部分是模糊判决器,这个判决器可以作为一个模块放入到simulink模型编辑器中,在Matlable主窗口中输入fuzzy,弹出FIS Editor,点击File→Export→To Workspace,把这个判决器添加到工作空间。然后在simulink模型编辑器中,按图4.4从库中选择模块,更改参数,连线,这样建立起模糊PID控制系统模型。从图中可以清楚地看出模糊控制对P、I、D三个参数的调整作用。比如PID控制中的微分 环节的输出ud = (Kd0 + ?kd) × ec,而在这个系统模型中,ud = Kd0 × ec + ?kd × ec,与PID控制理论是一致的。
图4.4:模糊PID控制系统模型
图4.5:模糊PID仿真结果
4.4.2 调试
模糊PID控制需要调整的参数包括PID三个初始值,以及模糊判决器2个输入3个输出的论 域。传统PID调出的三个参数对模糊PID的三个初始参数有一定的参考价值。
仿真的控制目标是1,故设置e和ec的论域均为[-1.5,1.5];模糊判决器的输出是?K ,是对 三个初始参数进行调整,所以?K 的论域大小应该与对应的K数量级相当或较小。如果?K 论域数量级明显超过对应的K的初始值,那初始值的设定就没什么意义了。
设置?kp论域为[-0.15,0.15],?ki论域为[-0.003,0.003],?kd论域为[-500,500]。 每次改变论域,模糊判决器就发生改变。在Matlab6.5中进行仿真时,每次都必须在FISEditor 中重新打开这个模糊判决器,重新将其导入工作空间,Simulink才能使用最新修改的模糊判决器来进行仿真。
这个系统的模糊PID控制的仿真结果,没有实现对传统PID控制的改进。本人尝试着对三个PID初始参数以及5个论域进行调整,但能得到的最佳组合就是上述的数值。按上述数值得到的仿真曲线与传统PID控制相比,超调减少,但控制系统达到的稳定时间要长些,如图4.5所示。
4.5
关于动词PID控制Simulink仿真的一点说明
模糊控制理论已经问世数十年,在Matlab中已经集成了模糊判决器的模型,可以对模糊判 决器进行修改,嵌入到Simulink模型编辑器中,进行模糊控制的仿真。动词PID控制器目前还未大面积推广,Matlab中没有相应的集成模块,因此没有进行动词PID控制的Simulink仿真。 动词PID控制并不是无法用Simulink进行仿真,只是难度比较高,工作量比较大,本人没有进行研究,这里
相关推荐: