📄 nefcrea.m
字号:
function nefcrea(num, gen, contr)
%NEFCREA Create new nefcon simulink blocks and Signal-Generators
% num = number of inputs
% gen = selected generator (1 Nefcon, 2 bounded)
% contr = selected controller (1 nefcon, 2 fuzzy)
%
% See also NEFGUI and NEFCON.
% Author: Andreas Nuernberger, TU Braunschweig, August 1996; a.nuernberger@tu-bs.de
% contact: Ludger Merz, DASA-Airbus GmbH, Hamburg; ludger.merz@airbus.de
% get actual name
sys = get_param;
if get_param([sys,'/','Signal'], 'position') == []
add_block('built-in/To Workspace',[sys,'/','Signal'])
set_param([sys,'/','Signal'],...
'BackGround',2,...
'mat-name','nef_u',...
'buffer','10000',...
'Mask Display','nef_u',...
'position',[300,30,360,10])
end
if get_param([sys,'/','Response'], 'position') == []
add_block('built-in/To Workspace',[sys,'/','Response'])
set_param([sys,'/','Response'],...
'BackGround',2,...
'mat-name','nef_y',...
'buffer','10000',...
'Mask Display','nef_y',...
'position',[300,80,360,60])
end
% Subsystem
subname = 'Fuzzi';
% find existing systems
nof = 0;
if get_param([sys,'/',subname], 'position') ~= []
nof = 1;
% disp('NEFCON: System already exists.');
% Generate a beep
% fprintf('\a')
else
while get_param([sys,'/',subname, num2str(nof)], 'position') ~= []
nof = nof + 1;
end
if nof > 0
subname = [subname, num2str(nof)];
end
% create new subsystem
y = 20;
new_system([sys,'/',subname])
add_block('built-in/Mux',[sys,'/',subname,'/Mux'])
set_param([sys,'/',subname,'/Mux'],...
'inputs',num2str(num),...
'position',[205,y+30,235,y+45*num+45])
for i=1:num,
add_block('built-in/Inport',[sys,'/',subname,'/in_',num2str(i)])
set_param([sys,'/',subname,'/in_',num2str(i)],...
'Port',num2str(i),...
'position',[35,y+i*45,55,y+20+i*45])
add_block('built-in/Gain',[sys,'/',subname, '/GainIn', num2str(i)])
set_param([sys,'/',subname, '/GainIn', num2str(i)],...
'Gain','1',...
'position',[80,y+i*45,100,y+20+i*45])
add_block('built-in/Saturation',[sys,'/',subname,'/Saturation',num2str(i)])
set_param([sys,'/',subname,'/Saturation',num2str(i)],...
'Lower Limit','-1',...
'Upper Limit','1',...
'position',[130,y+i*45,155,y+20+i*45])
autoline([sys,'/',subname],['in_',num2str(i), '/1'], ...
['GainIn', num2str(i), '/1']);
autoline([sys,'/',subname],['GainIn', num2str(i), '/1'], ...
['Saturation',num2str(i), '/1']);
autoline([sys,'/',subname],['Saturation',num2str(i), '/1'], ...
['Mux/',num2str(i)]);
end;
% add input if bounded signal generator is used
%if gen == 2
if 0
add_block('built-in/Inport',[sys,'/',subname,'/in_',num2str(num+1)])
set_param([sys,'/',subname,'/in_',num2str(num+1)],...
'Port',num2str(num+1),...
'position',[35,y+(num+1)*45,55,y+20+(num+1)*45])
if contr == 1
set_param([sys,'/',subname,'/Mux'],...
'inputs',num2str(num+1));
autoline([sys,'/',subname],['in_',num2str(num+1), '/1'], ...
['Mux/',num2str(num+1)]);
end
end
mid = (y+45 + y+45*num+20)/2;
if contr == 1 % nefcon system
add_block('built-in/S-Function',[sys,'/',[subname,'/Nefcon ',13,'Lern-System']])
set_param([sys,'/',[subname,'/Nefcon ',13,'Lern-System']],...
'function name','snefcon',...
'position',[280,mid-20,335,mid+20])
add_block('built-in/Demux',[sys,'/',subname,'/Demux'])
set_param([sys,'/',subname,'/Demux'],...
'outputs','3',...
'position',[350,mid-20,385,mid+20])
add_block('built-in/Gain',[sys,'/',subname, '/GainOut'])
set_param([sys,'/',subname, '/GainOut'],...
'Gain','1',...
'position',[410,mid-30,430,mid-50])
add_block('built-in/Outport',[sys,'/',subname,'/out_1'])
set_param([sys,'/',subname,'/out_1'],...
'position',[460,mid-30,480,mid-50])
add_block('built-in/Stop Simulation',[sys,'/',subname,'/Stop Simulation'])
set_param([sys,'/',subname,'/Stop Simulation'],...
'position',[440,mid+70,480,mid+50])
add_block('built-in/Scope',[sys,'/',subname,'/Error'])
set_param([sys,'/',subname,'/Error'],...
'BackGround',3,...
'Vgain','2.000000',...
'Hgain','5.000000',...
'Vmax','4.000000',...
'Hmax','10.000000',...
'position',[460,mid-10,480,mid+10])
add_block('built-in/Mux',[sys,'/',subname,'/Mux1'])
set_param([sys,'/',subname,'/Mux1'],...
'inputs','2',...
'position',[410,mid-10,440,mid+10])
autoline([sys,'/',subname],['Mux/1'], ...
['Nefcon ',13,'Lern-System/1']);
autoline([sys,'/',subname],['Nefcon ',13,'Lern-System/1'], ...
['Demux/1']);
autoline([sys,'/',subname],'Demux/1', 'GainOut/1');
autoline([sys,'/',subname],'GainOut/1', 'out_1/1');
autoline([sys,'/',subname],'Demux/2', 'Mux1/1');
autoline([sys,'/',subname],'Mux1/1', 'Error/1');
autoline([sys,'/',subname],'Demux/3', 'Stop Simulation/1');
else
add_block('built-in/Outport',[sys,'/',subname,'/out_1'])
set_param([sys,'/',subname,'/out_1'],...
'position',[400,mid-10,420,mid+10])
add_block('built-in/S-Function',[sys,'/',[subname,'/Fuzzy Logic',13,'Controller']])
set_param([sys,'/',[subname,'/Fuzzy Logic',13,'Controller']],...
'function name','sffis',...
'parameters','fismatrix',...
'Mask Display','plot(0, -0.3, 6, -0.3, 0, 1.2, 6, 1.2, [0 6], [0 0], [1 2 3],[0 1 0],[2 3 4],[0 1 0],[3 4 5],[0 1 0])')
set_param([sys,'/',[subname,'/Fuzzy Logic',13,'Controller']],...
'Mask Type','FIS',...
'Mask Dialogue','FIS|FIS Matrix:',...
'Mask Translate','fismatrix = @1;',...
'Mask Help','Fuzzy Inference System',...
'Mask Entries','fismat\/')
set_param([sys,'/',[subname,'/Fuzzy Logic',13,'Controller']],...
'position',[280,mid-20,335,mid+20])
autoline([sys,'/',subname],['Fuzzy Logic',13,'Controller/1'], ...
['out_1/1']);
autoline([sys,'/',subname],['Mux/1'], ...
['Fuzzy Logic',13,'Controller/1']);
end
% Finished composite block subname.
set_param([sys,'/',subname],...
'Mask Display','NEFCON\nFuzzy')
set_param([sys,'/',subname],...
'position',[160,10,220,100],...
'BackGround',2,...
'hide name',0,...
'name','Fuzzy_Controller by Nefcon')
contrName = subname;
%open_system([sys,'/',subname]);
drawnow
end
% -------------------------------------------------------------------
% Nefcon-SigGen
% -------------------------------------------------------------------
subname = 'Nefcon-SigGen';
if gen==1 & get_param([sys,'/',subname], 'position') == [] % look if generator exists already...
new_system([sys,'/',subname])
set_param([sys,'/',subname],'Location',[575,561,1118,865])
add_block('built-in/Signal Generator',[sys,'/',[subname, '/Signal Gen.',13,'f_rad=2*pi*f_Hz']])
set_param([sys,'/',[subname, '/Signal Gen.',13,'f_rad=2*pi*f_Hz']],...
'Peak','1.000000',...
'Peak Range','5.000000',...
'Freq','0.050000',...
'Freq Range','0.500000',...
'Wave','Sqr',...
'Units','Rads')
set_param([sys,'/',[subname, '/Signal Gen.',13,'f_rad=2*pi*f_Hz']],...
'position',[70,59,110,81])
add_block('built-in/Constant',[sys,'/',subname, '/Constant'])
set_param([sys,'/',subname, '/Constant'],...
'position',[155,125,175,145])
add_block('built-in/Gain',[sys,'/',subname, '/Gain1'])
set_param([sys,'/',subname, '/Gain1'],...
'position',[355,119,410,151])
add_block('built-in/Sum',[sys,'/',subname, '/Sum'])
set_param([sys,'/',subname, '/Sum'],...
'inputs','+++',...
'position',[290,38,320,232])
add_block('built-in/Outport',[sys,'/',subname, '/out_1'])
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -