前言
为了将仿真的模糊PID规则应用到硬件现实中去,需要把模糊PID规则表导出为离线查询表的模式,对于这个问题在很久之前就有人尝试解决过.
🚪:李会先.如何在MATLAB下把模糊推理系统转化为查询表(原创)
🚪:李会先.在SIMULINK里把模糊控制逻辑生成查询表(原创)
最先提出解决办法的就是上面这位老哥,但是文章目前已经不能查看(网易博客不运行了?!)但是网络上一直流行着大佬的传说,CSDN上有人搬运老哥的解决方法并在之基础上进行改进(应该是的吧,我也没有看到原文)
上面的链接文章里面用的都是比较老版本的matlab/Simulink了,我找了好久他们文章里面说的Tools -> System Test -> Launch System Test,不论是在matlab里还是simulink里都没有找到System Test,然后我发现好像是新版本的matlab/Simulink都没有这个app了:
所以我在思考2016a版本后的matlab/Simulink如何完成模糊规则转化成离线查询表的操作呢?
下面我给出我的解决方法。
第一步
根据自己的模糊规则建立模糊规则库(就是一个.fis文件,样子如下图),由于我所需要的是模糊PID规则库,所以我建立两输入三输出的模糊规则库,保存模糊规则库。
第二步
建立如下图的simulink模型,在Fuzzy Logic Controller导入上一步建立的模糊规则库,设置仿真为固定步长,步长为0.01,仿真时间为1.69s(仿真169步,13×13),保存模型。
第三步
这一步就要用新的Test App了,为了达到和System Test差不多的效果,需要用到Simulink里面的Simulink Test App(如下图)。之所以能找到这个app,这里不得不感谢这位B站UP主的视频(🚪:使用SimuLink中TestManager进行单元测试),我强烈建议大家看完他的视频再进行操作。
点击它的Manager进入下图界面:
导入第二步建立的simulink模糊PID模型
如果是直接从simulink进来的可以直接使用current model,不然需要导入新模型
从excel建立KE和KEC两输入
为了获得类似于上图的模糊规则查询表,每一个输出(KP、KI、KD)需要有169组计算,表中的每一个数值需要由KE和KEC这两个变量确定,只不过我只是把一个表格变成了两个列向量。
后面按照图示操作,具体如何操作下面图片有文字说明。
建立输出对象
后处理
我是通过导出为mat文件,然后将结果复制到excel,用vlookup功能进行重新排表。(对于如何使用vlookup函数匹配两个条件我推荐这一篇文章🚪:Excel 多条件查找公式(VLOOKUP+CHOOSE)。下面是我其中KP的模糊规则离线查询表: