紧急求助,帮我看下这个pid控制器的s函数 谢谢
%基于hebb学习法则的单神经网络PID解耦控制器%算法调整 kp,ki,kd
function =s1(t,x,u,flag)%%??????????????????flag值如何给定的,为什么这样给?
switch flag,
case 0 % 初始化
= mdlInitializeSizes;
case 2 % 离散状态更新
sys = mdlUpdates(x,u);
case 3 % computation of control signal计算的控制信号
sys=mdlOutputs(t,x,u);
case {1, 4, 9} % unused flag values未使用的flag值
sys = [];
otherwise % error handling错误处理
error(['Unhandled flag = ',num2str(flag)]);
end;
%==============================================================
% when flag=0, 执行系统初始化
%==============================================================
function = mdlInitializeSizes
sizes = simsizes; %生成size数据结构
sizes.NumContStates = 0; % 连续状态数
sizes.NumDiscStates = 3; % 离散状态数 p i d
sizes.NumOutputs = 1; % 输出量个数
sizes.NumInputs = 3; % 输入量个数
sizes.DirFeedthrough = 1;% input reflected directly in output
sizes.NumSampleTimes = 1;% single sampling period单采样周期
sys = simsizes(sizes); %
x0 = ; % zero initial states
str = [];
ts = [-1 0]; % sampling period
%==============================================================
% when flag=2, 更新离散状态
%==============================================================
function sys = mdlUpdates(x,u)
T=1;?????????????这个T是啥啊?
sys=[ u(1);
x(2)+u(1)*T;
(u(1)-u(2))/T];%??????????????????
%==============================================================
% when flag=3, computates the output signals计算输出信号
%==============================================================
function sys = mdlOutputs(t,x,u)
persistent wkp1_1 wki1_1 wkd1_1 u1_1
xiteP=6800;%学习速率
xiteI=65;%学习速率
xiteD=1000;%学习速率
if t==0%初始化 kp,ki and kd
wkp1_1=rand;
wki1_1=rand;
wkd1_1=rand;
u1_1=0;
end
%采用hebb学习算法NNC的权值调整
wkp1=wkp1_1+xiteP*x(1)*u1_1*x(1);%P
wki1=wki1_1+xiteI*x(1)*u1_1*x(2);%I
wkd1=wkd1_1+xiteD*x(1)*u1_1*x(3);%D
wadd1=abs(wkp1)+abs(wki1)+abs(wkd1);
w111=wkp1/wadd1;
w122=wki1/wadd1;
w133=wkd1/wadd1;
w1=;
k1=1.1;
u1=k1*w1*x;
wkp1_1=wkp1;
wkd1_1=wkd1;
wki1_1=wki1;
u1_1=u1;
sys=u1;
页:
[1]