模糊控制功能在InTouch平台DDE技术在组态软件中扩展先进控制功能的方法 第20页

先进控制在组态软件中的扩展与应用源程序代码

%Fuzzy Controller

clear all;close all;

a=newfis('w1');                                    %定义模糊控制器

                                    

f1=1.0;

a=addvar(a,'input','e',[-6*f1,6*f1]);                     % 输入变量e定义

a=addmf(a,'input',1,'NB','trapmf',[-8*f1,-6*f1,-5*f1,-1*f1]);

a=addmf(a,'input',1,'NS','trapmf',[-5*f1,-3*f1,-2*f1,0]);

a=addmf(a,'input',1,'ZR','trimf',[-2*f1,0,2*f1]);

a=addmf(a,'input',1,'PS','trapmf',[0,2*f1,3*f1,5*f1]);

a=addmf(a,'input',1,'PB','trapmf',[3*f1,5*f1,6*f1,8*f1]);

 

f2=1.0;

a=addvar(a,'input','ec',[-6*f2,6*f2]);                     % 输入变量ec定义

a=addmf(a,'input',2,'NB','trapmf',[-8*f2,-6*f2,-5*f2,-1*f2]);

a=addmf(a,'input',2,'NS','trapmf',[-5*f2,-3*f2,-2*f2,0]);

a=addmf(a,'input',2,'ZR','trimf',[-2*f2,0,2*f2]);

a=addmf(a,'input',2,'PS','trapmf',[0,2*f2,3*f2,5*f2]);

a=addmf(a,'input',2,'PB','trapmf',[3*f2,5*f2,6*f2,8*f2]);

 

f3=1.0;

a=addvar(a,'output','u',[-6*f3,6*f3]);                     % 输出变量u定义

a=addmf(a,'output',1,'NB','trapmf',[-8*f3,-6*f3,-5*f3,-1*f3]);

a=addmf(a,'output',1,'NS','trapmf',[-5*f3,-3*f3,-2*f3,0]);

a=addmf(a,'output',1,'ZR','trimf',[-2*f3,0,2*f3]);

a=addmf(a,'output',1,'PS','trapmf',[0,2*f3,3*f3,5*f3]);

a=addmf(a,'output',1,'PB','trapmf',[3*f3,5*f3,6*f3,8*f3]);

 

 

rulelist=[1 1 1 1 1;                                  % 模糊控制规则定义

          1 2 2 1 1;

          1 3 2 1 1;

          1 4 3 1 1;

          1 5 4 1 1;

 

          2 1 1 1 1;

          2 2 2 1 1;

          2 3 3 1 1;

          2 4 3 1 1;

          2 5 4 1 1;

         

          3 1 2 1 1;

          3 2 2 1 1;

          3 3 3 1 1;

          3 4 4 1 1;

          3 5 4 1 1;

         

          4 1 2 1 1;

          4 2 3 1 1;

          4 3 3 1 1;

          4 4 4 1 1;

          4 5 5 1 1;

      

          5 1 2 1 1;

          5 2 3 1 1;

          5 3 4 1 1;

          5 4 4 1 1;

          5 5 5 1 1;];

         

a=addrule(a,rulelist);                   %将模糊控制规则加到a

a1=setfis(a,'DefuzzMethod','centroid');     %解模糊的方法设置为centroid

writefis(a1,'w1');                      %aw1命名写到磁盘

                                        

a2=readfis('w1');                      %从磁盘中读出并保存在工作空间中

 

ts=0.01;                             %设置采样时间  

sys=tf(9,[10,11,1]);                    %被控对象传递函数

dsys=c2d(sys,ts,'z');                      %将被控对象的传递函数离散化为差分方程

需要完整内容的请联系QQ3249114,本文免费,转发请注明源于www.751com.cn

                 %初始化实际输出

 

error_1=0;                           %初始化误差,误差变化率

e_1=0.0;

ec_1=0.0;

ei=0;

%----------------------------------------

%  Start of Control

%----------------------------------------

for k=1:1:300                          %循环开始

time(k)=k*ts;

 

chann=ddeinit('view','tagname');          %连接通道号

r1=ddereq(chann,'TAG_JY');             %INTOUCH中获取输入阶跃信号

rin(k)=r1;                            %设置输入值

 

yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;    %计算输出

error(k)=rin(k)-yout(k);                                   %计算偏差

ei=ei+error(k)*ts;

 << 上一页  [11] [12] [13] [14] [15] [16] [17] [18] [19] [20]  ... 下一页  >> 

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有