📄 psse2psat
字号:
$stt[$nline] = $data[15]; print $ratio[$nline] . "\n"; } } else { $ratio[$nline] = 0; # additional shunt admittance at "from" bus if ($data[9] != 0 || $data[10] != 0) { $nsh++; $idxsh[$nsh] = extended($data[0]); $psh[$nsh] = $data[9]; $qsh[$nsh] = $data[10]; $shu[$nsh] = ididx($idxsh[$nsh]); } # additional shunt admittance at "to" bus if ($data[11] != 0 || $data[12] != 0) { $nsh++; $idxsh[$nsh] = extended($data[1]); $psh[$nsh] = $data[11]; $qsh[$nsh] = $data[12]; $shu[$nsh] = ididx($idxsh[$nsh]); } }} # transformer data PSS/E V29 and V30my (@data1,@data2,@data3,@data4,@data5);my (@bustw1,@bustw2,@bustw3,@twu);my ($ntw,$three_winding);my (@r12,@r23,@r13,@x12,@x23,@x13,@rt1a,@rt1b,@rt1c, @rt2a,@rt2b,@rt2c,@rt3a,@rt3b,@rt3c);my ($nltc,@ltc_busfr,@ltc_busto,@ltc_busct,@ltc_r,@ltc_dm, @ltc_x,@ltc_bas,@ltc_vma,@ltc_vmi,@ltc_ctr,@ltc_ref,@ltcu);my ($nphs,@phs_busfr,@phs_busto,@phs_r,@phs_x,@phs_bas, @phs_vma,@phs_vmi,@phs_ref,@phsu);$ntw = -1;$nltc = -1;$nphs = -1;while ($flag_version >= V29) { # read first line $three_winding = 0; $_ = <IN>; chomp; @data1 = mysplit($_); # check for end of transformer data if (extended($data1[0]) == 0) { last; } # read second line $_ = <IN>; chomp; @data2 = mysplit($_); # read third line $_ = <IN>; chomp; @data3 = mysplit($_); # read fourth line $_ = <IN>; chomp; @data4 = mysplit($_); # check for three-winding transformers if (int($data1[2]) != 0) { $three_winding = 1; $_ = <IN>; chomp; @data5 = mysplit($_); } if ($three_winding == 0) { if (1) { # standard transformer PSS/E V29 and V30 $nline++; $ntr++; $busfr[$nline] = extended($data1[0]); $bustt[$nline] = extended($data1[1]); $stt[$nline] = ididx($busfr[$nline])*ididx($bustt[$nline]); if (abs($data3[6]) == 4) { printf "DC line control for transformer #" . $ntr . " is ignored.\n"; } if ($flag_version >= V29) { $stt[$nline] *= $data1[11]; } else { $stt[$nline] *= $data[15]; } $rest[$nline] = $data2[0]; $reat[$nline] = $data2[1]; $susc[$nline] = $data1[8]; if ($data1[4] == 1) { $ratio[$nline] = $data3[0]; if ($ratio[$nline] == 1) { if ($data4[0] != 0) { $ratio[$nline] = $data4[0]; } } } else { $ratio[$nline] = 1; } $phas[$nline] = 0.175*$data3[2]; if ($data1[5] == 1) { $lbas[$nline] = $pbas; $ratea[$nline] = $data3[3]/$pbas; $rateb[$nline] = $data3[4]/$pbas; $ratec[$nline] = $data3[5]/$pbas; } elsif ($data1[5] == 2) { $lbas[$nline] = $data2[2]; $ratea[$nline] = $data3[3]/$data2[2]; $rateb[$nline] = $data3[4]/$data2[2]; $ratec[$nline] = $data3[5]/$data2[2]; } else { $lbas[$nline] = $data2[2]; if ($data3[1] == 0) { $j = $kvbase{$busfr[$nline]}; } else { $j = $data3[1]; } $h = $data2[2]*$data2[2]/3/$j/$j; $rest[$nline] = $rest[$nline]/$h; $ratea[$nline] = $data3[3]/$data2[2]; $rateb[$nline] = $data3[4]/$data2[2]; $ratec[$nline] = $data3[5]/$data2[2]; } } elsif (abs($data3[6]) == 3) { # phase shifting transformer PSS/E V29 and V30 $nphs++; $phs_busfr[$nphs] = extended($data1[0]); $phs_busto[$nphs] = extended($data1[1]); $phs_r[$nphs] = $data2[0]; $phs_x[$nphs] = $data2[1]; $phs_vma[$nphs] = 0.175*$data3[8]; $phs_vmi[$nphs] = 0.175*$data3[9]; $phsu[$nphs] = ididx($phs_busfr[$nphs])*ididx($phs_busto[$nphs]); if ($flag_version == V29) { $phsu[$nphs] *= $data1[11]; } else { $phsu[$nphs] *= $data[15]; } if ($data1[5] == 1) { $phs_bas[$nphs] = $pbas; } elsif ($data1[5] == 2) { $phs_bas[$nphs] = $data2[2]; } else { $phs_bas[$nphs] = $data2[2]; if ($data3[1] == 0) { $j = $kvbase{$phs_busfr[$nphs]}; } else { $j = $data3[1]; } $h = $data2[2]*$data2[2]/3/$j/$j; $phs_r[$nphs] = $phs_r[$nphs]/$h; } $phs_ref[$nphs] = 0.5*($data3[10]+$data3[11])/$phs_bas[$nphs]; } elsif (abs($data3[6]) == 1 || abs($data3[6]) == 2) { # under load tap changer PSS/E V29 and V30 $nltc++; $ltc_busfr[$nltc] = extended($data1[0]); $ltc_busto[$nltc] = extended($data1[1]); $ltc_busct[$nltc] = extended($data3[7]); if ($ltc_busct[$nltc] == 0) { $ltc_busct[$nltc] = $ltc_busto[$nltc]; } $ltc_ctr[$nltc] = abs($data3[6]); if ($ltc_busct[$nltc] != $ltc_busfr[$nltc] || $ltc_busct[$nltc] != $ltc_busto[$nltc]) { $ltc_ctr[$nltc] = 3; } $ltc_r[$nltc] = $data2[0]; $ltc_x[$nltc] = $data2[1]; $ltc_vma[$nltc] = $data3[8]; $ltc_vmi[$nltc] = $data3[9]; $ltcu[$nphs] = ididx($ltc_busfr[$nltc])*ididx($ltc_busto[$nltc]); if ($flag_version == V29) { $ltcu[$nltc] *= $data1[11]; } else { $ltcu[$nltc] *= $data[15]; } if (int($data3[12]) == 0) { $ltc_dm[$nltc] = 0; } else { $ltc_dm[$nltc] = 0; #($data3[8]-$data3[9])/$data3[12]; } $ltc_ref[$nltc] = 0.5*($data3[10]+$data3[11]); if ($data1[5] == 1) { $ltc_bas[$nltc] = $pbas; } elsif ($data1[5] == 2) { $ltc_bas[$nltc] = $data2[2]; } else { $ltc_bas[$nltc] = $data2[2]; if ($data3[1] == 0) { $j = $kvbase{$ltc_busfr[$nltc]}; } else { $j = $data3[1]; } $h = $data2[2]*$data2[2]/3/$j/$j; $ltc_r[$nltc] = $ltc_r[$nltc]/$h; } } } else { # three-winding transformer PSS/E V29 and V30 $ntw++; $bustw1[$ntw] = extended($data1[0]); $bustw2[$ntw] = extended($data1[1]); $bustw3[$ntw] = extended($data1[2]); $twu[$ntw] = $data1[11]; $x12[$ntw] = $data2[1]*$pbas/$data2[2]; $x23[$ntw] = $data2[4]*$pbas/$data2[5]; $x13[$ntw] = $data2[7]*$pbas/$data2[8]; if ($twu[$ntw] == 2) { $x12[$ntw] = 1000000; $x23[$ntw] = 1000000; $twu[$ntw] = 1; } if ($twu[$ntw] == 3) { $x13[$ntw] = 1000000; $x23[$ntw] = 1000000; $twu[$ntw] = 1; } if ($twu[$ntw] == 4) { $x13[$ntw] = 1000000; $x12[$ntw] = 1000000; $twu[$ntw] = 1; } if ($data1[5] == 3) { $j = $kvbase{$bustw1[$ntw]}; $h = $data2[2]*$data2[2]/3/$j/$j; $r12[$ntw] = $data2[0]/$h; $j = $kvbase{$bustw2[$ntw]}; $h = $data2[5]*$data2[5]/3/$j/$j; $r23[$ntw] = $data2[3]/$h; $j = $kvbase{$bustw3[$ntw]}; $h = $data2[8]*$data2[8]/3/$j/$j; $r13[$ntw] = $data2[6]/$h; } else { $r12[$ntw] = $data2[0]*$pbas/$data2[2]; $r23[$ntw] = $data2[3]*$pbas/$data2[5]; $r13[$ntw] = $data2[6]*$pbas/$data2[8]; } $rt1a[$ntw] = $data3[3]/$pbas; $rt1b[$ntw] = $data3[4]/$pbas; $rt1c[$ntw] = $data3[5]/$pbas; $rt2a[$ntw] = $data4[3]/$pbas; $rt2b[$ntw] = $data4[4]/$pbas; $rt2c[$ntw] = $data4[5]/$pbas; $rt3a[$ntw] = $data5[3]/$pbas; $rt3b[$ntw] = $data5[4]/$pbas; $rt3c[$ntw] = $data5[5]/$pbas; }}if ($flag_version <= V26) { # for PSS/E V23-V26: # under load tap changer and phase shifting transformer while (<IN>) { @data = mysplit($_); last if /^\s*0/; }}# area data all formats (PSS/E V23 - V30)while (<IN>) { chomp; @data = mysplit($_); last if /^\s*0/; $narea++; $areaidx[$narea] = int($data[0]); $areabus[$narea] = extended($data[1]); $areapdes[$narea] = $data[2]/$pbas; $areaptol[$narea] = $data[3]/$pbas; $data[4] =~ s/\W$//; $areaname[$narea] = $data[4];}# two terminal DC data all formats (PSS/E V23 - V30)while (<IN>) { @data = mysplit($_); last if /^\s*0/; }if ($flag_version >= V29) { # PSS/E V29 and V30 # VSC DC line data while (<IN>) { @data = mysplit($_); last if /^\s*0/; }}# switched shunt data all formats (PSS/E V23 - V30)while (<IN>) { @data = mysplit($_); last if /^\s*0/; #next if (ididx(int($data[0]))); #$j = pvidx(int($data[0])); # add SVC only if there is no PV at the same bus #if ($j) { #printf "SVC at PV bus " . $data[0] . " will be ignored.\n" ; #} elsif ($data[1] == 0) { # fixed SVCs are treated as a shunt if ($flag_version >= V29 || $flag_version == V23) { if ($data[6] =~ m/\'/) { # likely PSS/E V30 ... $flag_version = V30; $data[6] = $data[5]; } if ($data[6] != 0) { $nsh++; $idxsh[$nsh] = extended($data[0]); $psh[$nsh] = 0; $qsh[$nsh] = $data[6]/$pbas; $shu[$nsh] = ididx($idxsh[$nsh]); } } elsif ($flag_version == V24) { if ($data[7] != 0) { $nsh++; $idxsh[$nsh] = extended($data[0]); $psh[$nsh] = 0; $qsh[$nsh] = $data[5]/$pbas; $shu[$nsh] = ididx($idxsh[$nsh]); } }}# transformer impedance correction tableswhile (<IN>) { @data = mysplit($_); last if /^\s*0/; }# multi-terminal dc line datawhile (<IN>) { @data = mysplit($_); last if /^\s*0/; }# multisection line grouping datawhile (<IN>) { @data = mysplit($_); last if /^\s*0/; }# zone datawhile (<IN>) { chomp; @data = mysplit($_); last if /^\s*0/; $nzone++; $zoneidx[$nzone] = int($data[0]); $data[1] =~ s/\W$//; $zonename[$nzone] = $data[1];}# -----------------------------------------------------------------------# 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 PSS/E 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 "% Coauthor: Juan Carlos Morataya\n";print OUT "% E-mail: jc.morataya\@ieee.org\n";print OUT "% "."-" x 78 . "\n";print OUT "% $title1\n";print OUT "% $title2\n";print OUT "% "."-" x 78 . "\n\n";# -----------------------------------------------------------------------# write Bus.con# -----------------------------------------------------------------------if ($nbus >= 0) { print OUT "Bus.con = [ ...\n"; $format = "%4d %8.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], $kae[$i],$kzo[$i]; } print OUT " ];\n\n";}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -