📄 simpow2psat
字号:
#!/usr/bin/perl -w# SIMPOW2PSAT converts SIMPOW data file into PSAT data file## SIMPOW2PSAT <OPTIONS> FILEINPUT <FILEOUTPUT>## Author: Juan Carlos Morataya# Date: 14-Nov-2005# Version: 1.0.0##E-mail: jmorataya@eegsa.netuse strict;# -----------------------------------------------------------------------# variable declaration# -----------------------------------------------------------------------my $nargin = 0;my $verbose = 0;my $helpmsg = 0;my ($i,$j,$h,$k);my $nbus = -1;my $nsw = -1;my $npv = -1;my $npq = -1;my $npl = -1;my $nsh = -1;my $ngen = -1;my $nline = -1;my $ntitle = -1;my $ncom = -1;my $ntw = -1;my $nsvc = -1;my $ndyn = -1;my $pbase;my ($kvb,$kae,$ein,$ang,);my ($swbus,$swsb,$swvs,$swqt, $swqb,$swpg,$swpb,$swpt);my (@plbus,@plip,@pliq,@plyp,@plyq);my (@pqbus,@pqpl,@pqql); my $title = 'Generic SIMPOW Data Format File.';my $pbas = 100;my $fsys = 60;my $format;my @data;my (@bustw1,@bustw2,@bustw3,@x12,@x13,@x23,@r12,@r13,@r23,@rt1a,@rt1b,@rt1c, @rt2a,@rt2b,@rt2c,@rt3a,@rt3b,@rt3c);my (@kvb,@kzo,@kae,@ein,@ang,@bustype, @busidx,@busname,@pload,@qload,@qcap, @qmi,@qma,@bshunt,@title,@pbtf,@lght,@tfsb);my (@pvbus,@pvsb,@pvpg,@pvvs, @pvqt,@pvqb,@pvpt,@pvpb); my (@swidx,@pvidx,@pqidx,@idxsh, @vmax,@vmin,@psh,@qsh);my (@busfr,@bustt);my (@rest,@reat,@susc,@ratea,@rateb, @ratec,@phas,@ratio); my (@idxsvc,@svcbus,@svcbma,@svcbmi, @svcref,@rgn,@rtc);my (@synidx,@pbgen,@mstt,@xd,@xq,@xdp,@xqp,@xdb,@xqb,@xl, @td0p,@td0b,@tq0p,@tq0b,@se1d,@se2d,@se1q,@se2q,@damp,@gbas,@ra);my (%kvbase,%nameidx,%einsch,%genbas); # -----------------------------------------------------------------------# check inputs# -----------------------------------------------------------------------$nargin = @ARGV;$nargin || die "Error: No input data file.\n";# -----------------------------------------------------------------------# check options# -----------------------------------------------------------------------while ($ARGV[0] =~ /^-/) { if ($ARGV[0] =~ /v/) {$verbose = 1;} if ($ARGV[0] =~ /h/) {$helpmsg = 1;} shift(@ARGV); $nargin--; if ($nargin == 0) { last; }}$title = 'Generic SIMPOW Data Format File '.$ARGV[0];# -----------------------------------------------------------------------# help (if requested)# -----------------------------------------------------------------------if ($helpmsg) { print "\nSIMPOW2PSAT converts SIMPOW data files into PSAT data files.\n\n"; print "psse2psat <options> fileinput <fileoutput>\n"; print " -v verbose\n"; print " -h print this help and exit\n\n"; print "Author: Juan Carlos Morataya\n"; print "Date: 14-Nov-2005\n"; print "Version: 1.0.0\n\n"; print "E-mail: jmorataya\@eegsa.net\n"; die "\n";}# -----------------------------------------------------------------------# define output file name (if necessary)# -----------------------------------------------------------------------if ($nargin == 1) { $ARGV[1] = $ARGV[0]; $ARGV[1] =~ s/^d*_*/d_/; $ARGV[1] =~ s/[^\w\.]/_/g; $ARGV[1] =~ s/\..+$/.m/;} elsif ($nargin == 0) { die "Error: Input file name is missing.\n";}# -----------------------------------------------------------------------# open OPTPOW data file# -----------------------------------------------------------------------print "Opening OPTPOW/SIMPOW file \"$ARGV[0]\"...\n";carret();open(IN,$ARGV[0]) || die "cannot open $ARGV[0]: $!\n";# -----------------------------------------------------------------------# scan input data file# -----------------------------------------------------------------------# read commentswhile (<IN>) { chomp; last if /^\*/; $ntitle++; $title[$ntitle] = $_;}# read general datawhile (<IN>) { chomp; last if /^END/; if (/SN/) { $pbase = assign($_,'SN',2,100); } if (/LBASE/) { $pbas = assign($_,'LBASE',5,100); }}# read bus datawhile (<IN>) { chomp; next if /^!/; next if /^NODES/; last if /^END/; @data = splitdata($_); $nbus++; $busidx[$nbus] = $nbus+1; $busname[$nbus] = $data[1]; $kvb[$nbus] = assign($_,'VOLT',4,1); $kzo[$nbus] = assign($_,'AREA',4,1); $kvbase{$busname[$nbus]} = $kvb[$nbus]; $kvbase{$busidx[$nbus]} = $kvb[$nbus]; $nameidx{$busname[$nbus]} = $busidx[$nbus];}# read line datawhile (<IN>) { chomp; next if /^!/; next if /^LINES/; last if /^END/; @data = splitdata($_); $nline++; $busfr[$nline] = $data[1]; $bustt[$nline] = $data[2]; $lght[$nline] = assign($_,'LENGTH',6,1); $rest[$nline] = $lght[$nline] * abs(assign($_,'REST',4,0)); $reat[$nline] = $lght[$nline] * abs(assign($_,'REAC',4,0)); $susc[$nline] = $lght[$nline] * abs(assign($_,'SUSC',4,0));}# read transformer datawhile (<IN>) { chomp; next if /^!/; next if /^TRANSFORMERS/; last if /^END/; @data = splitdata($_); $nline++; $busfr[$nline] = $data[1]; $bustt[$nline] = $data[2]; $tfsb[$nline] = assign($_,'SN',2,100); $rest[$nline] = abs(assign($_,'ER12',4,0)); $reat[$nline] = abs(assign($_,'EX12',4,0));}# read shunts datawhile (<IN>) { chomp; next if /^!/; next if /^SHUNT/; last if /^END/; @data = splitdata($_); $nsh++; $idxsh[$nsh] = $data[1]; $psh[$nsh] = -assign($_,'QPOW',4,0)/$pbas;}# read load datawhile (<IN>) { chomp; next if /^!/; next if /^LOAD/; last if /^END/; @data = splitdata($_); $j = pqidx($nameidx{$data[1]}); if ($j >= 0) { # add powers if there are multiple # PQ loads at the same bus $pqpl[$j] += assign($_,'PPOW',4,0)/$pbas; $pqql[$j] += assign($_,'QPOW',4,0)/$pbas; } else { $npq++; $pqbus[$npq] = $nameidx{$data[1]}; $pqpl[$npq] = assign($_,'PPOW',4,0)/$pbas; $pqql[$npq] = assign($_,'QPOW',4,0)/$pbas; }}# read power directions datawhile (<IN>) { chomp; next if /^!/; next if /^POWER/; last if /^END/; @data = splitdata($_); $ngen++; $bustype[$ngen] = assign($_,'R',3,0); if ($bustype[$ngen] == 1) { $nsw++; $swbus = $nameidx{$data[1]}; $swsb = $pbas; $swpg = assign($_,'PPOW',4,0)/$swsb; $swqt = assign($_,'QMIN',4,-999.99); $swqb = assign($_,'QMAX',4,999.99); $swvs = assign($_,'V',1,0)/$kvbase{$data[1]}; } elsif ($bustype[$ngen] == 2) { $j = pvidx($nameidx{$data[1]}); if ($j >= 0) { # add powers if there are multiple # PV generators at the same bus $pvpg[$j] += assign($_,'PPOW',4,0)/$pvsb[$npv]; $pvqt[$j] += assign($_,'Qmin',4,-999.99)/$pvsb[$npv]; $pvqb[$j] += assign($_,'Qmax',4,999.99)/$pvsb[$npv]; } else { $npv++; $pvbus[$npv] = $nameidx{$data[1]}; $pvsb[$npv] = $pbas; $pvpg[$npv] = assign($_,'PPOW',4,0)/$pvsb[$npv]; $pvqt[$npv] = assign($_,'QMIN',4,-999.99/$pvsb[$npv]); $pvqb[$npv] = assign($_,'QMAX',4,999.99)/$pvsb[$npv]; $pvvs[$npv] = assign($_,'V',1,0)/$kvbase{$data[1]}; } } elsif ($bustype[$ngen] == 3) { $j = pvidx($nameidx{$data[1]}); if ($j >= 0) { # add powers if there are multiple # PV generators at the same bus $pvpg[$j] += assign($_,'PPOW',4,0)/$pvsb[$npv]; $pvqt[$j] += assign($_,'Qmin',4,-999.99)/$pvsb[$npv]; $pvqb[$j] += assign($_,'Qmax',4,999.99)/$pvsb[$npv]; } else { $npv++; $pvbus[$npv] = $nameidx{$data[1]}; $pvsb[$npv] = $pbas; $pvpg[$npv] = assign($_,'PPOW',4,0)/$pvsb[$npv]; $pvqt[$npv] = assign($_,'QMIN',4,-999.99/$pvsb[$npv]); $pvqb[$npv] = assign($_,'QMAX',4,999.99)/$pvsb[$npv]; $pvvs[$npv] = 1; } } }# -----------------------------------------------------------------------# close OPTPOW data file# -----------------------------------------------------------------------close(IN) || die "cannot close $ARGV[0]: $!\n";# -----------------------------------------------------------------------# open DYNPOW/SIMPOW data file# -----------------------------------------------------------------------$ARGV[0] =~ s/\.optpow$/\.dynpow/;print "Opening DYMPOW/SIMPOW file \"$ARGV[0]\"...\n";carret();open(IN,$ARGV[0]) || die "cannot open $ARGV[0]: $!\n";# -----------------------------------------------------------------------# scan input data file# -----------------------------------------------------------------------# read commentswhile (<IN>) { chomp; last if /^\*/; $ntitle++; $title[$ntitle] = $_;} # read control datawhile (<IN>) { chomp; next if /^CONTROL/; last if /^END/;}# read general datawhile (<IN>) { chomp; next if /^GENERAL/; last if /^END/; $fsys = assign($_,'FN',2,0,3);}# read dynamic synchronous machine datawhile (<IN>) { chomp; next if /^!/; next if /^SYNCH/; last if /^END/; @data = splitdata($_); # read first line $ndyn++; $synidx[$ndyn] = $data[1]; $xd[$ndyn] = assign($_,'XD',5,1.9); $xq[$ndyn] = assign($_,'XQ',5,1.7); $xl[$ndyn] = assign($_,'XA',2,0); $xdp[$ndyn] = assign($_,'XDP',6,0.302); $xqp[$ndyn] = assign($_,'XQP',5,0.50); # read second line $_ = <IN>; chomp; #print "$_\n"; $xdb[$ndyn] = assign($_,'XDS',3,0.204); $xqb[$ndyn] = assign($_,'XQS',3,0.30); $ra[$ndyn] = assign($_,'RA',2,1); $td0p[$ndyn] = assign($_,'TD0P',12,8); $tq0p[$ndyn] = assign($_,'TQ0P',12,0.8); $td0b[$ndyn] = assign($_,'TD0S',4,0.04); $tq0b[$ndyn] = assign($_,'TQ0S',4,0.02);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -