📄 ieee2psat
字号:
}# -----------------------------------------------------------------------# scan interchange data# -----------------------------------------------------------------------if (/^INTERCHANGE/) { while (<IN>) { if (/^-9/) {last;} chomp; $_ = $_ . $blanks; $narea++; $areanum[$narea] = assign($_,0,3,1); $areaname[$narea] = deblank(assign($_,37,10,"Region " . $areanum[$narea])); $areaname[$narea] =~ s/\'/\'\'/g; $areaslack[$narea] = assign($_,3,5,0); $areaexp[$narea] = assign($_,20,8,0)/$pbas; $areatol[$narea] = assign($_,29,6,0)/$pbas; $verbose && printf("Found Region %4d: %2d\n",$narea+1,$areanum[$narea]); } $_ = <IN>;} else { print "No Interchange Data found.";}# -----------------------------------------------------------------------# scan tie lines# -----------------------------------------------------------------------if (/^TIE/) { print "TIE LINES are not defined in PSAT and will be neglected.\n"; while (<IN>) { if (/^-9/) {last;} }}# -----------------------------------------------------------------------# close input 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 IEEE/CDF 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 "% $title\n\n";# -----------------------------------------------------------------------# write Bus.con# -----------------------------------------------------------------------if ($nbus >= 0) { print OUT "Bus.con = [ ...\n"; $format = "%4d %7.2f %8.5f %8.5f %2d %2d;\n"; for ($i = 0; $i <= $nbus; $i++) { printf OUT $format,$busidx[$i],$kvb[$i],$ein[$i],$ang[$i], $kzone[$i],$karea[$i]; } printf OUT " ];\n\n";}# -----------------------------------------------------------------------# write SW.con# -----------------------------------------------------------------------if ($nsw >= 0) { print OUT "SW.con = [ ...\n"; $format = "%4d $pbas %6.2f " . "%8.5f " x 4 . "1.1 0.9 %8.5f 1 1 1;\n"; for ($i = 0; $i <= $nsw; $i++) { $h = $idxsw[$i]; printf OUT $format,$busidx[$h],$kvb[$h],$ein[$h],$ang[$h], $qma[$h],$qmi[$h],$pag[$h]; } printf OUT " ];\n\n";}# -----------------------------------------------------------------------# write PV.con# -----------------------------------------------------------------------if ($npv >= 0) { print OUT "PV.con = [ ...\n"; $format = "%4d $pbas %6.2f " . "%8.5f " x 4 . "1.1 0.9 1 %2d;\n"; for ($i = 0; $i <= $npv; $i++) { $h = $idxpv[$i]; printf OUT $format,$busidx[$h],$kvb[$h],$pag[$h],$ein[$h], $qma[$h],$qmi[$h],$status[$h]; } printf OUT " ];\n\n";}# -----------------------------------------------------------------------# write PQ.con# -----------------------------------------------------------------------if ($npq >= 0) { print OUT "PQ.con = [ ...\n"; $format = "%4d $pbas %6.2f %8.5f %8.5f 1.1 0.9 1 %2d;\n"; for ($i = 0; $i <= $npq; $i++) { $h = $idxpq[$i]; printf OUT $format, $busidx[$h],$kvb[$h],$pac[$h],$prc[$h],$status[$h]; } printf OUT " ];\n\n";}# -----------------------------------------------------------------------# write Shunt.con# -----------------------------------------------------------------------if ($nsh >= 0) { print OUT "Shunt.con = [ ...\n"; $format = "%4d $pbas %6.2f 60 %8.5f %8.5f %2d;\n"; for ($i = 0; $i <= $nsh; $i++) { $h = $idxsh[$i]; printf OUT $format, $busidx[$h],$kvb[$h],$psh[$h],$qsh[$h],$status[$h]; } printf OUT " ];\n\n";}# -----------------------------------------------------------------------# write Line.con# -----------------------------------------------------------------------if ($nline >= 0) { print OUT "Line.con = [ ...\n"; $format = "%4d %4d %7.2f %6.2f 60 0 %8.4f " . "%8.5f " x 5 . "0 %8.3f %8.3f %2d;\n"; for ($i = 0; $i <= $nline; $i++) { $k = $kvbase{$busfr[$i]}/$kvbase{$busto[$i]}; if ($k == 1) {$k = 0;} printf OUT $format, $busfr[$i],$busto[$i],$pbas, $kvbase{$busfr[$i]},$k,$rest[$i],$reat[$i],$susc[$i],$tfas[$i], $phsf[$i],$cano[$i],$caem[$i],$linestatus[$i]; } printf OUT " ];\n\n";}# -----------------------------------------------------------------------# write Areas.con# -----------------------------------------------------------------------if ($nzone >= 0) { print OUT "Areas.con = [ ...\n"; $format = "%4d 0 $pbas 0 0 0 0 0;\n"; for ($i = 0; $i <= $nzone; $i++) { printf OUT $format, $zonenum[$i]; } printf OUT " ];\n\n"; }# -----------------------------------------------------------------------# write Region.con# -----------------------------------------------------------------------if ($narea >= 0) { print OUT "Regions.con = [ ...\n"; $format = "%4d %4d $pbas %8.5f %8.5f 0 0 0;\n"; for ($i = 0; $i <= $narea; $i++) { printf OUT $format, $areanum[$i],$areaslack[$i], $areaexp[$i],$areatol[$i]; } 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";# -----------------------------------------------------------------------# write area names# -----------------------------------------------------------------------$nzone >= 0 && print OUT "Areas.names = { ...\n";for ($i = 0; $i <= $nzone-1; $i++) { print OUT " '$zonename[$i]';\n";}$nzone >= 0 && print OUT " '$zonename[$nzone]'};\n\n";# -----------------------------------------------------------------------# write region names# -----------------------------------------------------------------------$narea >= 0 && print OUT "Regions.names = { ...\n";for ($i = 0; $i <= $narea-1; $i++) { print OUT " '$areaname[$i]';\n";}$narea >= 0 && print OUT " '$areaname[$narea]'};\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; if ($param eq "") { $param = $_[3]; } return $param;}# -----------------------------------------------------------------------# function for determining if the line is close# -----------------------------------------------------------------------sub openline { my @mydata = split /\s+/, $_[0]; $_[0] =~ s/\s+$//; if (length($_[0]) > 130) { if ($mydata[-1] > 1) { return 1; } else { return $mydata[-1]; } } else { return 1; }}# -----------------------------------------------------------------------# 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";}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -