📄 psse2psat
字号:
# -----------------------------------------------------------------------# write SW.con# -----------------------------------------------------------------------if ($nsw >= 0) { print OUT "SW.con = [ ...\n"; $format = "%4d %7.2f %6.2f %8.5f 0.00 %8.5f %8.5f 1.1 0.9 %8.5f 1];\n\n"; printf OUT $format,$swbus,$swsb,$kvbase{$swbus},$swvs,$swqt,$swqb,$swpg;}# -----------------------------------------------------------------------# write PV.con# -----------------------------------------------------------------------if ($npv >= 0) { printf OUT "PV.con = [ ...\n"; $format = "%4d %7.2f %6.2f " . "%8.5f " x 4 . "1.1 0.9 1 %2d;\n"; for ($i = 0; $i <= $npv; $i++) { printf OUT $format,$pvbus[$i],$pvsb[$i],$kvbase{$pvbus[$i]}, $pvpg[$i],$pvvs[$i],$pvqt[$i],$pvqb[$i],$pvu[$i]; } print OUT " ];\n\n";}# -----------------------------------------------------------------------# write PQ.con# -----------------------------------------------------------------------if ($npq >= 0) { printf OUT "PQ.con = [ ...\n"; $format = "%4d %7.2f %8.2f %8.5f %8.5f 1.1 0.9 1 %2d;\n"; for ($i = 0; $i <= $npq; $i++) { $h = $pqbus[$i]; printf OUT $format,$h,$pbas,$kvbase{$h},$pqpl[$i],$pqql[$i],$pqu[$i]; } print OUT " ];\n\n";}# -----------------------------------------------------------------------# write Pl.con# -----------------------------------------------------------------------if ($npl >= 0) { print OUT "Pl.con = [ ...\n"; $format = "%4d %7.2f %8.2f 60 %8.5f %8.5f 0 %8.5f %8.5f 0 0 %2d;\n"; for ($i = 0; $i <= $npl; $i++) { printf OUT $format,$plbus[$i],$pbas,$kvbase{$plbus[$i]},$plyp[$i], $plip[$i],$plyq[$i],$pliq[$i],$plu[$i]; } print OUT " ];\n\n";}# -----------------------------------------------------------------------# write Shunt.con# -----------------------------------------------------------------------if ($nsh >= 0) { print OUT "Shunt.con = [ ...\n"; $format = "%4d %7.2f %8.2f 60 %8.5f %8.5f %2d;\n"; for ($i = 0; $i <= $nsh; $i++) { $h = abs($idxsh[$i]); printf OUT $format,$h,$pbas,$kvbase{$h},$psh[$i],$qsh[$i],$shu[$i]; } print OUT " ];\n\n";}# -----------------------------------------------------------------------# write Line.con# -----------------------------------------------------------------------if ($nline >= 0) { print OUT "Line.con = [ ...\n"; $format = "%4d %4d %8.2f %8.2f 60 0 %5.2f " . "%8.5f " x 5 . " %8.3f %8.3f %8.3f %2d;\n"; for ($i = 0; $i <= $nline; $i++) { if ($busidw{$bustt[$i]}) { if ($kvbase{$bustt[$i]} != 0) { $k = $kvbase{$busfr[$i]}/$kvbase{$bustt[$i]}; } else { $k = 0; print "WARNING: Check voltage rating of bus ".$busidw{$bustt[$i]}."\n"; } if ($k == 1) { $k = 0; } #if ($stt[$i] == 1) { # $stt = ' '; #} else { # $stt = '%'; #} printf OUT $format,$busfr[$i],$bustt[$i],$lbas[$i], $kvbase{$busfr[$i]},$k,$rest[$i],$reat[$i],$susc[$i],$ratio[$i],$phas[$i], $ratea[$i],$rateb[$i],$ratec[$i],$stt[$i]; } else { print "WARNING: Bus ".$bustt[$i]." does not exists -> Line ".$i." ignored.\n"; } } print OUT " ];\n\n";}# -----------------------------------------------------------------------# write Ltc.con# -----------------------------------------------------------------------if ($nltc >= 0) { print OUT "Ltc.con = [ ...\n"; $format = "%4d %4d %8.2f %8.2f 60 1 0.001 0.1 " . "%8.5f " x 6 . " %4d %4d %2d;\n"; for ($i = 0; $i <= $nltc; $i++) { printf OUT $format,$ltc_busfr[$i],$ltc_busto[$i],$ltc_bas[$i], $kvbase{$ltc_busfr[$i]},$ltc_vma[$i],$ltc_vmi[$i],$ltc_dm[$i], $ltc_ref[$i],$ltc_x[$i],$ltc_r[$i],$ltc_busct[$i],$ltc_ctr[$i],$ltcu[$i]; } print OUT " ];\n\n";}# -----------------------------------------------------------------------# write Phs.con# -----------------------------------------------------------------------if ($nphs >= 0) { print OUT "Phs.con = [ ...\n"; $format = "%4d %4d %8.2f %8.2f %8.2f 60 0.001 10 50 %2d" . "%8.5f " x 5 . ";\n"; for ($i = 0; $i <= $nphs; $i++) { printf OUT $format,$phs_busfr[$i],$phs_busto[$i],$phs_bas[$i], $kvbase{$ltc_busfr[$i]},$kvbase{$ltc_busto[$i]},$phs_ref[$i], $phs_r[$i],$phs_x[$i],$phs_vma[$i],$phs_vmi[$i],$phsu[$i]; } print OUT " ];\n\n";}# -----------------------------------------------------------------------# write Twt.con# -----------------------------------------------------------------------if ($flag_version == V29 && $ntw >= 0) { print OUT "Twt.con = [ ...\n"; $format = "%4d %4d %4d $pbas 60 %5.2f %5.2f %5.2f " . "%8.5f " x 6 . " 1 " . "%7.3f " x 9 . " %2d;\n"; for ($i = 0; $i <= $ntw; $i++) { #if ($twu[$i] == 1) { # $twu = ' '; #} else { # $twu = '%'; #} printf OUT $format,$bustw1[$i],$bustw2[$i],$bustw3[$i], $kvbase{$bustw1[$i]},$kvbase{$bustw2[$i]},$kvbase{$bustw3[$i]}, $r12[$i],$r13[$i],$r23[$i],$x12[$i],$x13[$i],$x23[$i], $rt1a[$i],$rt1b[$i],$rt1c[$i],$rt2a[$i],$rt2b[$i],$rt2c[$i], $rt3a[$i],$rt3b[$i],$rt3c[$i],$twu[$i]; } print OUT " ];\n\n";}# -----------------------------------------------------------------------# write Svc.con# -----------------------------------------------------------------------if ($nsvc >= 0) { print OUT "Svc.con = [ ...\n"; $format = "%4d $pbas %8.2f 60 1 1 10 " . "%8.5f " x 3 . ";\n"; for ($i = 0; $i <= $nsvc; $i++) { printf OUT $format,$svcbus[$i],$kvbase{$svcbus[$i]}, $svcref[$i],$svcbma[$i],$svcbmi[$i]; } print OUT " ];\n\n";}# -----------------------------------------------------------------------# write Areas.con# -----------------------------------------------------------------------if ($narea >= 0) { print OUT "Areas.con = [ ...\n"; $format = "%4d %5d $pbas %8.5f %8.5f 0;\n"; for ($i = 0; $i <= $narea; $i++) { printf OUT $format,$areaidx[$i],$areabus[$i], $areapdes[$i],$areaptol[$i]; } print OUT " ];\n\n";}# -----------------------------------------------------------------------# write Regions.con# -----------------------------------------------------------------------if ($nzone >= 0) { print OUT "Regions.con = [ ...\n"; $format = "%4d 0 $pbas 0 0 0;\n"; for ($i = 0; $i <= $nzone; $i++) { printf OUT $format,$zoneidx[$i]; } print OUT " ];\n\n";}# -----------------------------------------------------------------------# write component names# -----------------------------------------------------------------------writenames($nbus,'Bus',\@busname);writenames($narea,'Areas',\@areaname);writenames($nzone,'Regions',\@zonename);# -----------------------------------------------------------------------# close output data file# -----------------------------------------------------------------------close(OUT) || die "cannot close $ARGV[1]: $!\n";print "Conversion completed assuming PSS/E V". $flag_version ." data format.\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";} 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 reading comma separated data# -----------------------------------------------------------------------sub mysplit { my $data = $_; my $string = $_[0]; $_[0] =~ s/\'(.*)\'//; my $string1 = $&; #print $string1 . "\n"; if ($string1) { my $string0 = $string1; $string1 =~ s/\//-/g; $string =~ s/$string0/$string1/; } $string =~ s/\/(.*)//; if ($data =~ /\s*,\s*/) { # this is to parse line data in PSS/E V23 to V26 formats if (/,,,/) { if ($V26_up == 0) { $string =~ s/,,,/ /; my @mydata = split /\s+/, $string; if ($mydata[0] eq "") { shift(@mydata); } return @mydata; } else { # this is to parse line data in PSS/E V26 format $string =~ s/,,,/,/; $string =~ s/\s*//g; my @mydata = split /,/, $string; if ($mydata[0] eq "") { shift(@mydata); } return @mydata; } } # this is to parse data in PSS/E V27 to V30 formats my @mydata = split /\s*,\s*/, $string; if ($mydata[0] eq "") { shift(@mydata); } return @mydata; } elsif ($data =~ /\s+/) { $string =~ s/\'//g; my @mydata = split /\s+/, $string; if ($mydata[0] eq "") { shift(@mydata); } return @mydata; } }sub mysplitdata { my $nn = 0; my @localdata; $_[0] =~ s/://g; $_[0] =~ s/,//g; $_[0] =~ s/\///g; last if /^\s*0/; $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;}# -----------------------------------------------------------------------# function for finding multiple PV generators at the same bus# -----------------------------------------------------------------------sub pvidx { my $mypvbus = $_[0]; my $check = -1; for ($i = 0; $i <= $npv; $i++) { if ($pvbus[$i] == $mypvbus) { $check = $i; last; } } return $check;}# -----------------------------------------------------------------------# function for determining if the bus is isolated# -----------------------------------------------------------------------sub ididx { my $myisbus = $_[0]; my $check = 1; for ($i = 0; $i <= $nisl; $i++) { if ($islbus[$i] == $myisbus) { $check = 0; last; } } return $check;}# -----------------------------------------------------------------------# function for detecting extended names# -----------------------------------------------------------------------sub extended { my $input = $_[0]; my $index; if ($input =~ /^\'/) { $input =~ s/^\'-/\'/; if ($flag_version < V30) { $input = substr($input,0,9) . "'"; } else { $input = substr($input,0,13) . "'"; } $index = $extname{$input}; } else { $index = int(abs($input)); } return $index;}# -----------------------------------------------------------------------# function for writing component names# -----------------------------------------------------------------------sub writenames { my $n = $_[0]; my $names = $_[2]; for ($i = 0; $i <= $n; $i++) { $$names[$i] =~ s/\'//g; $$names[$i] = deblank ($$names[$i]); } $n >= 0 && print OUT $_[1] . ".names = { ...\n"; $h = ($n+1) % 5; if ($h == 0) {$h = 5;} if (($n+1) > 5) { for ($i = 0; $i <= $n-$h; $i+=5) { print OUT " '$$names[$i]'; '$$names[$i+1]'; " . "'$$names[$i+2]'; '$$names[$i+3]'; '$$names[$i+4]';\n"; } } print OUT " "; for ($i = $n-$h+1; $i <= $n-1; $i++) { print OUT "'$$names[$i]'; "; } print OUT "'$$names[$n]'};\n\n";}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -