📄 pwrworld2psat
字号:
if ($data[$index{"LineStatus"}] ne "Closed") {next;} $nline++; $busfr[$nline] = $data[$index{"BusNum"}]; $busto[$nline] = $data[$index{"BusNum:1"}]; $kvbase[$nline] = $vn[$busnumb{$data[$index{"BusNum"}]}]; $kt[$nline] = $vn[$busnumb{$data[$index{"BusNum"}]}] / $vn[$busnumb{$data[$index{"BusNum:1"}]}]; $rest[$nline] = $data[$index{"LineR"}]; $reat[$nline] = $data[$index{"LineX"}]; $susc[$nline] = $data[$index{"LineC"}]; $tap[$nline] = $data[$index{"LineTap"}]; $phi[$nline] = 0.01745329251994*$data[$index{"LinePhase"}]; $iijmax[$nline] = $data[$index{"LineAMVA"}]/100; if ($index{"LineBMVA"}) { $pijmax[$nline] = $data[$index{"LineBMVA"}]/100; } else { $pijmax[$nline] = 0; } if ($index{"LineCMVA"}) { $sijmax[$nline] = $data[$index{"LineCMVA"}]/100; } else { $sijmax[$nline] = 0; } if (1*$data[$index{"LineShuntMW"}] || 1*$data[$index{"LineShuntMVR"}]) { $nsh++; $shidx[$nsh] = $data[$index{"BusNum"}]; $kvsh[$nsh] = $vn[$busnumb{$data[$index{"BusNum"}]}]; $gsh[$nsh] = $data[$index{"LineShuntMW"}]/100; $bsh[$nsh] = $data[$index{"LineShuntMVR"}]/100; } if (1*$data[$index{"LineShuntMW:1"}] || 1*$data[$index{"LineShuntMVR:1"}]) { $nsh++; $shidx[$nsh] = $data[$index{"BusNum:1"}]; $kvsh[$nsh] = $vn[$busnumb{$data[$index{"BusNum:1"}]}]; $gsh[$nsh] = $data[$index{"LineShuntMW:1"}]/100; $bsh[$nsh] = $data[$index{"LineShuntMVR:1"}]/100; } } } }# -----------------------------------------------------------------------# close AUX data file# -----------------------------------------------------------------------close(IN) || die "cannot close $ARGV[0]: $!\n";# -----------------------------------------------------------------------# open output data file# -----------------------------------------------------------------------print "Writing PSAT file \"$ARGV[1]\"...\n";carret();open(OUT,">$ARGV[1]") || die "cannot open $ARGV[1]: $!\n";# -----------------------------------------------------------------------# write output data file# -----------------------------------------------------------------------print OUT "% File generated by PSAT from POWERWORLD data file.\n";print OUT "% "."-" x 78 . "\n";print OUT "% Author: Federico Milano\n";print OUT "% E-mail: fmilano\@thunderbox.uwaterloo.ca\n";print OUT "% Web-site: http://thunderbox.uwaterloo.ca/~fmilano\n";print OUT "% "."-" x 78 . "\n";print OUT "% $title1\n";print OUT "% $title2\n\n";# -----------------------------------------------------------------------# write Bus.con# -----------------------------------------------------------------------$format = "%4d %8.2f %8.5f %8.5f %4d %4d;\n";$nbus >= 0 && print OUT "Bus.con = [ ...\n";for ($i = 0; $i <= $nbus; $i++) { printf OUT $format,$busidx[$i],$vn[$i],$ein[$i],$ang[$i], $area[$i],$zone[$i];}$nbus >= 0 && printf OUT " ];\n\n";# -----------------------------------------------------------------------# write SW.con# -----------------------------------------------------------------------$nsw >= 0 && print OUT "SW.con = [ ...\n";$format = "%4d $pbas %8.2f %8.5f 0 " . "%8.5f " x 5 . " 1];\n\n";$h = $busnumb{$slack};$nsw >= 0 && printf OUT $format,$slack,$vn[$h], $swvolt,$swqmax,$swqmin,$vmax[$h],$vmin[$h],$swpgen;# -----------------------------------------------------------------------# write PV.con# -----------------------------------------------------------------------$npv >= 0 && print OUT "PV.con = [ ...\n";$format = "%4d %8.2f %8.2f " . "%8.5f " x 6 . " 1;\n";for ($i = 0; $i <= $npv; $i++) { $h = $busnumb{$pvidx[$i]}; printf OUT $format,$pvidx[$i],$pvbase[$i],$vn[$h], $pgen[$i],$volt[$i],$qmax[$i],$qmin[$i],$vmax[$h],$vmin[$h];}$npv >= 0 && printf OUT " ];\n\n";# -----------------------------------------------------------------------# write Supply.con# -----------------------------------------------------------------------$nsupply >= 0 && print OUT "Supply.con = [ ...\n";$format = "%4d %8.2f 0 %8.5f %8.5f 0 %8.5f %8.5f %8.5f 0 0 0 0 0;\n";for ($i = 0; $i <= $nsupply; $i++) { printf OUT $format,$supply[$i],$subase[$i], $pmax[$i],$pmin[$i],$c0[$i],$c1[$i],$c2[$i];}$nsupply >= 0 && printf OUT " ];\n\n";# -----------------------------------------------------------------------# write PQ.con# -----------------------------------------------------------------------$npq >= 0 && print OUT "PQ.con = [ ...\n";$format = "%4d $pbas %8.2f %8.5f %8.5f %8.5f %8.5f 0;\n";for ($i = 0; $i <= $npq; $i++) { $h = $busnumb{$pqidx[$i]}; printf OUT $format,$pqidx[$i],$vn[$h], $sa0[$i],$sr0[$i],$vmax[$h],$vmin[$h];}$npq >= 0 && printf OUT " ];\n\n";# -----------------------------------------------------------------------# write Pl.con# -----------------------------------------------------------------------$npl >= 0 && print OUT "Pl.con = [ ...\n";$format = "%4d $pbas %8.2f 60 %8.5f %8.5f 0 %8.5f %8.5f 0 0'\n";for ($i = 0; $i <= $npl; $i++) { $h = $busnumb{$plidx[$i]}; printf OUT $format, $plidx[$i],$vn[$h], $za0[$i],$ia0[$i],$zr0[$i],$ir0[$i];}$npl >= 0 && printf OUT " ];\n\n";# -----------------------------------------------------------------------# write Shunt.con# -----------------------------------------------------------------------$nsh >= 0 && print OUT "Shunt.con = [ ...\n";$format = "%4d $pbas %8.2f 60 %8.5f %8.5f;\n";for ($i = 0; $i <= $nsh; $i++) { printf OUT $format, $shidx[$i],$kvsh[$i],$gsh[$i],$bsh[$i];}$h = $nsh;$nsh >= 0 && printf OUT " ];\n\n";# -----------------------------------------------------------------------# write Line.con# -----------------------------------------------------------------------$nline >= 0 && print OUT "Line.con = [ ...\n";$format = "%4d %4d $pbas %8.2f 60 0 %7.4f " . "%8.5f " x 5 . "%8.3f %8.3f %8.3f;\n";for ($i = 0; $i <= $nline; $i++) { printf OUT $format,$busfr[$i],$busto[$i], $kvbase[$i],$kt[$i],$rest[$i],$reat[$i],$susc[$i],$tap[$i], $phi[$i],$iijmax[$i],$pijmax[$i],$sijmax[$i];}$i = $nline;$nline >= 0 && printf OUT " ];\n\n";# -----------------------------------------------------------------------# write bus names# -----------------------------------------------------------------------$nbus >= 0 && print OUT "Bus.names = { ...\n";$h = ($nbus+1) % 5;if ($h == 0) {$h = 5;}if (($nbus+1) > 5) { for ($i = 0; $i <= $nbus-$h; $i+=5) { print OUT " '$busname{$i}'; '$busname{$i+1}'; " . "'$busname{$i+2}'; '$busname{$i+3}'; '$busname{$i+4}';\n"; }}print OUT " ";for ($i = $nbus-$h+1; $i <= $nbus-1; $i++) { print OUT "'$busname{$i}'; ";}print OUT "'$busname{$nbus}'};\n\n";# -----------------------------------------------------------------------# close output data file# -----------------------------------------------------------------------close(OUT) || die "cannot close $ARGV[1]: $!\n";print "Conversion completed.\n";# -----------------------------------------------------------------------# function for formatting data and/or assigning default values# -----------------------------------------------------------------------sub assign { my $param; $param = substr($_[0],$_[1],$_[2]); $param =~ s/\s*//g; unless ($param) {$param = "0";} #$param =~ s/^0*\.0*//; unless ($param =~ /[1-9]/) {$param = $_[3];} return $param;}# -----------------------------------------------------------------------# function for formatting data and/or assigning default values# -----------------------------------------------------------------------sub deblank { my $name = $_[0]; $name =~ s/( *)$//; return $name;}# -----------------------------------------------------------------------# function for writing a separator# -----------------------------------------------------------------------sub carret { $verbose && print "-" x 50 . "\n";}# -----------------------------------------------------------------------# function for scanning the file up to the data entries# -----------------------------------------------------------------------sub scanfile { my $tag = "DATA \\(" . $_[0] . ", \\["; my @names; my $numidx = -1; my %index; $_ =~ s/$tag//; $_ =~ s/\]\)//; $_ =~ s/\s*//g; @names = split(","); foreach (@names) { $numidx++; $index{$_} = $numidx; } while (<IN>) { if (m/^\{/) {last;} $_ =~ s/$tag//; $_ =~ s/\]\)//; $_ =~ s/\s*//g; @names = split(","); foreach (@names) { $numidx++; $index{$_} = $numidx; } } return %index;}# -----------------------------------------------------------------------# function splitting data# -----------------------------------------------------------------------sub splitdata { my $nn = 0; my @localdata; $nn = 0; while ($_[0]) { $_[0] =~ s/\s*-?\d+[\.,]?\d*\s*|\s*\".*?\"\s*//; $localdata[$nn] = $&; $localdata[$nn] =~ s/^\s*\"?//; $localdata[$nn] =~ s/,/\./; $localdata[$nn] =~ s/\s*\"?\s*$//; $nn++; if ($nn > 100) {die "Bad input string (infinite regexp loop...)";} } return @localdata;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -