function mttCreateSystemMdl(model)
model_name = mttDetachText(model.source,'/') ;
icd = mttCreateSystemMdl_ICD(model) ;
NumInputs = length(icd.input_namelist) ;
NumOutputs = length(icd.output_namelist) ;
MaxInterfaces = max(NumInputs,NumOutputs) ;
new_system(model_name) ;
open_system(model_name) ;
set_param(model_name,'Location',[50 100 850 250+20*MaxInterfaces]) ;
left = 100 ;
top = 25 ;
width = 600 ;
height = 25*(5+MaxInterfaces) ;
position_vector = [left,top,left+width,top+height] ;
ModelHndl = add_block(...
'simulink3/Subsystems/Subsystem',...
[model_name,'/Model'],...
'Position',position_vector,...
'BackgroundColor','yellow',...
'FontName','Helvetica',...
'FontSize',num2str(16)) ;
system = [model_name,'/Model'] ;
set_param(system,'Location',[200 250 1050 285+30*MaxInterfaces]) ;
Line = get_param(system,'Lines') ;
for i = 1:length(Line)
SrcBlock = get_param(Line(i).SrcBlock,'Name') ;
DstBlock = get_param(Line(i).DstBlock,'Name') ;
SrcPort = num2str(Line(i).SrcPort) ;
DstPort = num2str(Line(i).DstPort) ;
delete_line(system,[SrcBlock,'/',SrcPort],[DstBlock,'/',DstPort]) ;
end
Block = get_param(system,'Blocks') ;
for i = 1:length(Block)
delete_block([system,'/',Block{i}]) ;
end
left = 125 ;
centre_left = 250 ;
centre = 350 ;
centre_right = 580 ;
right = 670 ;
top = 20 ;
down = 30 ;
port_width = 40 ;
port_height = 15 ;
port_spacing = down ;
mux_width = 5 ;
mux_height = NumInputs*port_spacing ;
demux_width = 5 ;
demux_height = NumOutputs*port_spacing ;
sfun_width = 150 ;
sfun_height = 30 ;
left_vertical_offset = (NumInputs*port_spacing - sfun_height)/2 ;
right_vertical_offset = (NumOutputs*port_spacing - sfun_height)/2 ;
vertical_offset = max(left_vertical_offset,right_vertical_offset) ;
datum = top + vertical_offset ;
top = datum - left_vertical_offset ;
for i = 1:NumInputs
position_vector = [...
left,...
top + (i-1)*port_spacing,...
left + port_width,...
top + (i-1)*port_spacing + port_height] ;
InHndl(i) = add_block(...
'simulink3/Sources/In1',...
[system,'/',icd.input_namelist{i}],...
'Position',position_vector) ;
end
position_vector = [...
centre_left,...
top-port_height/3,...
centre_left+mux_width,...
top+mux_height-port_height/3] ;
MuxHndl = add_block(...
'simulink3/Signals & Systems/Mux',...
[system,'/InputMapping'],...
'Position',position_vector,...
'Inputs',num2str(NumInputs)) ;
position_vector = [...
centre,...
top+left_vertical_offset-sfun_height/2,...
centre+sfun_width,...
top+left_vertical_offset+sfun_height] ;
SfunHndl = add_block(...
'simulink3/Functions & Tables/S-Function',...
[system,'/sfun'],...
'Position',position_vector,...
'FunctionName',[model_name,'_sfun'],...
'BackgroundColor','yellow',...
'FontName','Helvetica',...
'FontSize',num2str(16)) ;
top = datum - right_vertical_offset ;
position_vector = [...
centre_right,...
top-port_height/3,...
centre_right+demux_width,...
top+demux_height-port_height/3] ;
DemuxHndl = add_block(...
'simulink3/Signals & Systems/Demux',...
[system,'/OutputMapping'],...
'Position',position_vector,...
'Outputs',num2str(NumOutputs)) ;
for i = 1:NumOutputs
position_vector = [...
right,...
top + (i-1)*port_spacing,...
right + port_width,...
top + (i-1)*port_spacing + port_height] ;
OutHndl(i) = add_block(...
'simulink3/Sinks/Out1',...
[system,'/',icd.output_namelist{i}],...
'Position',position_vector) ;
end
for i = 1:NumInputs
port = num2str(i) ;
InLineHndl(i) = add_line(system,...
[icd.input_namelist{i},'/1'],['InputMapping/',port]) ;
end
SfunInLineHndl = add_line(system,'InputMapping/1','sfun/1') ;
set_param(SfunInLineHndl,'Name','_Input') ;
SfunOutLineHndl = add_line(system,'sfun/1','OutputMapping/1') ;
set_param(SfunOutLineHndl,'Name','_Output') ;
for i = 1:NumOutputs
port = num2str(i) ;
OutLineHndl(i) = add_line(system,...
['OutputMapping/',port],[icd.output_namelist{i},'/1']) ;
end