⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fm_simrep.m

📁 电力系统的psat
💻 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 + -