首页 理论教育 实现模糊算法的优化方式

实现模糊算法的优化方式

时间:2023-06-16 理论教育 版权反馈
【摘要】:本小节介绍的用PLC程序实现模糊控制算法,实际是上一节模糊控制算法介绍的注解。整个程序由3部分组成:即模糊化程序、模糊推理程序和解模糊程序。其结果存于“入模糊集形参”中。因为本例有5个模糊子集。图4-58 模糊推理子程序调用图4-57c子程序P12为先乘运算,后累加。解模糊用的是最大隶属度法。

实现模糊算法的优化方式

小节介绍的用PLC程序实现模糊控制算法,实际是上一节模糊控制算法介绍的注解。所用的实例也是洗澡水温度的模糊控制。整个程序由3部分组成:即模糊化程序、模糊推理程序和解模糊程序。

1.模糊化程序

图4-55所示为模糊化子程序。它用于一个“Δ”,或半“Δ”型的模糊子集的隶属度计算。为便于理解,程序所用的数据用符号表示。

图4-56为调用它的主程序。为便于理解,程序所用的数据也用符号表示。但在每次调用它之前,先对“标志值形参”赋值,即指明该模糊子集隶属度为1时对应的精确量值,如“暖和”隶属度为1时,其值是40℃等;调用后,还得取出返回值,这里即为某输入模糊子集,如暖和等。

对图4-55a程序:先是求出“输入现值”与“标志值形参”(其实际值由计算模糊子集确定)的差(差存于DM72中),并相应判断这两个值,看哪个大(用LR0.00表达,0时前者大,1时后者大)。然后,把这个“差”乘10(积还存于DM72中)。再,此“差”被“上半范围”或“下半范围”(见图4-47)除,其“商”仍存于DM72中。最后,用这个“商”去减10。其结果存于“入模糊集形参”中。这也就是所求的隶属度。只是,它不是处于0~1之间的数,而是0~10之间的数。因为,这里用的都是整数运算指令,故做了这么处理了。

对图4-55b程序:先是比较“输入现值”与“标值形参”(其实际值由计算模糊子集确定)的大小。如前者大,则SM0.0ON,否则M0OFF。如SM0.0ON则“输入现值”被“标志值形参”减;否者则“标值志形参”被“输入现值”减,其差存于VW72中。然后,把这个“差”乘10(积还存于VW72中)。再,此“差”被“上半范围”或“下半范围”除,其“商”仍存于VW72中。最后,用这个“商”去减10。其结果存于“入模糊集形参”中。这也就是所求的隶属度。只是,它不是处于0~1之间的数,而是0~10之间的数。因为,这里用的都是整数运算指令,故做了这么处理了。

对图4-55c程序:先是比较“输入现值”与“标值形参”(其实际值由计算模糊子集确

978-7-111-56641-0-Chapter05-88.jpg

图4-55 模糊化子程序

定)的大小。如前者大,则M0ON,否则M0OFF。如M0ON则“输入现值”被“标值形参”减;否者则“标值形参”被“输入现值”减,其差存于D72中。然后,把这个“差”乘10(积还存于D72中)。再,此“差”被“上半范围”或“下半范围”除,其“商”仍存于D72中。最后,用这个“商”去减10。其结果存于“入集形参”中。这也就是所求的隶属度。只是,它不是处于0~1之间的数,而是0~10之间的数。因为,这里用的都是整数运算指令,故做了这么处理了。

图4-56程序有5次调子程序。因为本例有5个模糊子集。

978-7-111-56641-0-Chapter05-89.jpg

图4-56 模糊化子程序调用

2.模糊推理程序

图4-57所示为模糊推理子程序(子程序11)及被它调用的下一层的子程序(子程序12)。它用于进行一个行(本例为5行)与一个列(必须与行相等,本例也为5列)的矩阵乘。程序所用的数据用符号表示,较好理解。

图4-58所示为模糊推理主程序。程序所用的数据用符号表示。在每次调用它之前,先对“模糊关系指针”及“模糊输出指针”赋值,即指明该模糊关系矩阵列的首地址及模糊输出地址。这种调子程序前赋值给指针,由子程序按指针指向去存储子程序运算结果,可作到一个子程序多用,是较简洁的编程方法。这里调了5次子程序,因为,这个矩阵有5列。

图4-57a子程序12为先乘运算,后累加。运算后,修改指针。子程序11先是模糊入指针赋值,指出输入矩阵的首地址;后为模糊出指针指向的地址清零,为累加做准备。以下为连续调5次子程序12,以完成一个行与一个列的矩阵乘。显然,执行这主程序及对应的子程序,将完成整个推理过程。之后,可得出模糊输出矩阵。从图4-58a子程序指针赋值知,此矩阵的各项的地址分别为:DM70、DM72、DM74、DM76及DM78。不过,这模糊输出子集的隶属度也是在0~10之间取值。这里设,模糊关系矩阵参数存于DM10~DM59。

978-7-111-56641-0-Chapter05-90.jpg

图4-57 模糊推理子程序

