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

📄 pst2psat.m

📁 用于电力系统的一个很好的分析软件
💻 M
📖 第 1 页 / 共 2 页
字号:
function check = pst2psat(filename, pathname)% PST2PSAT convert data files in the Power System Toolbox%        version 2.0 format in the PSAT format.%        During the conversion process, approximations%        and/or guesses may be used.%% CHECK = PST2PSAT(FILENAME,PATHNAME)%       FILENAME name of the file to be converted%       PATHNAME path of the file to be converted%%       CHECK = 1 conversion completed%       CHECK = 0 problem encountered (no data file created)%%Author:    Federico Milano%Date:      11-Nov-2002%Version:   1.0.0%%E-mail:    Federico.Milano@uclm.es%Web-site:  http://www.uclm.es/area/gsee/Web/Federico%% Copyright (C) 2002-2008 Federico Milanoglobal Settingscheck = 1;pathname = [pathname,filesep];fm_dispfm_disp('Conversion from Power System Toolbox format...');fm_disp(['Source data file "',pathname,filename,'"'])% initialization of PST global variablesbus = [];             % load flow dataline = [];mac_con  = [];        % synchronous machine dataexc_con   = [];       % excitation system dataload_con  = [];       % non-conforming load dataltc_con = [];ind_con  = [];        % induction motor datamld_con  = [];svc_con = [];         % SVC datapss_con = [];         % PSS datatg_con = [];          % turbine-governor datadcsp_con = [];        % HVDC datadcl_con = [];dcc_con = [];sw_con = [];          % switch datascr_con = [];ibus_con = [];netg_con = [];stab_con = [];% load PST data & check for consistencytry,  eval(filename(1:end-2));catch,  check = 0;  fm_disp('Error encountered while opening PST data file...')  return,endif isempty(bus)  fm_disp(['Selected file "',filename, ...           '" does not appear a valid PST data file.'],2);  check = 0;  returnend% some settingsbus(:,3) = pi*bus(:,3)/180;mvabas = 100;sizebus = length(bus(:,1));net_line = line;sizeline = length(net_line(:,1));heading = ['File originated from data in PST format: #bus = ', ...           num2str(sizebus),', #line = ',num2str(sizeline)];% definition of file name for PSAT data filenewfile = strrep(filename,'.m','_pst.m');if ~strcmp(newfile(1), 'd'); newfile = ['d_',newfile]; end% open file for writingfid = fopen([pathname, newfile], 'wt');count = fprintf(fid, ['%%  ', heading, '\n\n']);% Bus data Bus.con% ---------------------------------------------------------------fm_disp('bus -> Bus.con')count = fprintf(fid, 'Bus.con = [ ...\n');nrow = length(bus(1,:));bus = [bus,zeros(sizebus,15-nrow)];idx = find(bus(:,13)==0);if idx, bus(idx,13) = 1; endcount = fprintf(fid,'%4d %8.4g %8.4g %8.4g;\n',bus([1:end-1],[1,13,2,3])');count = fprintf(fid,'%4d %8.4g %8.4g %8.4g];\n\n\n',bus(end,[1,13,2,3]));% Slack bus data SW.con% ---------------------------------------------------------------row = find(bus(:,10) == 1);if ~isempty(row)  fm_disp('bus -> SW.con')  count = fprintf(fid, 'SW.con = [ ...\n');  format = '%4d %8.4g %8.4g %8.4g %8.4g %8.4g %8.4g %8.4g %8.4g %8.4g %2u';  for i = 1:length(row)-1    k = row(i);    if ~bus(k,11), bus(k,11) =  99; end    if ~bus(k,12), bus(k,12) = -99; end    if ~bus(k,14), bus(k,14) =  1.2; end    if ~bus(k,15), bus(k,15) =  0.8; end    data = [bus(k,1),mvabas,bus(k,[13, 2, 3, 11, 12, 14, 15, 4]),1];    count = fprintf(fid,[format,';\n'],data);  end  k = row(end);  data = [bus(k,1), mvabas, bus(k,[13, 2, 3, 11, 12, 14, 15, 4]),1];  count = fprintf(fid,[format,']; \n\n\n'],data);end% PV bus data PV.con% ---------------------------------------------------------------------row = find(bus(:,10) == 2);if ~isempty(row)  fm_disp('bus -> PV.con')  format = '%4d %8.4g %8.4g %8.4g %8.4g %8.4g %8.4g %8.4g %8.4g %2u';  count = fprintf(fid, 'PV.con = [ ...\n');  for i = 1:length(row)-1    k = row(i);    if ~bus(k,11), bus(k,11) =  99; end    if ~bus(k,12), bus(k,12) = -99; end    if ~bus(k,14), bus(k,14) =  1.2; end    if ~bus(k,15), bus(k,15) =  0.8; end    data = [bus(k,1), mvabas, bus(k,[13, 4, 2, 11, 12, 14, 15]),1];    count = fprintf(fid, [format,';\n'],data);  end  k = row(end);  data = [bus(k,1), mvabas, bus(k,[13, 4, 2, 11, 12, 14, 15]),1];  count = fprintf(fid, [format,']; \n\n\n'],data);end% PQ bus data PQ.con% ---------------------------------------------------------------------row = find(bus(:,6) ~= 0 | bus(:,7) ~= 0);if ~isempty(row)  fm_disp('bus -> PQ.con')  count = fprintf(fid, 'PQ.con = [ ...\n');  format = '%4d %8.4g %8.4g %8.4g %8.4g %8.4g %8.4g %2u';  for i = 1:length(row)-1    k = row(i);    if ~bus(k,14), bus(k,14) = 1.2; end    if ~bus(k,15), bus(k,15) = 0.8; end    data = [bus(k,1), mvabas, bus(k,[13,6,7,14,15]),0];    count = fprintf(fid, [format, ';  \n'], data);  end  k = row(end);  data = [bus(k,1), mvabas, bus(k,[13,6,7,14,15]),0];  count = fprintf(fid, [format,']; \n\n\n'], data);end% Shunt bus data Shunt.con% ---------------------------------------------------------------------row = find(bus(:,8) ~= 0 | bus(:,9) ~= 0);if ~isempty(row)  fm_disp('bus -> Shunt.con')  count = fprintf(fid, 'Shunt.con	= [ ...\n');  format = '%4d %8.4g %8.4g %8.4g %8.4g %8.4g';  for i = 1:length(row)-1    k = row(i);    data = [bus(k,1), mvabas, bus(k,13), 60, bus(k,[8,9])];    count = fprintf(fid, [format,';  \n'], data);  end  k = row(end);  data = [bus(k,1), mvabas, bus(k,13), 60, bus(k,[8,9])];  count = fprintf(fid, [format, ']; \n\n\n'], data);end% Line data Line.con% --------------------------------------------------------------------% adjust line matrix dimensionsnrow = length(net_line(1,:));if nrow < 10, net_line = [net_line,zeros(sizeline,10-nrow)]; endidx = find(net_line(:,8)==0 & net_line(:,9)==0 & net_line(:,10)==0);if ~isempty(idx)  fm_disp('line -> Line.con')  format = ['%4d %4d %8.4g %8.4g %8.4g %8.4g %8.4g %8.4g ' ...            '%8.4g %8.4g %8.4g %8.4g %8.4g'];  count = fprintf(fid, 'Line.con = [ ...\n');  for i = 1:length(idx)-1    k = idx(i);    kV = bus(find(bus(:,1)==net_line(k,1)),13);    %if net_line(k,6) ~= 0 | net_line(k,7) ~= 0    kV2 = bus(find(bus(:,1)==net_line(k,2)),13);    tap = kV/kV2;    if tap == 1, tap = 0; end    data = [net_line(k,[1 2]),mvabas,kV,60,0,tap,net_line(k,[3,4,5,6,7]),0];    %else    %  data = [net_line(k,[1 2]),mvabas,kV,60,0,0,net_line(k,[3,4,5]),0,0,0];    %end    count = fprintf(fid, [format,';\n'],data);  end  k = idx(end);  kV = bus(find(bus(:,1)==net_line(k,1)),13);  %if net_line(k,6) ~= 0 | net_line(k,7) ~= 0  kV2 = bus(find(bus(:,1)==net_line(k,2)),13);  tap = kV/kV2;  if tap == 1, tap = 0; end  data = [net_line(k,[1 2]),mvabas,kV,60,0,tap,net_line(k,[3,4,5,6,7]),0];  %else  %  data = [net_line(k,[1 2]),mvabas,kV,60,0,0,net_line(k,[3,4,5]),0,0,0];  %end  count = fprintf(fid, [format,'];\n\n\n'],data);end% Under load transformer data Ltc.con% ------------------------------------------------------------------------idx = find(net_line(:,8)~=0 | net_line(:,9)~=0 | net_line(:,10)~=0);if ~isempty(idx)  fm_disp('line -> Ltc.con')  format = ['%4d %4d %8.4g %8.4g %8.4g %8.4g %8.4g %8.4g ' ...            '%8.4g %8.4g %8.4g %8.4g %8.4g %8.4g %8.4g %4d'];  count = fprintf(fid, 'Ltc.con = [ ...\n');  for i = 1:length(idx)-1    k = idx(i);    kV = bus(find(bus(:,1)==net_line(k,1)),13);    %vref = bus(find(bus(:,1)==net_line(k,2)),2);    data = [net_line(k,[1,2]),mvabas,kV,60,net_line(k,6),0, ...            0.1,net_line(k,[8,9,10]),1,net_line(k,[4,3]),0,1];    count = fprintf(fid, [format, ';\n'],data);  end  k = idx(end);  kV = bus(find(bus(:,1)==net_line(k,1)),13);  %vref = bus(find(bus(:,1)==net_line(k,2)),2);  data = [net_line(k,[1,2]),mvabas,kV,60,net_line(k,6),0, ...          0.1,net_line(k,[8,9,10]),1,net_line(k,[4,3]),0,1];  count = fprintf(fid, [format, ']; \n\n\n'],data);end% Sychronous machine data Syn.con% --------------------------------------------------------------------if ~isempty(mac_con)  fm_disp('mac_con -> Syn.con')  % adjust mac_con matrix dimension & data  nrow = length(mac_con(1,:));  ngen = length(mac_con(:,1));  if nrow < 23, mac_con = [mac_con,zeros(ngen,23-nrow)]; end  format = ['%4d %8.4g %8.4g %8.4g %4d %8.4g %8.4g %8.4g %8.4g ' ...            '%8.4g %8.4g %8.4g %8.4g %8.4g %8.4g %8.4g %8.4g ' ...            '%8.4g %8.4g %8.4g %8.4g %8.4g %8.4g %8.4g'];  mac_con(find(mac_con(:,22)==0),22) = 1;  mac_con(find(mac_con(:,23)==0),23) = 1;  count = fprintf(fid, 'Syn.con = [ ...\n');  for i = 1:ngen-1    kV = bus(find(bus(:,1)==mac_con(i,2)),13);    % choice of machine model    Td1 = mac_con(i,9);    Td2 = mac_con(i,10);    Tq1 = mac_con(i,14);    Tq2 = mac_con(i,15);    if Tq2 & Tq1 & Td2, ord = 6;    elseif Tq2 & Td2,   ord = 5.2;    elseif Tq1 & Tq2,   ord = 5.1;    elseif Tq1,         ord = 4;    elseif Td1,         ord = 3;    else,               ord = 2;    end    data = [mac_con(i,[2,3]),kV,60,ord,mac_con(i,[4:15]),2*mac_con(i,16), ...            mac_con(i,[17]),0,0,mac_con(i,[22,23]),0];    count = fprintf(fid, [format, ';\n'],data);  end  i = ngen;  kV = bus(find(bus(:,1)==mac_con(i,2)),13);  % choice of machine model  Td1 = mac_con(i,9);  Td2 = mac_con(i,10);  Tq1 = mac_con(i,14);

⌨️ 快捷键说明

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