📄 simpow2psat
字号:
$pqpl[$npq] = assign("P",0)/$pbase;
if (exists $data{"Q"}) {
$pqql[$npq] = assign("Q",0)/$pbase;
} else {
$h = assign("COSFI",1);
$j = sqrt(1-$h*$h);
$pqql[$npq] = $j*$pqpl[$npq]/$h;
}
$umin[$npq] = assign("UMIN",0.9);
$umax[$npq] = assign("UMAX",1.1);
$loadstatus[$npq] = status();
$loadno[$npq] = assign("NO",0);
}
} elsif (/^POWER/) {
while ($firstline ne "END") {
%data = splitdata(-1);
if (!$data{"BUS1"}) { print $firstline . "\n"; }
if ($data{"BUS1"} eq "END") { last; }
if (exists $data{"RTYPE"}) { $data{"RTYP"} = $data{"RTYPE"}; }
if ($data{"TYPE"} eq "NODE") {
if ($data{"RTYP"} eq "UP") {
$npv++;
$ngen++;
$pvidx[$npv] = $ngen;
$pvbus[$npv] = $nameidx{$data{"BUS1"}};
$genbus[$ngen] = $pvbus[$npv]+1;
$genname[$ngen] = assign("NAME",$data{"BUS1"});
$pvpg[$npv] = assign("P",0)/$pbase;
$pvqt[$npv] = assign("QMAX",0)/$pbase;
$pvqb[$npv] = assign("QMIN",0)/$pbase;
$pvvs[$npv] = assign("U",0)/$kvb[$pvbus[$npv]];
} elsif ($data{"RTYP"} eq "PQ") {
$npg++;
$ngen++;
$pgidx[$npg] = $ngen;
$pgbus[$npg] = $nameidx{$data{"BUS1"}};
$genbus[$ngen] = $pgbus[$npg]+1;
$genname[$ngen] = assign("NAME",$data{"BUS1"});
$pqpg[$npg] = assign("P",0)/$pbase;
$pqqg[$npg] = assign("Q",0)/$pbase;
} elsif ($data{"RTYP"} eq "SW" || $data{"RTYP"} eq "UFI") {
$nsw++;
$ngen++;
$swidx[$nsw] = $ngen;
$swbus[$nsw] = $nameidx{$data{"BUS1"}};
$genbus[$ngen] = $swbus[$nsw]+1;
$genname[$ngen] = assign("NAME",$data{"BUS1"});
$swpg[$nsw] = assign("P",0)/$pbase;
$swqt[$nsw] = assign("QMAX",0)/$pbase;
$swqb[$nsw] = assign("QMIN",0)/$pbase;
$swvs[$nsw] = assign("U",$kvb[$swbus[$nsw]])/$kvb[$swbus[$nsw]];
$swfi[$nsw] = 0.017453*assign("FI",0);
if ($data{"RTYP"} eq "SW") {
$swtype[$nsw] = 1;
} else {
$swtype[$nsw] = 0;
}
}
} elsif ($data{"TYPE"} eq "CONV") {
$i = $cvidx{$data{"BUS1"}};
if (($data{"RTYP"} eq "I") && $i >= 0) {
$cvtyp[$i] = 1;
$cvio[$i] = assign("IO",0);
} elsif (($data{"RTYP"} eq "U") && $i >= 0) {
$cvtyp[$i] = 2;
$cvio[$i] = assign("UO",0);
}
$cvdi[$i] = assign("DI",0);
$cvamin[$i] = assign("AMIN",0);
$cvgmin[$i] = assign("GMIN",0);
} elsif ($data{"TYPE"} eq "TREG") {
$i = $lineno{$data{"BUS1"}.$data{"BUS2"}.assign("NO",1)};
$h = $i-1;
if (($data{"RTYP"} eq "TAUFI") && $i >= 0) {
$treg[$h] = 1;
if ($tapside[$h] == 1) {
$ratio[$h] = 1/assign("TAU",1);
} else {
$ratio[$h] = assign("TAU",1);
}
$phas[$h] = 0.017453*assign("FI",0);
if (exists $data{"UNT"}) {
$ratio[$h] = $data{"UNT"}/$kvb[$bustt[$h]];
}
} elsif (($data{"RTYP"} eq "UFI") && $i >= 0) {
$treg[$h] = 2;
$linefi[$h] = assign("FI",0);
$linecnode[$h] = $nameidx{assign("CNODE",$data{"BUS2"})};
$linepar[$h] = assign("U",0);
} elsif (($data{"RTYP"} eq "AFI") && $i >= 0) {
$treg[$h] = 3;
$linefi[$h] = assign("FI",0);
$linecnode[$h] = $nameidx{assign("CNODE",$data{"BUS2"})};
$lineconv[$h] = $cvidx{$data{"CONV"}}+1;
$linepar[$h] = assign("ALPHA",0);
} elsif (($data{"RTYP"} eq "GFI") && $i >= 0) {
$treg[$h] = 4;
$linefi[$h] = assign("FI",0);
$linecnode[$h] = $nameidx{assign("CNODE",$data{"BUS2"})};
$lineconv[$h] = $cvidx{$data{"CONV"}}+1;
$linepar[$h] = assign("GAMMA",0);
}
}
}
} elsif (/^COMMANDS/) {
while (defined($_ = shift(@data))) {
chomp;
next if /^!/;
if (/^\$DISABLE/) { discom(); next; }
if (/^\$INCLUDE/) { include(); next; }
if (/^END/) { last; }
$_ =~ s/^\s*//;
if (/^RUN/) { next; }
if (/^ALTER/) {
@alter = split /\%\s*/ , $_;
#print $alter[1] . "\n";
if (/^LINE/) {
} elsif (/^TR2/) {
} elsif (/^TR3/) {
} elsif (/^SHUN/) {
} elsif (/^LOAD/) {
} elsif (/^PROD/) {
} elsif (/^ASYN/) {
}
$_ =~ s/^ALTER\s+//;
#print $_ . "\n";
}
}
}
}
# -----------------------------------------------------------------------
# scan DYNPOW/SIMPOW data file
# -----------------------------------------------------------------------
if (!$dynfile) {
$ARGV[0] =~ s/\.optpow$/\.dynpow/;
$file =~ s/\.optpow$/\.dynpow/;
} else {
($file,$dir) = fileparse($dynfile);
$ARGV[0] = $dynfile;
}
print "Opening SIMPOW-DYNPOW file <$file>\n";
if (open(IN,$ARGV[0]) && !$nodyn) {
@data = <IN>;
close(IN) || die "Cannot close $file: $!\n";
# read comments
while (defined($_ = shift(@data))) {
chomp;
last if /^\*\*/;
if (/^\$DISABLE/) { discom(); next; }
if (/^\$INCLUDE/) { include(); next; }
$ntitle++;
$_ =~ s/^\!+//;
$title[$ntitle] = $_;
}
# read data
while (defined($_ = shift(@data))) {
chomp;
next if /^!/;
if (/^\$DISABLE/) { discom(); }
if (/^\$INCLUDE/) { include(); }
$firstline = "NULL";
if (/^GENERAL/) { # System bases
while ($firstline ne "END") {
%data = splitdata(0);
$fbase = assign("FN",$fbase);
}
} elsif (/^CONTROL/) { # Control data
while ($firstline ne "END") {
%data = splitdata(0);
$symod = assign("SYMOD",$symod);
}
} elsif (/^SYNCHRONOUS/) { # Synchronous machines
while ($firstline ne "END") {
%data = splitdata(2);
$nsyn++;
$synbus[$nsyn] = $nameidx{$data{"BUS2"}};
$gbas[$nsyn] = assign("SN",$pbase);
$pf[$nsyn] = assign("PF",1);
$qf[$nsyn] = assign("QF",1);
$xd[$nsyn] = assign("XD",0);
$xq[$nsyn] = assign("XQ",0);
$xdp[$nsyn] = assign("XDP",0);
$xqp[$nsyn] = assign("XQP",0);
$xdb[$nsyn] = assign("XDB",0);
$xqb[$nsyn] = assign("XQB",0);
$ra[$nsyn] = assign("RA",0);
$xl[$nsyn] = assign("XA",0);
$td0p[$nsyn] = assign("TD0P",0);
$tq0p[$nsyn] = assign("TQ0P",0);
$td0b[$nsyn] = assign("TD0B",0);
$tq0b[$nsyn] = assign("TQ0B",0);
$mstt[$nsyn] = assign("H",5);
$damp[$nsyn] = assign("DAMP",0);
$gentype[$nsyn] = assign("TYPE",2);
$gentype[$nsyn] =~ s/A//;
if ($gentype[$nsyn] == 1) {
$gentype[$nsyn] = 6;
} elsif ($gentype[$nsyn] == 2) {
$gentype[$nsyn] = 4;
} elsif ($gentype[$nsyn] == 4) {
$gentype[$nsyn] = 2;
}
if ($tq0p[$nsyn] == 0) {
$gentype[$nsyn] = 3;
}
$synvreg[$nsyn] = assign("VREG",0);
}
} elsif (/^REGULATORS/) {
while ($firstline ne "END") {
%data = splitdata(1);
$type = assign("TYPE",1);
if ($type eq "1") {
$nexc++;
$exctype[$nexc] = 2;
$exccode[$nexc] = $data{"BUS1"};
$excka[$nexc] = assign("KA",0);
$excta[$nexc] = assign("TA",0);
$excte[$nexc] = assign("TE",0);
$exckf[$nexc] = assign("KF",0);
$exctf[$nexc] = assign("TF",0);
$exctr[$nexc] = assign("TR",0);
$excvrmax[$nexc] = assign("VRMAX",0);
$excvrmin[$nexc] = assign("VRMIN",0);
} else {
#print "Regulator type " . $type . " not supported.\n"
}
}
} # end scan components
}
} elsif ($nodyn) {
print "Force to ignore DYNPOW file.\n";
} else {
print "Cannot open $file: $!\n";
}
# -----------------------------------------------------------------------
# open output data file
# -----------------------------------------------------------------------
print "Writing Matlab file <$outfile>\n";
open(OUT,">$ARGV[1]") || die "cannot open $outfile: $!\n";
# -----------------------------------------------------------------------
# write output data file
# -----------------------------------------------------------------------
print OUT "% File generated from SIMPOW data file.\n";
print OUT "% "."-" x 78 . "\n";
print OUT "% Author: Federico Milano\n";
print OUT "% e-mail: Federico.Milano\@uclm.es\n";
print OUT "% "."-" x 78 . "\n";
print OUT "% $title\n";
for ($i = 0; $i <= $ntitle; $i++) {
print OUT "% $title[$i]\n";
}
print OUT "\n";
# -----------------------------------------------------------------------
# write Bus.con
# -----------------------------------------------------------------------
$format = "%4d %6.2f %7.4f %7.4f %3d %2d;\n";
$nbus >= 0 && print OUT "Bus.con = [ ...\n";
for ($i = 0; $i <= $nbus; $i++) {
printf OUT $format,$i+1,$kvb[$i],$vol[$i],$ang[$i],$karea[$i],$kzone[$i];
}
$nbus >= 0 && printf OUT " ];\n\n";
# -----------------------------------------------------------------------
# write SW.con
# -----------------------------------------------------------------------
$nsw >= 0 && print OUT "SW.con = [ ...\n";
for ($i = 0; $i <= $nsw; $i++) {
$format = "%4d $pbase %6.2f %8.5f %8.5f %8.5f %8.5f 1.1 0.9 %8.5f %2d 1;\n";
$h = $swbus[$i];
printf OUT $format,$h+1,$kvb[$h],$swvs[$i],$swfi[$i],
$swqt[$i],$swqb[$i],$swpg[$i],$swtype[$i];
}
$nsw >= 0 && printf OUT " ];\n\n";
# -----------------------------------------------------------------------
# write PV.con
# -----------------------------------------------------------------------
$npv >= 0 && printf OUT "PV.con = [ ...\n";
$format = "%4d $pbase %6.2f " . "%8.5f " x 4 . "1.1 0.9 1 1;\n";
for ($i = 0; $i <= $npv; $i++) {
$h = $pvbus[$i];
printf OUT $format,$h+1,$kvb[$h],
$pvpg[$i],$pvvs[$i],$pvqt[$i],$pvqb[$i];
}
$npv >= 0 && printf OUT " ];\n\n";
# -----------------------------------------------------------------------
# write PQgen.con
# -----------------------------------------------------------------------
$npg >= 0 && printf OUT "PQgen.con = [ ...\n";
$format = "%4d $pbase %6.2f %8.5f %8.5f 1.1 0.9 1 1;\n";
for ($i = 0; $i <= $npg; $i++) {
$h = $pgbus[$i];
printf OUT $format,$h+1,$kvb[$h],$pqpg[$i],$pqqg[$i];
}
$npg >= 0 && printf OUT " ];\n\n";
# -----------------------------------------------------------------------
# write PQ.con
# -----------------------------------------------------------------------
$npq >= 0 && printf OUT "PQ.con = [ ...\n";
$format = "%4d $pbase %6.2f %8.5f %8.5f %7.4f %7.4f 1 %2d;\n";
for ($i = 0; $i <= $npq; $i++) {
$h = $pqbus[$i];
printf OUT $format,$h+1,$kvb[$h],$pqpl[$i],$pqql[$i],
$umax[$i],$umin[$i],$loadstatus[$i];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -