模糊控制功能在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'); %将a以w1命名写到磁盘
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] ... 下一页 >>