📄 fm_simrep.m
字号:
function fm_simrep(flag,fontsize,fontname)% FM_SIMREP generate data report in Simulink models%% FM_SIMREP(FLAG,FONTSIZE,FONTNAME)% FLAG: 1 - set up voltage report on current loaded network% 2 - wipe voltage report on current loaded network% 3 - set up power flows on current loaded network% 4 - wipe power flows on current loaded network% 5 - hide component names except for buses% 6 - show component names% 7 - hide bus names% 8 - show bus names% 9 - set font name% 10 - set font size% 11 - save model diagram to eps file% FONTSIZE: font size (integer)% FONTNAME: font name (string)%%see also FM_LIB, FM_SIMSET%%Author: Federico Milano%Date: 11-Nov-2002%Version: 1.0.0%%E-mail: fmilano@thunderbox.uwaterloo.ca%Web-site: http://thunderbox.uwaterloo.ca/~fmilano%% Copyright (C) 2002-2005 Federico Milano%% This toolbox is free software; you can redistribute it and/or modify% it under the terms of the GNU General Public License as published by% the Free Software Foundation; either version 2.0 of the License, or% (at your option) any later version.%% This toolbox is distributed in the hope that it will be useful, but% WITHOUT ANY WARRANTY; without even the implied warranty of% MERCHANDABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU% General Public License for more details.%% You should have received a copy of the GNU General Public License% along with this toolbox; if not, write to the Free Software% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,% USA.fm_varif isempty(File.data), fm_disp(['No loaded system is present at the ' ... 'moment.'],2), returnendif isempty(findstr(File.data,'(mdl)')), fm_disp(['The actual Data ' ... 'File is not generated from a Simulink model.'],2), returnendif ~Settings.init & ~(flag == 11 | flag == 0) fm_disp(['Perform Power Flow before using ' ... 'this utility.'],2), returnendlasterr('');% load Simulink modelcd(Path.data);filedata = File.data(1:end-5);open_sys = find_system('type','block_diagram');donotclose = 0;for i = 1:length(open_sys), if strcmp(open_sys{i},filedata), donotclose = 1; break endendif ~donotclose, open_system(filedata);endcur_sys = get_param(filedata,'Handle');blocks = find_system(cur_sys,'Type','block');lines = find_system(cur_sys, ... 'FindAll','on', ... 'type','line');masks = get_param(blocks,'Masktype');nblock = length(blocks);switch flag case 0 % used in case one just wants to open the currently loaded % Simulink model. case 1 busidx = find(strcmp(masks,'Bus')); for i = 1:Bus.n valore = ['|V| = ', ... fvar(DAE.V(i),7), ... ' p.u.\n<V = ', ... fvar(DAE.a(i),7), ... ' rad ']; set_param(blocks(busidx(i)),'AttributesFormatString',valore); end case 2 busidx = find(strcmp(masks,'Bus')); for i = 1:Bus.n, set_param(blocks(busidx(i)),'AttributesFormatString',''); end case 3 tps = Line.con(:,11).*exp(jay*Line.con(:,12)*pi/180); VV = DAE.V.*exp(jay*DAE.a); r = Line.con(:,8); rx = Line.con(:,9); chrg = Line.con(:,10)/2; chrg1 = chrg - jay*Shunt.g(Line.from) + Shunt.b(Line.from); chrg2 = chrg - jay*Shunt.g(Line.to) + Shunt.b(Line.to); z = r + jay*rx; y = ones(Line.n,1)./z; % power flows in transmission lines MW_s = VV(Line.from).*conj((VV(Line.from) - ... tps.*VV(Line.to)).*y + ... VV(Line.from).*(jay*chrg1))./(tps.*conj(tps)); P_s = real(MW_s); % P i -> j Q_s = imag(MW_s); % Q i -> j MW_r = VV(Line.to).*conj((VV(Line.to) - ... VV(Line.from)./tps).*y + VV(Line.to).*(jay*chrg2)); P_r = real(MW_r); % P j -> i Q_r = imag(MW_r); % Q j -> i lineidx = find(strcmp(masks,'Line')); for i = 1:length(lineidx) line_out = find_system(lines, ... 'SrcBlockHandle',blocks(lineidx(i))); line_in = find_system(lines, ... 'DstBlockHandle',blocks(lineidx(i))); v_out = [' <- P = ', ... fvar(P_r(i),7), ... ' p.u.', ... char(10), ... ' <- Q = ', ... fvar(Q_r(i),7), ... ' p.u.']; v_in = ['P = ', ... fvar(P_s(i),7), ... ' p.u. ->', ... char(10), ... 'Q = ', ... fvar(Q_s(i),7), ... ' p.u. ->']; set_param(line_out,'Name',v_out) set_param(line_in ,'Name',v_in) end tipi = Comp.n; type_con = Comp.funct; n_type = Comp.number; type_dat = Varname.fcomp; tipi_con = length(Varname.fcomp); gp_old = DAE.gp; gq_old = DAE.gq; for i = 1:tipi if eval(n_type{i}) > 0 type_old = eval([n_type{i}(1:end-2),'.con']); typeidx = find(strcmp(masks,n_type{i}(1:end-2))); switch n_type{i}(1:end-2) case 'Tg' for h = 1:length(typeidx) line_out = find_system(lines,'SrcBlockHandle', ... blocks(typeidx(h))); v_out = ['Pm = ',fvar(Syn.pm(type_old(h,1)),7),' p.u.']; set_param(line_out,'Name',v_out); end case 'Exc' for h = 1:length(typeidx) line_out = find_system(lines,'SrcBlockHandle', ... blocks(typeidx(h))); v_out = ['Vf = ',fvar(Syn.vf(type_old(h,1)),7),' p.u.']; set_param(line_out,'Name',v_out); end case 'Oxl' for h = 1:length(typeidx) line_out = find_system(lines,'SrcBlockHandle', ... blocks(typeidx(h))); v_out = ['Voxl = ',fvar(DAE.x(Oxl.v(h)),7),' p.u.']; set_param(line_out,'Name',v_out); end case 'Pss' for h = 1:length(typeidx) line_out = find_system(lines,'SrcBlockHandle', ... blocks(typeidx(h))); vst = -DAE.x(Pss.v1,h) + Pss.con(h,3).* ... DAE.x(Syn.omega(Pss.exc(h))) + ... Pss.con(h,2).*DAE.gp(Syn.bus(Exc.syn(Pss.exc(h)))); vst = max(vst,Pss.con(h,6)); vst = min(vst,Pss.con(h,5)); v_out = ['Vsst = ',fvar(vst,7),' p.u.']; set_param(line_out,'Name',v_out); end otherwise tipo = n_type{i}(1:end-2); eval(['if isfield(',tipo,',''dat''), dat_old = ', ... tipo,'.dat; end']) n_type_old = eval(n_type{i}); eval([n_type{i},' = 1;']) for k = 1:length(Varname.fname) if strcmp(tipo,Varname.comp{k}) eval([Varname.uname{k},'_idx_old = ',Varname.comp{k}, ... '.',Varname.uname{k},';']) end end for j = 1:n_type_old eval([tipo,'.con = type_old(',int2str(j),',:);']) eval(['if isfield(',tipo,',''dat''),',tipo, ... '.dat = dat_old(',int2str(j),',:); end']) for k = 1:length(Varname.fname) if strcmp(tipo,Varname.comp{k}) if ~isempty(eval([Varname.uname{k},'_idx_old'])) eval([Varname.comp{k},'.',Varname.uname{k}, ' = ', ... Varname.uname{k},'_idx_old(',int2str(j),');']) end end end DAE.gp = zeros(Bus.n,1); DAE.gq = zeros(Bus.n,1); feval(type_con{i},1) line_out = find_system(lines,'SrcBlockHandle', ... blocks(typeidx(j))); line_in = find_system(lines,'DstBlockHandle', ... blocks(typeidx(j))); if ~isempty(line_out) line_out = line_out(1); switch tipo case 'PV', d = '1'; case 'SW', d = '1'; case 'Syn', d = '1'; case 'SSR', d = '1'; otherwise, d = '2'; end eval(['a1 = Bus.int(',tipo,'.con(',d,'));']) v_out = [' <- P = ',fvar(DAE.gp(a1),7),' p.u.',char(10),[' ' ... '<- Q = '],fvar(DAE.gq(a1),7),' p.u.']; if strcmp(tipo,'PV') a3 = length(find(Bus.int(type_old(:,1)) == a1)); v_out = ['P = ',fvar(-DAE.gp(a1),7),' p.u. ->',char(10),['Q ' ... '= '],fvar(Bus.Qg(a1)/a3,7),' p.u. ->']; elseif strcmp(tipo,'SW') v_out = ['P = ',fvar(Bus.Pg(a1),7),' p.u. ->',char(10),['Q ' ... '= '],fvar(Bus.Qg(a1),7),' p.u. ->']; elseif strcmp(tipo,'Syn') v_out = ['P = ',fvar(Bus.Pg(a1)*Syn.con(22),7),' p.u. ->',char(10) ... ,'Q = ',fvar(Bus.Qg(a1)*Syn.con(23),7),' p.u. ->']; end set_param(line_out,'Name',v_out); end if ~isempty(line_in) & ~strcmp(tipo,'Syn') for iii = 1:length(line_in) switch tipo case 'Ltc', Porta = get_param(line_in(iii),'DstPortHandle'); Blocco = get_param(blocks(typeidx(j)),'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(line_in(iii),'DstPortHandle'); Blocco = get_param(blocks(typeidx(j)),'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(['a2 = Bus.int(',tipo,'.con(',d,'));']) v_in = ['P = ',fvar(DAE.gp(a2),7),' p.u. ->',char(10), ... 'Q = ',fvar(DAE.gq(a2),7),' p.u. ->']; set_param(line_in(iii),'Name',v_in); end end end eval([tipo,'.con = type_old;']) eval(['if isfield(',tipo,',''dat''), ',tipo, ... '.dat = dat_old; end']) eval([n_type{i},'= n_type_old;']) for k = 1:length(Varname.fname) if strcmp(tipo,Varname.comp{k}) eval([Varname.comp{k},'.',Varname.uname{k}, ... ' = ',Varname.uname{k},'_idx_old;']) end end end end end DAE.gp = gp_old; DAE.gq = gq_old; case 4 for i = 1:length(lines), set_param(lines(i),'Name',''); end case 5 nobusidx = find(~strcmp(masks,'Bus')); for i = 1:length(nobusidx), set_param(blocks(nobusidx(i)),'ShowName','off'); end nobusidx = find(strcmp(masks,'')); for i = 1:length(nobusidx), set_param(blocks(nobusidx(i)),'ShowName','on'); end case 6 for i = 1:nblock, set_param(blocks(i),'ShowName','on'); end case 7 busidx = find(strcmp(masks,'Bus')); for i = 1:Bus.n, set_param(blocks(busidx(i)),'ShowName','off'); end case 8 busidx = find(strcmp(masks,'Bus')); for i = 1:Bus.n, set_param(blocks(busidx(i)),'ShowName','on'); end case 9 for i = 1:nblock, set_param(blocks(i),'FontName',fontname); end for i = 1:length(lines), set_param(lines(i),'FontName',fontname); end case 10 for i = 1:nblock, set_param(blocks(i),'FontSize',fontsize); end for i = 1:length(lines), set_param(lines(i),'FontSize',fontsize); end case 11 cd(Path.data) fileeps = [filedata,'.eps']; a = dir(fileeps); Settings.ok = 1; if ~isempty(a) uiwait(fm_choice(['Overwrite "',fileeps,'" ?'])) end if ~Settings.ok, return, end orient portrait print('-s','-depsc',fileeps) if ~Settings.noarrows cd(Path.local) fm_disp(['PSAT model saved in ',Path.data,fileeps]) return end file = textread(fileeps,'%s','delimiter','\n'); idx = []; d2 = zeros(1,4); for i = 1:length(file) if strcmp(file{i},'PP') if strcmp(file{i-1}(end-1:end),'MP') d1 = str2num(strrep(file{i-1},'MP','')); if ~d1(3) d2(2) = d1(6)-d1(2); d2(4) = d1(6)-d1(2); d2(1) = d1(5)-d1(2); d2(3) = d1(5)+d1(1); else d2(2) = d1(6)+d1(2); d2(4) = d1(6)-d1(1); d2(1) = d1(5)-d1(1); d2(3) = d1(5)-d1(1); end file{i-1} = sprintf('%4d %4d mt %4d %4d L',d2); idx = [idx, i]; end end if ~isempty(findstr(file{i}(max(1,end-1):end),'PO')) d1 = str2num(strrep(file{i},'PO','')); nextline = strrep(file{i+1},'L',''); d2 = str2num(strrep(nextline,'mt','')); if d1(4) == d2(2) if d2(1) > d1(3); d2(1) = d1(3)-d1(1); else d2(1) = d2(1)+d1(1)+abs(d1(3)-d2(1)); end else if d2(2) > d1(4) d2(2) = d1(4)-d1(2); else d2(2) = d2(2)+d1(2)+abs(d1(4)-d2(2)); end end file{i+1} = sprintf('%4d %4d mt %4d %4d L',d2); idx = [idx, i]; end end file(idx) = []; fid = fopen(fileeps,'wt+'); for i = 1:length(file) fprintf(fid,'%s\n',file{i}); end fclose(fid); cd(Path.local) fm_disp(['PSAT model saved in ',Path.data,fileeps]) otherwise fm_disp('Unknown command for Simulink Settings GUI...',2) endcd(Path.local)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -