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

📄 fm_sim.m

📁 电力系统的psat
💻 M
📖 第 1 页 / 共 2 页
字号:
function  check_model = fm_sim% FM_SIM convert Simulink models into PSAT data files%% CHECK = FM_SIM%       CHECK = 0 conversion failed%       CHECK = 1 conversion completed%%see also FM_LIB, FM_SIMREP, FM_SIMSET%%Author:    Federico Milano%Date:      11-Nov-2002%Update:    21-Feb-2003%Update:    22-Feb-2003%Update:    03-Mar-2003%Update:    28-Jul-2003%Update:    09-Aug-2003%Version:   1.1.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.global File Fig Settings Hdl Path Varname Theme Historycheck_model = 1;fm_dispfm_disp('Simulink Model Conversion');fm_disp(['Simulink File "',Path.data,File.data,'"']);lasterr('');type_con = Varname.fcomp;for i = 1:length(Varname.fcomp),  eval([Varname.fcomp{i}, ' = [];']);endtipi = length(type_con)-1;% constants used in the component masks% ----------------------------------------------------------------on = 1;off = 0;omega = 1;power = 2;voltage = 3;monday = 1;tuesday = 2;wednesday = 3;thursday = 4;friday = 5;saturday = 6;sunday = 7;winter_week_day = 1;winter_week_end = 2;summer_week_day = 3;summer_week_end = 4;spring_fall_week_day = 5;spring_fall_week_end = 6;measurements = 1;weibull = 2;composite = 3;% loading Simulink model% ----------------------------------------------------------------filedata = File.data(1:end-5);fm_disp('Loading Simulink Model')cd(Path.data);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,  cur_sys = load_system(filedata);else,  cur_sys = get_param(filedata,'Handle');end% open status barfm_bar open% load block and mask properties% ----------------------------------------------------------------Settings.mv = str2num(get_param(cur_sys,'ModelVersion'));blocks = find_system(cur_sys,'Type','block');lines = find_system(cur_sys,'FindAll','on','type','line');masks = get_param(blocks,'MaskType');nblock = length(blocks);tipi3 = 1/(tipi + 1 + 2*nblock);fm_bar([1e-3,tipi3])fm_disp('   * * *')fm_disp('Check Blocks ...')Tags = get_param(blocks,'Tag');BlockTypes = get_param(blocks,'BlockType');idx = ones(nblock,1);block_match = strmatch('PSATblock',Tags,'exact');if ~isempty(block_match), idx(block_match) = 0; endblock_types = strmatch('SubSystem',BlockTypes,'exact');if ~isempty(block_types), idx(block_types) = 0; endblock_types = strmatch('PMIOPort',BlockTypes,'exact');if ~isempty(block_types), idx(block_types) = 0; endfixmodel = 0;if sum(idx)  idx = find(idx);  fm_disp(strcat('Warning: Block "',get_param(blocks(idx),'Name'), ...		 '" does not belong to the PSAT Simulink Library.'))  Settings.ok = 0;  uiwait(fm_choice(['Some blocks do not seem to belong to the ', ...		    'PSAT library, but could be old blocks. ', ...		    'Do you want to fix them?']))  if Settings.ok    fixmodel = 1;    for iii = 1:length(idx)      blocktype = masks{idx(iii)};      if isempty(blocktype)	blocktype = get_param(blocks(idx(iii)),'BlockType');      end      switch blocktype       case {'Bus','Link','Goto','From'}	prop = 'Connection';       case {'Supply','Demand','Rmpg','Rrsv','Vltn','Rmpl','Ypdp'}	prop = 'OPF & CPF';       case {'Breaker','Fault'}	prop = 'Faults & Breakers';       case 'Busfreq'	prop = 'Measurements';       case {'Mn','Pl','Thload','Fl','Exload'}	prop = 'Loads';       case {'Syn','Mot'}	prop = 'Machines';       case {'Ltc','Tap'}	prop = 'ULTC';       case 'Phs'	prop = 'Phase Shifter';       case {'Tg','Exc','Cac','Cluster','Pss','Oxl'}	prop = 'Controls';       case {'Statcom','Upfc','Svc','Hvdc','Tcsc','Sssc'}	prop = 'FACTS';       case {'Dfig','Cswt','Ddsg'}	prop = 'Wind Turbines';       case {'Sofc','SSR','RLC','Mass'}	prop = 'Sparse Dynamic Component';       case {'SAE1','SAE2','SAE3'}	prop = 'SAE';       otherwise	prop = 'Power Flow';      end      set_param(blocks(idx(iii)), ...		'Tag','PSATblock', ...		'Description',prop)    end  endelse  fm_disp('All blocks belong to the PSAT Simulink Library.')endfm_disp('   * * *')fm_disp('Statistics ...')if isunix  pathfilt = Path.filters;  pathdata = Path.data;  if strcmp(computer,'GLNX86')    if strcmp(pathdata(1),'~')      pathdata = [getenv('HOME'),pathdata(2:end)];    end    pathfilt = [getenv('HOME'),pathfilt(2:end)];  end  perlcmd = ['perl "',pathfilt,'simblocks" "',pathdata,filedata,'.mdl"'];  [w,vector] = unix(perlcmd);else  perlcmd = ['perl "',Path.filters,'simblocks" "',Path.data,filedata,'.mdl"'];  [w,vector] = dos(perlcmd);endtry  vector = eval(vector);  dispno(vector(1),'Connections')  dispno(vector(2),'Power Flow Components')  dispno(vector(3),'OPF & CPF Components')  dispno(vector(4),'Faults & Breakers')  dispno(vector(5),'Special Loads')  dispno(vector(6),'Machines')  dispno(vector(7),'Regulating Transformers')  dispno(vector(8),'Controls')  dispno(vector(9),'FACTS')  dispno(vector(10),'Spare Dynamic Components')  dispno(vector(11),'Subtransmission Equivalent Areas')  dispno(vector(12),'Wind Power Components')  dispno(vector(13),'Measurement Components')catch  fm_disp(['fm_sim could not evaluate "',vector,'"'],2)  fm_disp('Check of Simulink blocks coudn''t be performed.')endfm_disp('  * * *')fm_disp('Definition of component data ...')% component data matrices% ----------------------------------------------------------------kinds = zeros(length(type_con),1);idx_old = 0;for i = 1:nblock  tipo = masks{i};  idx = strmatch(tipo,type_con,'exact');  if ~isempty(idx)    kinds(idx) = kinds(idx)+1;    sidx = num2str(kinds(idx));    if idx ~= idx_old      idx_old = idx;      fm_disp(['Data "',tipo,'.con"'])    end    comp_data = get_param(blocks(i),'MaskVariables');    comp_value = get_param(blocks(i),'MaskValueString');    valori = strrep(['[',comp_value,']'],'|',',');    indici = comp_data;    if strmatch(indici,'pxq=@1;','exact')      indici = ':';    else      indici = ['[',indici,']'];      indici = strrep(indici,'x',':');      indici = strrep(indici,'p','');      indici = strrep(indici,'_',' ');    end    if Settings.hostver >= 6.5      indici = regexprep(indici,'q=@([0-9]*);',' ');      indici = regexprep(indici,'(in|out|ins|ous)=@([0-9]*);',' 1 ');    else      nvals = length(findstr(indici,';'));      for j = 1:nvals        indici = strrep(indici,['q=@',num2str(j),';'],' ');        indici = strrep(indici,['in=@',num2str(j),';'],' 1 ');        indici = strrep(indici,['out=@',num2str(j),';'],' 1 ');        indici = strrep(indici,['ins=@',num2str(j),';'],' 1 ');        indici = strrep(indici,['ous=@',num2str(j),';'],' 1 ');      end    end    try      eval([tipo,'(',sidx,',',indici,') = ',valori,';']);    catch      fm_disp(['Error: ',tipo,' block ("', ...          get_param(blocks(i),'Name'), ...          '") has a wrong number of data.'],2)      eval([tipo,'(',sidx,',',indici,') = 0;']);    end    set_param(blocks(i),'UserData',sidx);  end  if ~rem(i,5), fm_bar([(i-1)*tipi3,i*tipi3]), endend% "Bus" number% ----------------------------------------------------------------busidx = find(strcmp(masks,'Bus'));busname  = get_param(blocks(busidx),'Name');Bus_n = length(busidx);Bus(:,1) = [1:Bus_n]';fm_disp('   * * *')fm_disp('Definition of system connections ...')for i = 1:nblock  if ~isempty(masks{i}) & ~strcmp(masks{i},'Bus') & ~strcmp(masks{i},'Link')    switch masks{i}     case 'Exc'      [rowno, busno] = connectd(blocks(i),lines,blocks,'Exc','Syn');      eval([masks{i},'(',rowno,',1) = ',busno,';']);     case 'Tg'      [rowno, busno] = connectd(blocks(i),lines,blocks,'Tg','Syn');      eval([masks{i},'(',rowno,',1) = ',busno,';']);     case 'Pss'      [rowno, busno] = connectd(blocks(i),lines,blocks,'Pss','Exc');      eval([masks{i},'(',rowno,',1) = ',busno,';']);     case 'Oxl'      [rowno, busno] = connectd(blocks(i),lines,blocks,'Oxl','Exc');      eval([masks{i},'(',rowno,',1) = ',busno,';']);     case 'Mass'      [rowno, busno] = connectd(blocks(i),lines,blocks,'Mass','Syn');      eval([masks{i},'(',rowno,',1) = ',busno,';']);     case 'Rmpg'      [rowno, busno] = connectd(blocks(i),lines,blocks,'Rmpg','Supply');      eval([masks{i},'(',rowno,',1) = ',busno,';']);     case 'Rmpl'      [rowno, busno] = connects(blocks(i),lines,blocks,'Rmpl','Demand');      eval([masks{i},'(',rowno,',1) = ',busno,';']);     case 'Cluster'      % destination      [rowno, busno] = connectd(blocks(i),lines,blocks,'Cluster','Exc');      if str2num(rowno) > 0,        eval([masks{i},'(',rowno,',2) = 1;']);      end      if str2num(rowno) == -1,        History.text(end) = [];        [rowno, busno] = connectd(blocks(i),lines,blocks,'Cluster','Svc');        if str2num(rowno) > 0,          eval([masks{i},'(',rowno,',2) = 2;']);        end      end      eval([masks{i},'(',rowno,',1) = ',busno,';']);      % source      [rowno, busno] = connects(blocks(i),lines,blocks,'Cluster','Cac');      eval([masks{i},'(',rowno,',3) = ',busno,';']);    otherwise      % check connections      msg = ['Error: ',masks{i},' block ("', get_param(blocks(i),'Name'),'")'];      ports = [get_param(blocks(i),'Ports'), 0, 0, 0, 0, 0];      line_out = find_system(lines,'SrcBlockHandle',blocks(i));      line_in = find_system(lines,'DstBlockHandle',blocks(i));      ports_in = ports(1)+ports(3)+ports(6);      ports_out = ports(2)+ports(7);      %if ports(6) | ports(7)        %if ports(6)+ports(7) ~= length(line_out)+length(line_in)        %  fm_disp([msg,' has an undefined connection. *'],2)        %else        %  if length(line_out) > ports_out        %    line_in = [line_in; line_out(ports_out+1:end)];        %    line_out = line_out(1:ports_out);                    %  end        %  if length(line_in) > ports_in        %    line_out = [line_out; line_in(ports_in+1:end)];        %    line_in = line_in(1:ports_in);                                %  end        %end      %else      if length(line_out) ~= ports_out | length(line_in) ~= ports_in         fm_disp([msg,' has an undefined connection. *'],2)      end      %end      % find destination block      if ~isempty(line_out) & ~strcmp(masks{i},'Cac') & ...            ~strcmp(masks{i},'Demand') & ~strcmp(masks{i},'Wind')        for j = 1:length(line_out)          lineout = line_out(j);          dstblock = get_param(lineout,'DstBlockHandle');          while 1            if dstblock == -1,              fm_disp([msg,' has an undefined connection.'],2)              break            end            mask_db = get_param(dstblock,'MaskType');            if isempty(mask_db), mask_db = get_param(dstblock,'BlockType'); end            if iscell(mask_db), mask_db = mask_db{1}; end            switch mask_db             case 'Bus'              busno = get_param(dstblock,'UserData');              rowno = get_param(blocks(i),'UserData');              switch masks{i}               case {'PV','SW','Supply','Rsrv','Rmpg','Vltn', ...                     'Syn','SSR','Sofc','Cswt','Dfig','Ddsg'},                d = '1';               case 'Twt'                Porta = get_param(lineout,'SrcPortHandle');                Blocco = get_param(blocks(i),'PortHandles');                Numero_Porta = find(Blocco.Outport==Porta);                if isempty(Numero_Porta)                  Numero_Porta = find(Blocco.RConn==Porta);                end                if Numero_Porta == 1, d = '2'; else, d = '3'; end               otherwise,                d = '2';              end              eval([masks{i},'(',rowno,',',d,') = ',busno,';']);              break             case 'Outport'              porta = str2num(get_param(dstblock,'Port'));              subsys = get_param(dstblock,'Parent');              handle = get_param(subsys,'PortHandles');              lineout = find_system(lines,'SrcPortHandle',handle.Outport(porta));              dstblock = get_param(lineout,'DstBlockHandle');             case 'PMIOPort'              port_type = get_param(dstblock,'Side');              port_numb = str2num(get_param(dstblock,'Port'));              subsys = get_param(dstblock,'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 == dstblock);                lineout = find_system(lines,'DstPortHandle',handle.LConn(port_numb));              else                outport = find_system(pmcport,'Side','Right');                port_numb = find(outport == dstblock);                lineout = find_system(lines,'DstPortHandle',handle.RConn(port_numb));              end              dstblock = get_param(lineout,'SrcBlockHandle');             case 'SubSystem'              porta = get_param(lineout,'DstPortHandle');              handle = get_param(dstblock,'PortHandles');              portno = find(handle.Inport == porta);              if isempty(portno)                portno = find(handle.LConn == porta);                if isempty(portno)                  portno = find(handle.LConn == get_param(linein,'SrcPortHandle'));                end                pmcport = find_system(blocks, ...                'SearchDepth',0, ...                'Parent',getfullname(dstblock), ...                'BlockType','PMIOPort');                inport = find_system(pmcport,'Side','Left');                handle = get_param(inport(portno),'PortConnectivity');                handlel = get_param(inport(portno),'LineHandles');                lineout = handlel.RConn;                dstblock = handle.DstBlock;              else                inport = find_system(blocks, ...                'SearchDepth',0, ...                'Parent',getfullname(dstblock), ...                'BlockType','Inport', ...                'Port',int2str(portno));                handle = get_param(inport,'PortHandles')                lineout = find_system(lines,'SrcPortHandle',handle.Outport);                dstblock = get_param(lineout,'DstBlockHandle');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -