收藏 分销(赏)

《网络控制系统分析与设计》仿真程序.doc

上传人:仙人****88 文档编号:8954782 上传时间:2025-03-09 格式:DOC 页数:10 大小:74.50KB
下载 相关 举报
《网络控制系统分析与设计》仿真程序.doc_第1页
第1页 / 共10页
《网络控制系统分析与设计》仿真程序.doc_第2页
第2页 / 共10页
点击查看更多>>
资源描述
《网络控制系统分析与设计》 附录 仿真程序 A:仿真实例1程序源代码 1传感器节点初始化函数 function sensor_init %初始化内核模块 ttInitKernel(1,0,'prioFP')%1个输入,0个输出,固定优先级 %创建传感器任务 data.y=0; offset=0; period=.010; prio=1; ttCreatePeriodicTask('sens_task',offset,period,prio,'senscode',data);%由senscode函数实现 %初始化网络 ttCreateInterruptHandler('nw_handler',prio,'msgRcvSensor'); ttInitNetwork(3,'nw_handler'); %在网络中的节点号为3 2传感器节点任务代码 function [exectime,data]=senscode(seg,data) switch seg, case 1, data.y=ttAnalogIn(1); exectime=0; case 2, ttSendMsg(4,data.y,10); exectime=.001;%若exectime=0,无时延 case 3, exectime=-1; %结束 end 3 PID控制器节点初始化 function controller_init %初始化内核模块 ttInitKernel(1,0,'prioFP'); %1个输入,0个输出,固定优先级 h=0.010;%采样时间 Kp=1000%比例增益 Ki=1;%积分增益 Kd=42;%微分增益 %PID控制部分 data.u=0.0; data.Kp=Kp; data.Ki=Ki; data.Kd=Kd; data.Dold=0.0; data.yold=0.0; data.Eold=0.0; %创建控制器任务 deadline=h; prio=2; ttCreateTask('pid_task',deadline,prio,'ctrlcode',data);%由ctrlcode函数实现PID控制 %初始化网络 ttCreateInterruptHandler('nw_handler',prio,'msgRcvCtrl'); ttInitNetwork(4,'nw_handler');%网络节点号为4 4 PID控制器节点任务代码 function [exectime,data]=ctrlcode(seg,data) switch seg, case 1, %PID控制算法 y=ttGetMsg; r=ttAnalogIn(1); h=0.01;%采样周期 P=data.Kp*(r-y); I=data.Dold+(r-y)*h; D=(r-y-data.Eold)/h; data.u=P+data.Ki*I+data.Kd*D; data.Dold=I; data.yold=y; data.Eold=r-y; exectime=0.001; %若exectime=0,无时延 case 2, ttSendMsg(2,data.u,10); exectime=-1; end 5 执行器节点初始化 function actuator_init %初始化内核模块 ttInitKernel(0,1,'prioFP'); %1个输入,0个输出,固定优先级 %创建执行器任务 deadline=100; prio=1; ttCreateTask('act_task',deadline,prio,'actcode'); %初始化网络 ttCreateInterruptHandler('nw_handler',prio,'msgRcvActuator'); ttInitNetwork(2,'nw_handler');%网络节点号为2 6 执行器节点任务代码 function [exectime,data]=actcode(seg,data) switch seg, case 1, data.u=ttGetMsg;%获取数据 exectime=.001%若 exectime=0,则无时延 case 2, ttAnalogOut(1,data.u);%将数据发送出去 exectime=-1; end 7 干扰节点初始化 function interference_init %初始化内核模块 ttInitKernel(0,0,'prioFP') %1个输入,0个输出,固定优先级 %创建周期性任务 offset=0; period=.001; prio=1; ttCreatePeriodicTask('interf_task',offset,period,prio,'interfcode'); %初始化网络 ttCreateInterruptHandler('nw_handler',prio,'msgRcvInterf'); ttInitNetwork(1,'nw_handler');%节点号为1 8干扰节点任务代码 function [exectime,data]=interfcode(seg,data) BWshare=0.0; if(rand(1)<BWshare) ttSendMsg(1,1,10); end exectime=-1; B:仿真实例2程序源代码 1传感器节点初始化函数 function sensor_init %初始化内核模块 ttInitKernel(1,0,'prioFP')%1个输入,0个输出,固定优先级 %创建传感器任务 data.y=0; offset=0; period=.010; prio=1; ttCreatePeriodicTask('sens_task',offset,period,prio,'senscode',data);%由senscode函数实现 %初始化网络 ttCreateInterruptHandler('nw_handler',prio,'msgRcvSensor'); ttInitNetwork(3,'nw_handler'); %在网络中的节点号为3 2传感器节点任务代码 function [exectime,data]=senscode(seg,data) switch seg, case 1, data.y=ttAnalogIn(1); exectime=0; case 2, ttSendMsg(4,data.y,10); exectime=.001;%若exectime=0,无时延 case 3, exectime=-1; %结束 end 3 执行器节点初始化 function actuator_init %初始化内核模块 ttInitKernel(0,1,'prioFP'); %1个输入,0个输出,固定优先级 %创建执行器任务 deadline=100; prio=1; ttCreateTask('act_task',deadline,prio,'actcode'); %初始化网络 ttCreateInterruptHandler('nw_handler',prio,'msgRcvActuator'); ttInitNetwork(2,'nw_handler');%网络节点号为2 4 执行器节点任务代码 function [exectime,data]=actcode(seg,data) switch seg, case 1, data.u=ttGetMsg;%获取数据 exectime=.001%若 exectime=0,则无时延 case 2, ttAnalogOut(1,data.u);%将数据发送出去 exectime=-1; end 5 干扰节点初始化 function interference_init %初始化内核模块 ttInitKernel(0,0,'prioFP') %1个输入,0个输出,固定优先级 %创建周期性任务 offset=0; period=.001; prio=1; ttCreatePeriodicTask('interf_task',offset,period,prio,'interfcode'); %初始化网络 ttCreateInterruptHandler('nw_handler',prio,'msgRcvInterf'); ttInitNetwork(1,'nw_handler');%节点号为1 6干扰节点任务代码 function [exectime,data]=interfcode(seg,data) BWshare=0.0; if(rand(1)<BWshare) ttSendMsg(1,1,10); end exectime=-1; 7模糊PID控制器节点初始化 function controller_init ttInitKernel(1,0,'prioFP'); h=0.010;%采样时间 Kp=150; %.比例增益 Ki=87;  %积分增益 Kd=17;  %微分增益 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% a=newfis('fuzzpid'); k_p=10;%%%%%%%%%%%%%%%%%%%%%%%%论域的比例系数 k_i=10;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% k_d=1;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% a=addvar(a,'input','e',[-3,3]); %误差e,为模糊控制器的输入 a=addmf(a,'input',1,'NB','zmf',[-3,-1]); a=addmf(a,'input',1,'NM','trimf',[-3,-2,0]); a=addmf(a,'input',1,'NS','trimf',[-3,-1,1]); a=addmf(a,'input',1,'Z','trimf',[-2,0,2]); a=addmf(a,'input',1,'PS','trimf',[-1,1,3]); a=addmf(a,'input',1,'PM','trimf',[0,2,3]); a=addmf(a,'input',1,'PB','smf',[1,3]); a=addvar(a,'input','ec',[-3,3]); %误差加速度ec,为模糊控制器的输入 a=addmf(a,'input',2,'NB','zmf',[-3,-1]); a=addmf(a,'input',2,'NM','trimf',[-3,-2,0]); a=addmf(a,'input',2,'NS','trimf',[-3,-1,1]); a=addmf(a,'input',2,'Z','trimf',[-2,0,2]); a=addmf(a,'input',2,'PS','trimf',[-1,1,3]); a=addmf(a,'input',2,'PM','trimf',[0,2,3]); a=addmf(a,'input',2,'PB','smf',[1,3]); a=addvar(a,'output','kp',k_p*[-3,3]); %kp比例增益,为模糊控制器的输出 a=addmf(a,'output',1,'NB','zmf',k_p*[-3,-1]); a=addmf(a,'output',1,'NM','trimf',k_p*[-3,-2,-1]); a=addmf(a,'output',1,'NS','trimf',k_p*[-2,-1,0]); a=addmf(a,'output',1,'Z','trimf',k_p*[-1,0,1]); a=addmf(a,'output',1,'PS','trimf',k_p*[0,1,2]); a=addmf(a,'output',1,'PM','trimf',k_p*[1,2,3]); a=addmf(a,'output',1,'PB','smf',k_p*[1,3]); a=addvar(a,'output','ki',k_i*[-3,3]); % ki积分增益,为模糊控制器的输出 a=addmf(a,'output',2,'NB','zmf',k_i*[-3,-1]); a=addmf(a,'output',2,'NM','trimf',k_i*[-3,-2,-1]); a=addmf(a,'output',2,'NS','trimf',k_i*[-2,-1,0]); a=addmf(a,'output',2,'Z','trimf',k_i*[-1,0,1]); a=addmf(a,'output',2,'PS','trimf',k_i*[0,1,2]); a=addmf(a,'output',2,'PM','trimf',k_i*[1,2,3]); a=addmf(a,'output',2,'PB','smf',k_i*[1,3]); a=addvar(a,'output','kd',k_d*[-3,3]); % kd微分增益,为模糊控制器的输出 a=addmf(a,'output',3,'NB','zmf',k_d*[-3,-1]); a=addmf(a,'output',3,'NM','trimf',k_d*[-3,-2,-1]); a=addmf(a,'output',3,'NS','trimf',k_d*[-2,-1,0]); a=addmf(a,'output',3,'Z','trimf',k_d*[-1,0,1]); a=addmf(a,'output',3,'PS','trimf',k_d*[0,1,2]); a=addmf(a,'output',3,'PM','trimf',k_d*[1,2,3]); a=addmf(a,'output',3,'PB','smf',k_d*[1,3]); rulelist=[ 1 1 1 7 3 1 1 %模糊规则表,共49条规则 1 2 1 7 5 1 1; 1 3 2 6 7 1 1; 1 4 2 6 7 1 1; 1 5 3 5 7 1 1; 1 6 4 4 6 1 1; 1 7 4 4 3 1 1; 2 1 1 7 3 1 1; 2 2 1 7 5 1 1; 2 3 2 6 7 1 1; 2 4 3 5 6 1 1; 2 5 3 5 6 1 1; 2 6 4 4 5 1 1; 2 7 5 4 4 1 1; 3 1 2 7 4 1 1; 3 2 2 6 5 1 1; 3 3 2 5 6 1 1; 3 4 3 5 6 1 1; 3 5 4 4 5 1 1; 3 6 5 3 5 1 1; 3 7 5 3 4 1 1; 4 1 2 6 4 1 1; 4 2 2 6 5 1 1; 4 3 3 5 5 1 1; 4 4 4 4 5 1 1; 4 5 5 3 5 1 1; 4 6 6 2 5 1 1; 4 7 6 2 4 1 1; 5 1 3 6 4 1 1; 5 2 3 5 4 1 1; 5 3 4 4 4 1 1; 5 4 5 3 4 1 1; 5 5 5 3 4 1 1; 5 6 6 2 4 1 1; 5 7 6 1 4 1 1; 6 1 3 4 1 1 1; 6 2 4 4 3 1 1; 6 3 5 3 3 1 1; 6 4 6 3 3 1 1; 6 5 6 2 3 1 1; 6 6 6 1 3 1 1; 6 7 7 1 1 1 1; 7 1 4 4 1 1 1; 7 2 4 4 2 1 1; 7 3 6 3 2 1 1; 7 4 6 2 2 1 1; 7 5 6 2 3 1 1; 7 6 7 1 3 1 1; 7 7 7 1 1 1 1]; a=addrule(a,rulelist); a=setfis(a,'DefuzzMethod','centroid'); %%解模糊方法采用重心法 writefis(a,'fuzzpid'); %%%%%%%%%%%%%%%%%%% data.u=0.0; data.Kp=Kp; data.Ki=Ki; data.Kd=Kd; data.Dold=0.0; data.yold=0.0; data.Eold=0.0; deadline=h; prio=2; ttCreateTask('pid_task',deadline,prio,'ctrlcode',data); ttCreateInterruptHandler('nw_handler',prio,'msgRcvCtrl'); ttInitNetwork(4,'nw_handler'); 8 模糊PID控制器节点任务代码 function [exectime,data]=ctrlcode(seg,data) switch seg, case 1, y=ttGetMsg; r=ttAnalogIn(1); h=0.01;%采样时间 %%%%%%%%%%%%%%%%%%%%% Kp=150; Ki=87; Kd=17; %%%%%%%%%%%%%%%%%%%%%%%%%% a=readfis('fuzzpid'); %%%%%%%%%%%%%%%%%%%%%%%%%% error=r-y; D=(error-data.Eold)/h; k_pid=evalfis([error,D],a); data.Kp=Kp+k_pid(1); data.Ki=Ki+k_pid(2); data.Kd=Kd+k_pid(3); %%%%%%%%%%%%%%%%%%%%%%%%%%% P=data.Kp*error; I=data.Dold+error*h; D=(error-data.Eold)/h; data.u=P+data.Ki*I+data.Kd*D; data.Dold=I; data.yold=y; data.Eold=error; exectime=0.001; case 2, ttSendMsg(2,data.u,10); exectime=-1; end
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服