图4-57b子程序SBR-12为先乘运算,后累加。运算后,修改指针。子程序11先是模糊入指针赋值,指出输入矩阵的首地址;后为模糊出指针指向的地址清零,为累加做准备。以下为连续调5次子程序12,以完成一个行与一个列的矩阵乘。显然,执行这主程序及对应的子程序,将完成整个推理过程。之后,可得出模糊输出矩阵。从图4-58b子程序指针赋值知,此矩阵的各项的地址分别为:VW140、VW142、VW144、VW146及VW148。不过,这模糊输出子集的隶属度也是在0~10之间取值。这里设,模糊关系矩阵参数存于VW20~VW106。

978-7-111-56641-0-Chapter05-91.jpg(www.xing528.com)

图4-58 模糊推理子程序调用

图4-57c子程序P12为先乘运算,后累加。运算后,修改指针。子程序11先是使变址器V0赋值为0,后为D70V0指向的地址,即D(70+V0的内容),清零,为累加做准备。以下为连续调5次子程序12,以完成一个行与一个列的矩阵乘。显然,执行这主程序及对应的子程序,将完成整个推理过程。之后,可得出模糊输出矩阵。从图4-53c子程序指针赋值知,此矩阵的各项的地址分别为:D70、D72、D74、D76及D78。不过,这模糊输出子集的隶属度也是在0~10之间取值。这里设,模糊关系矩阵参数存于D10~D59。

3.解模糊程序

上已提及,解模糊程序的任务是,根据各输出模糊子集的隶属度,确定相应的控制输出。本例用的为积分输出。解模糊用的是最大隶属度法。图4-59和图4-60所示即为这个程序。该图指令操作数为符号地址。

对图4-59a:这里的ZLL对应的地址为DM70(是模糊输出指针的指向,见图4-58a,下同),ZL对应的地址为DM72,Z0对应的地址为DM74,ZR对应的地址为DM76,ZRR对应的地址为DM78。

对图4-59b:这里的ZLL对应的地址为VW140(是模糊输出指针的指向,见图4-58b,下同),ZL对应的地址为VW142,Z0对应的地址为VW144,ZR对应的地址为VW146,ZRR对应的地址为VW148。

对图4-59c:这里的ZLL对应的地址为D70(是模糊输出指针的指向,见图4-58c,下同),ZL对应的地址为D72,Z0对应的地址为D74,ZR对应的地址为D76,ZRR对应的地址为D78。

978-7-111-56641-0-Chapter05-92.jpg

图4-59 解模糊程序

图4-59程序用以查找最大隶属度的模糊子集。它用了多个比较指令,目的是把最大隶属度模糊子集的地址保存在相应地址中(图4-59a保存在DM98中、图4-59b保存在VW196中、图4-59c保存在D98中)。同时把这个模糊子集对应的输出值存于相应地址中(图4-59a保存在DM96中、图4-59b保存在VW192中、图4-59c保存在D96中)。为取得相应的控制输出准备数据。

图4-60程序是用以产生积分输出的。

978-7-111-56641-0-Chapter05-93.jpg

图4-60 解模糊程序续

对图4-60a:使控制输出增大还是将减小,取决于LR0.05是 ON,还是 OFF。而LR0.05的 ON, OFF则由模糊子集的隶属度大决定。在查找最大隶属度模糊子集的程序(图4-59)的第一操作就是使LR0.05 OFF,但如出现ZR或ZRR的隶属度最大(要使控制输出增大),则置LR0.05 ON。如未出现ZR或ZRR的隶属度最大(要使控制输出减小),则保持LR0.05 OFF。这正是系统所要求的控制。

对图4-60b:积分是使控制输出增大还是将减小,取决于M0.5是 ON,还是 OFF。而M0.5的 ON, OFF则由模糊子集的隶属度大决定。在查找最大隶属度模糊子集的程序(图4-59)的第一操作就是使LR0.05 OFF,但如出现ZR或ZRR的隶属度最大(要使控制输出增大),则置M0.5 ON。如未出现ZR或ZRR的隶属度最大(要使控制输出减小),则保持M0.5 OFF。这正是系统所要求的控制。

对图4-60c:使控制输出增大还是将减小,取决于M5是 ON,还是 OFF。而M5的 ON, OFF则由模糊子集的隶属度最大者决定。在查找最大隶属度模糊子集的程序(图4-59)的第一操作就是使M5 OFF,但如出现ZR或ZRR的隶属度最大(要使控制输出增大),则置M5 ON。如未出现ZR或ZRR的隶属度最大(要使控制输出减小),则保持M5 OFF。这正是系统所要求的控制。

此外,还有以下两点要考虑:

1)这个程序应是“微分执行”,其执行的时间间隔由TIM000、T101或T1控制。这个间隔可小些,但模糊子集对应的输出值也要小些。因为每次增减量小,可避免“静态不稳定”。

2)控制输出值要控制,最大不能大过允许的最大值;最小不能小于允许的最小值。这在图4-60的各组程序中已做了处理。

提示:上面介绍的几个程序基本上是分别编写的。如合成为一个统一的程序,则所使用的实际地址也应统一分配,应避免重复使用。特别要注意,欧姆龙三菱PLC的乘、除运算,存储的结果字的字长为参加运算字的字长的2倍。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