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

📄 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:    fmilano@thunderbox.uwaterloo.ca
%Web-site:  http://thunderbox.uwaterloo.ca/~fmilano
%
% Copyright (C) 2002-2006 Federico Milano

global Settings

check = 1;
pathname = [pathname,filesep];

fm_disp
fm_disp('Conversion from Power System Toolbox format...');
fm_disp(['Source data file "',pathname,filename,'"'])

% initialization of PST global variables
bus = [];             % load flow data
line = [];
mac_con  = [];        % synchronous machine data
exc_con   = [];       % excitation system data
load_con  = [];       % non-conforming load data
ltc_con = [];
ind_con  = [];        % induction motor data
mld_con  = [];
svc_con = [];         % SVC data
pss_con = [];         % PSS data
tg_con = [];          % turbine-governor data
dcsp_con = [];        % HVDC data
dcl_con = [];
dcc_con = [];
sw_con = [];          % switch data
scr_con = [];
ibus_con = [];
netg_con = [];
stab_con = [];

% load PST data & check for consistency
try,
  eval(filename(1:end-2));
catch,
  check = 0;
  fm_disp('Error encountered while opening PST data file...')
  return,
end
if isempty(bus)
  fm_disp(['Selected file "',filename, ...
           '" does not appear a valid PST data file.'],2);
  check = 0;
  return
end

% some settings
bus(:,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 file
newfile = strrep(filename,'.m','_pst.m');
if ~strcmp(newfile(1), 'd'); newfile = ['d_',newfile]; end

% open file for writing
fid = 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; end
count = 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 dimensions
nrow = length(net_line(1,:));
if nrow < 10, net_line = [net_line,zeros(sizeline,10-nrow)]; end

idx = 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 + -