图5.3:传统PID仿真结果
5.3.2 关于两种不同仿真方法的说明
用编程语言仿真时得到的一组参数和用Simulink仿真时得到的一组参数有些差距。这个控制对象本身带有208秒的时滞,控制达到稳定需要几千秒的时间。程序是用循环来做的,我选取Ts=20秒,k=0~400,仿真4000秒只需要200次循环。为了减少每次仿真程序运行的时间,只能这样。而Simulink里面计算精度比较高,取样时间不同导致仿真方法调试出来的参数不同,但在数量级上是一致的。
误差刚开始是1,这是我写程序时没有采用延时的近似处理,这样更与实际情况贴合,图5.2、图5.3可以反映出实际情况
5.4 模糊PID控制仿真
5.4.1 模糊推理源代码分析
模糊PID控制,首先设置一组初始PID参数。在仿真过程中,时时检测控制误差e(k)及其变 化率ec(k),保存到两个变量中。在每次循环里: e_1=e(k+1);ec_1=e(k+1)-e(k);
然后调用第2.3节建立的那个模糊判决器:
k_pid=evalfis([e_1,ec_1],a); k_pid就是模糊判决器的输出,是一个三维的列向量,这三个数就是?kp 、?ki和?kd。然后对PID三个初始的参数进行修正。
Kp=Kp0+k_pid(1); Ki=Ki0+k_pid(2); Kd=Kd0+k_pid(3);
这样就完成了参数的自整定,因为程序是循环在执行的,所以参数的整定也是循环在做的。
5.4.2 参数调整及仿真结果
图5.4:模糊PID仿真结果
图5.5:模糊PID的误差变化
图5.6:kp、ki、kd自适应曲线
从图5.4与图5.3比较中可以看出,在响应时间差不多的情况下,模糊PID比传统PID超调有所减小,超调量大概5%。kp 、ki 、kd的自整定曲线如图5.5。
由以上图形,可以知道:
(1)模糊PID控制所得到的结果和传统的很接近。
(2)模糊PID在调整3个参量的时候有一个调整的空间,因此利用模糊PID进行控制时,得到参数会比用传统PID方法来的更快。
(3) 曲线开始略微上翘,是由于程序对延迟模块采用了一阶近似产生的误差。
5.5 动词PID控制仿真
动词PID控制中,动词规则的实现是建立在动词相似度的基础上,因此动词PID控制的仿真程序中,观察误差e的变化趋势,求e的变化与7条规则前件条件的相似度的部分,即用求相似度算法的动词PID控制的仿真程序,进行调试。 相似度算法有两种方法,本文用基于进化函数求相似度的方法进行仿真分析。另一种方法是基于简化的动词相似度的控制算法,与第一种算法结果类似,本为就不在阐述。
5.5.1 基于进化函数求相似度的动词PID控制的仿真调试
动词PID的仿真程序中,需要整定的参数更多了。同样要设置PID三个初始参数,还要设置参数调整的幅度:Kpscale、Kdscale和Kiscale。求相似度时要对一段时间内标准动词和观察动词的进化函数进行∧、∨运算并积分,由于仿真采用离散形式,所以一段时间的积分转换成几个点的累加,因此要设置累加的点的个数,在程序里建立一个变量mw=10。
动词PID的参数整定与模糊PID不同,Knext =Kcurrent + △K。为了避免能量过剩导致控制进入振荡的非稳定状态,还要设置PID三个参数变化的上下限。另外,△K反映了K下一步的变化趋势,而在动词规则里,K的变化还有速度之差别,become[adverb](noun1,noun2)中的adverb可以是slow或者fast,缺省是normally。所以再建立两个变量,beta_fast(bigger than1)和beta_slow (between (0,1)),再根据需要进行调整,缺省的beta是1。
5.5.1.1 程序模块及其仿真
(1)基于动词规则的模糊隶属度仿真程序如下:
en=e/abs(e(1)); enabs=abs(en);
muB=max(0,1+(enabs-1)-abs(enabs-1));
muM=max(0,1+(enabs-0.5)-3*abs(enabs-0.5)); muS=max(0,1-4*(enabs-0.25)); muZ=max(0,1-4*(enabs));
(2)动词相似度的求取(以动词become(big; medium)为例): Ab=0;
相关推荐: