📄 fm_sim.m
字号:
end case 'Goto' Tag = get_param(dstblock,'GotoTag'); fromblock = find_system(blocks, ... 'BlockType','From', ... 'GotoTag',Tag); handle = get_param(fromblock(1),'PortHandles'); lineout = find_system(lines,'SrcPortHandle',handle.Outport); dstblock = get_param(lineout,'DstBlockHandle'); case 'Breaker' if strcmp(masks{i},'Line'), handle = get_param(dstblock,'PortHandles'); lineout = find_system(lines,'SrcPortHandle',handle.Outport); dstblock = get_param(lineout,'DstBlockHandle'); else, fm_disp([msg,' cannot be connected to a Breaker block.'],2) break end case 'Line' if strcmp(masks{i},'Breaker'), busno = get_param(dstblock,'UserData'); rowno = get_param(blocks(i),'UserData'); eval([masks{i},'(',rowno,',1) = ',busno,';']); break, else fm_disp([msg,' cannot be connected to a Line block.'],2) break end case 'Link' handle = get_param(dstblock,'PortHandles'); lineout = find_system(lines,'SrcPortHandle',handle.Outport); dstblock = get_param(lineout,'DstBlockHandle'); otherwise fm_disp([msg, ' cannot be connected to a ',mask_db,' block.'],2) break end end end end % find source block if ~isempty(line_in) & ~strcmp(masks{i},'Syn') ... & ~strcmp(masks{i},'Mass') & ~strcmp(masks{i},'Supply') for j = 1:length(line_in) linein = line_in(j); srcblock = get_param(linein,'SrcBlockHandle'); while 1 %srcblock = get_param(linein,'SrcBlockHandle'); if srcblock == -1, fm_disp([msg,' has an undefined connection.'],2), break, end mask_sb = get_param(srcblock,'MaskType'); if isempty(mask_sb), mask_sb = get_param(srcblock,'BlockType'); end if iscell(mask_sb), mask_sb = mask_sb{1}; end switch mask_sb case 'Bus' busno = get_param(srcblock,'UserData'); rowno = get_param(blocks(i),'UserData'); switch masks{i} case 'Breaker', d = '2'; case 'Ltc', Porta = get_param(linein,'DstPortHandle'); Blocco = get_param(blocks(i),'PortHandles'); if find(Blocco.Inport==Porta), d = '1'; end if ~isempty(Blocco.Enable) if find(Blocco.Enable==Porta), d = '15'; end end if isfield(Blocco,'LConn') if find(Blocco.LConn==Porta), d = '1'; end end case {'SAE1','SAE2','SAE3'}, Porta = get_param(linein,'DstPortHandle'); Blocco = get_param(blocks(i),'PortHandles'); Numero_Porta = find(Blocco.Inport==Porta); if isempty(Numero_Porta) Numero_Porta = find(Blocco.LConn==Porta); end if Numero_Porta == 1, d = '2'; else, d = '1'; end otherwise, d = '1'; end eval([masks{i},'(',rowno,',',d,') = ',busno,';']); break case 'Inport' porta = str2num(get_param(srcblock,'Port')); subsys = get_param(srcblock,'Parent'); handle = get_param(subsys,'PortHandles'); linein = find_system(lines,'DstPortHandle',handle.Inport(porta)); srcblock = get_param(linein,'SrcBlockHandle'); case 'PMIOPort' port_type = get_param(srcblock,'Side'); port_numb = str2num(get_param(srcblock,'Port')); subsys = get_param(srcblock,'Parent'); pmcport = find_system(blocks, ... 'SearchDepth',0, ... 'Parent',getfullname(subsys), ... 'BlockType','PMIOPort'); handle = get_param(subsys,'PortHandles'); if strcmp(port_type,'Left') inport = find_system(pmcport,'Side','Left'); port_numb = find(inport == srcblock); linein = find_system(lines,'DstPortHandle',handle.LConn(port_numb)); else outport = find_system(pmcport,'Side','Right'); port_numb = find(outport == srcblock); linein = find_system(lines,'DstPortHandle',handle.RConn(port_numb)); end srcblock = get_param(linein,'SrcBlockHandle'); case 'SubSystem' porta = get_param(linein,'SrcPortHandle'); handle = get_param(srcblock,'PortHandles'); portno = find(handle.Outport == porta); if isempty(portno) portno = find(handle.RConn == porta); if isempty(portno) portno = find(handle.RConn == get_param(linein,'DstPortHandle')); end pmcport = find_system(blocks, ... 'SearchDepth',0, ... 'Parent',getfullname(srcblock), ... 'BlockType','PMIOPort'); outport = find_system(pmcport,'Side','Right'); handle = get_param(outport(portno),'PortConnectivity'); linein = find_system(lines,'DstPortHandle',handle.DstPort); srcblock = handle.DstBlock; else outport = find_system(blocks, ... 'SearchDepth',0, ... 'Parent',getfullname(srcblock), ... 'BlockType','Outport', ... 'Port',int2str(portno)); handle = get_param(outport,'PortHandles'); linein = find_system(lines,'DstPortHandle',handle.Inport); srcblock = get_param(linein,'SrcBlockHandle'); end case 'From' Tag = get_param(srcblock,'GotoTag'); gotoblock = find_system(blocks,'BlockType','Goto','GotoTag',Tag); handle = get_param(gotoblock(1),'PortHandles'); linein = find_system(lines,'DstPortHandle',handle.Inport); srcblock = get_param(linein,'SrcBlockHandle'); case 'Breaker' if strcmp(masks{i},'Line'), handle = get_param(srcblock,'PortHandles'); linein = find_system(lines,'DstPortHandle',handle.Inport); srcblock = get_param(linein,'SrcBlockHandle'); else, fm_disp([msg,' cannot be connected to a Breaker block.'],2) break end case 'Wind' if strcmp(masks{i},'Cswt') | strcmp(masks{i},'Dfig') ... | strcmp(masks{i},'Ddsg'), busno = get_param(srcblock,'UserData'); rowno = get_param(blocks(i),'UserData'); eval([masks{i},'(',rowno,',2) = ',busno,';']); break else fm_disp([msg,' cannot be connected to a Wind block.'],2) break end case 'Line' if strcmp(masks{i},'Breaker'), busno = get_param(srcblock,'UserData'); rowno = get_param(blocks(i),'UserData'); eval([masks{i},'(',rowno,',1) = ',busno,';']); break else fm_disp([msg,' cannot be connected to a Line block.'],2) break end case 'Link' handle = get_param(srcblock,'PortHandles'); linein = find_system(lines,'DstPortHandle',handle.Inport(1)); srcblock = get_param(linein,'SrcBlockHandle'); otherwise fm_disp([msg,' cannot be connected to a ',mask_sb,' block.'],2) break end end end end end end fm_bar([(nblock+i-1)*tipi3,(nblock+i)*tipi3])end% adjusting "Line" data dimensionsif ~isempty(Line) & length(Line(1,:)) == 5 Line = [Line, zeros(length(Line(:,1)),4)];elseif ~isempty(Line) & length(Line(1,:)) == 6 Line = [Line, zeros(length(Line(:,1)),3)];endfm_disp(' * * *')% writing data fileidx1 = strmatch('Definition of component data ...',History.text);idx2 = strmatch('Definition of system connections ...',History.text);idx3 = strmatch('Error:',History.text);if isempty(idx3), idx3 = 0; endif idx3(end) > idx1(end) if idx3(end) > idx2(end), message = 'Simulink model is not well-formed (check links).'; end if find(idx3 < idx2(end) & idx3 > idx1(end)), message = ['Component data are not well-formed (check ' ... 'masks).']; endelse File.data = strrep(File.data,'(mdl)','_mdl'); [fid, message] = fopen([Path.data,File.data,'.m'], 'wt');endif ~isempty(message), if strcmp(message, ... ['Sorry. No help in figuring out the problem ...']), fm_disp(['Most likely the folder "',Path.data, ... '" is read only. Try to change the permission.']) else fm_disp(['Failed conversion from Simulink model: ',message],2) end if Fig.main set(Fig.main,'Pointer','arrow'); delete(Hdl.bar); Hdl.bar = 0; set(Hdl.frame,'Visible','on'); set(Hdl.text,'Visible','on'); end check_model = 0; returnelse fm_disp('Writing Data File',1)endfm_bar([(2*nblock)*tipi3,(2*nblock+1)*tipi3])for j = 1:length(type_con) typecon = type_con{j,1}; if eval(['~isempty(',typecon,')']) count = fprintf(fid, [typecon, '.con = [ ... \n']); eval(['quanti = length(',typecon,'(:,1));']); for i = 1:quanti-1 eval(['quali = ',typecon,'(i,:);']); qualis = strrep(num2str(quali),' ',' '); count = fprintf(fid, [qualis, '; \n']); end k = quanti; eval(['quali = ',typecon,'(k,:);']); qualis = strrep(num2str(quali),' ',' '); count = fprintf(fid, [qualis, ' ];\n\n']); end fm_bar([(2*nblock+j-1)*tipi3,(2*nblock+j)*tipi3])endcount = fprintf(fid, 'Varname.bus = {... \n');for i = 1:Bus_n-1 %for j = 1:length(busname{i,1}) % double(busname{i,1}(j)) %end namebus = strrep(busname{i,1},char(10),' '); count = fprintf(fid, ['''',namebus,'''; ']); if rem(i,5) == 0; count = fprintf(fid,'\n'); endendif iscell(busname) namebus = strrep(busname{length(busname),1},char(10),' '); count = fprintf(fid, ['''',namebus,'''};\n']);else namebus = strrep(busname,char(10),' '); count = fprintf(fid, ['''',namebus,'''};\n']);end% closing data filecount = fclose(fid);exist(File.data);% closing Simulink modelif ~donotclose if fixmodel save_system(cur_sys); end close_system(cur_sys);endfm_disp(['Construction of Data File "', ... [Path.data,File.data,'.m'],'" completed.'],1)% close status barfm_bar close% last operationscd(Path.local);if Settings.beep, beep, endFile.data = strrep(File.data,'_mdl','(mdl)');%------------------------------------------------------------------% recoursive search for block connections (destination)%------------------------------------------------------------------function [rowno, busno] = connectd(block,lines,blocks,maskb,maskc)msg = ['Error: ',maskb,' block ("', ... get_param(block,'Name'), ... '") is not connected to any block ',maskc,'.'];line_out = find_system(lines,'SrcBlockHandle',block);if isempty(line_out) fm_disp(msg,2) rowno = '-1'; busno = '-1'; returnendwhile 1 dstblock = get_param(line_out,'DstBlockHandle'); if dstblock == -1 fm_disp(msg,2) rowno = '-1'; busno = '-1'; return end mask_db = get_param(dstblock,'MaskType'); if isempty(mask_db), mask_db = get_param(dstblock,'BlockType'); end switch mask_db case {maskc} busno = get_param(dstblock,'UserData'); rowno = get_param(block,'UserData'); %eval([maskb,'(',rowno,',1) = ',busno,';']); break case 'Outport' porta = str2num(get_param(dstblock,'Port')); subsys = get_param(dstblock,'Parent'); handle = get_param(subsys,'PortHandles'); line_out = find_system(lines,'SrcPortHandle', ... handle.Outport(porta)); case 'Goto' Tag = get_param(dstblock,'GotoTag'); fromblock = find_system(blocks, ... 'BlockType','From', ... 'GotoTag', Tag); handle = get_param(fromblock(1),'PortHandles'); line_out = find_system(lines, ... 'SrcPortHandle',handle.Outport); case 'SubSystem' porta = get_param(line_out,'DstPortHandle'); handle = get_param(dstblock,'PortHandles'); portno = find(handle.Inport == porta); inport = find_system(blocks, ... 'SearchDepth',0, ... 'Parent',getfullname(dstblock), ... 'BlockType','Inport', ... 'Port', int2str(portno)); handle = get_param(inport,'PortHandles'); line_out = find_system(lines, ... 'SrcPortHandle',handle.Outport); case 'Link' handle = get_param(dstblock,'PortHandles'); line_out = find_system(lines, ... 'SrcPortHandle',handle.Outport); otherwise fm_disp(msg,2) rowno = '-1'; busno = '-1'; return endend%------------------------------------------------------------------% recoursive search for block connections (source)%------------------------------------------------------------------function [rowno, busno] = connects(block,lines,blocks,maskb,maskc)msg = ['Error: ',maskb,' block ("', ... get_param(block,'Name'),'") is not connected to any block ',maskc,'.'];line_in = find_system(lines,'DstBlockHandle',block);if isempty(line_in) fm_disp(msg,2) rowno = '-1'; busno = '-1'; returnendwhile 1 srcblock = get_param(line_in,'SrcBlockHandle'); if srcblock == -1 fm_disp(msg,2) rowno = '-1'; busno = '-1'; return end mask_sb = get_param(srcblock,'MaskType'); if isempty(mask_sb), mask_sb = get_param(srcblock,'BlockType'); end switch mask_sb case {maskc} busno = get_param(srcblock,'UserData'); rowno = get_param(block,'UserData'); break case 'Inport' porta = str2num(get_param(srcblock,'Port')); subsys = get_param(srcblock,'Parent'); handle = get_param(subsys,'PortHandles'); line_in = find_system(lines,'DstPortHandle', ... handle.Inport(porta)); case 'SubSystem' porta = get_param(linein,'SrcPortHandle'); handle = get_param(srcblock,'PortHandles'); portno = find(handle.Outport == porta); outport = find_system(blocks, ... 'SearchDepth',0, ... 'Parent',getfullname(srcblock), ... 'BlockType','Outport', ... 'Port', int2str(portno)); handle = get_param(outport,'PortHandles'); line_in = find_system(lines, ... 'DstPortHandle',handle.Inport); case 'From' Tag = get_param(srcblock,'GotoTag'); gotoblock = find_system(blocks, ... 'BlockType','Goto', ... 'GotoTag', Tag); handle = get_param(gotoblock(1),'PortHandles'); line_in = find_system(lines, ... 'DstPortHandle',handle.Inport); otherwise fm_disp(msg,2) rowno = '-1'; busno = '-1'; return endend%----------------------------------------------------------------------------------function dispno(num,msg)%----------------------------------------------------------------------------------if num, fm_disp([msg,': #',num2str(num),'#']), end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -