📄 pst2psat.m
字号:
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 + -