📄 psse2psat
字号:
# additional shunt admittance at "to" bus
if ($data[11] != 0 || $data[12] != 0) {
$nsh++;
$idxsh[$nsh] = int($data[1]);
$psh[$nsh] = $data[11];
$qsh[$nsh] = $data[12];
}
}
}
# transformer data PSS/E V29
my (@data1,@data2,@data3,@data4,@data5);
my (@bustw1,@bustw2,@bustw3);
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);
my ($nphs,@phs_busfr,@phs_busto,@phs_r,@phs_x,@phs_bas,
@phs_vma,@phs_vmi,@phs_ref);
$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 ($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($_);
}
# to avoid elements in isolated buses...
if (ididx(int($data1[0])) || ididx(abs($data1[1]))) {next;}
if ($three_winding == 0) {
#if (abs($data3[6]) == 0 || abs($data3[6]) == 4) {
if (1) {
# standard transformer PSS/E V29
$nline++;
$ntr++;
$busfr[$nline] = int($data1[0]);
$bustt[$nline] = int($data1[1]);
if (abs($data3[6]) == 4) {
printf "DC line control for transformer #" .
$ntr . " is ignored.\n";
}
$rest[$nline] = $data2[0];
$reat[$nline] = $data2[1];
$susc[$nline] = 0;
if ($data1[4] == 1) {
$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
$nphs++;
$phs_busfr[$nphs] = int($data1[0]);
$phs_busto[$nphs] = int($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];
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
$nltc++;
$ltc_busfr[$nltc] = int($data1[0]);
$ltc_busto[$nltc] = int($data1[1]);
$ltc_busct[$nltc] = int(abs($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];
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
$ntw++;
$bustw1[$ntw] = int($data1[0]);
$bustw2[$ntw] = int($data1[1]);
$bustw3[$ntw] = int($data1[2]);
$x12[$ntw] = $data2[1]*$pbas/$data2[2];
$x23[$ntw] = $data2[4]*$pbas/$data2[5];
$x13[$ntw] = $data2[7]*$pbas/$data2[8];
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 || $flag_version == V23) {
# PSS/E V26 and V23 under load tap changer and phase shifting transformer
while (<IN>) {
@data = mysplit($_);
if ($data[0] == 0) { last; }
}
}
# area data all formats (PSS/E V26, V29)
while (<IN>) {
@data = mysplit($_);
if ($data[0] == 0) { last; }
}
# two terminal DC data all formats (PSS/E V26, V29)
while (<IN>) {
@data = mysplit($_);
if ($data[0] == 0) { last; }
}
if ($flag_version >= V29) { # PSS/E V29
# VSC DC line data
while (<IN>) {
@data = mysplit($_);
if ($data[0] == 0) { last; }
}
}
# switched shunt data all formats (PSS/E V26, V29)
my ($nsvc,@svcbus,@svcbma,@svcbmi,@svcref);
$nsvc = -1;
while (<IN>) {
@data = mysplit($_);
if ($data[0] == 0) { last; }
#if (ididx(int($data[0]))) {next;}
#$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] = int($data[0]);
$psh[$nsh] = 0;
$qsh[$nsh] = $data[6]/$pbas;
}
} elsif ($flag_version == V26) {
if ($data[7] != 0) {
$nsh++;
$idxsh[$nsh] = int($data[0]);
$psh[$nsh] = 0;
$qsh[$nsh] = $data[5]/$pbas;
}
}
# } if ($flag_version == 0) {
# $nsh != -1;
# }
#} else {
#$nsvc++;
#$svcbus[$nsvc] = int($data[0]);
#if ($data[1] < 3) {
# $svcref[$nsvc] = 0.5*($data[2]+$data[3]);
#} else {
# $svcref[$nsvc] = 1;
#}
#$svcbma[$nsvc] = 0;
#for ($i = @data-1; $i > 6; $i-=2) {
# $svcbma[$nsvc] += $data[$i]*$data[$i-1];
#}
#$svcbma[$nsvc] = abs($svcbma[$nsvc])/$pbas;
#$svcbmi[$nsvc] = -$svcbma[$nsvc];
#if ($svcbma[$nsvc] == 0) {$svcbma[$nsvc] = 1;}
#if ($svcbmi[$nsvc] == 0) {$svcbmi[$nsvc] = -1;}
## add PV generator to initialize SVC component
#$npv++;
#$pvsb[$npv] = $pbas;
#$pvbus[$npv] = int($data[0]);
#$pvpg[$npv] = 0;
#if ($data[2] && $data[1] > 2) {
# $pvqt[$npv] = $data[2];
#} else {
# $pvqt[$npv] = 99;
#}
#if ($data[3] && $data[1] > 2) {
# $pvqt[$npv] = $data[3];
#} else {
# $pvqt[$npv] = -99;
#}
#$pvqb[$npv] = -99;
#$pvvs[$npv] = $svcref[$nsvc];
#$pvpt[$npv] = 0;
#$pvpb[$npv] = 0;
#}
}
# -----------------------------------------------------------------------
# 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 "% "."-" x 78 . "\n";
print OUT "% $title1\n";
print OUT "% $title2\n\n";
# -----------------------------------------------------------------------
# write Bus.con
# -----------------------------------------------------------------------
$format = "%4d %8.2f %8.5f %8.5f %2d %2d";
$nbus >= 0 && print OUT "Bus.con = [ ...\n";
for ($i = 0; $i <= $nbus-1; $i++) {
printf OUT "$format;\n",$busidx[$i],$kvb[$i],$ein[$i],$ang[$i],
$kae[$i],$kzo[$i];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -