📄 digsilent2psat
字号:
} elsif ($crd =~ /^\$\$ElmTerm/) { # terminal element data $nbus++; $busidx[$nbus] = assign("No",1); $busname[$nbus] = assign("Name",("Bus" . $busidx[$nbus])); $kvb[$nbus] = assign("uknom",1.00); $kae[$nbus] = assign("pZone",1); $busnum{$busname[$nbus]} = $busidx[$nbus]; $buskvb{$busname[$nbus]} = $kvb[$nbus]; } elsif ($crd =~ /^\$\$ElmTr2/) { # two winding transformer element data $ntr++; $bustfr[$ntr] = assign("Station1",); $busttt[$ntr] = assign("Station2",); $ttrasf[$ntr] = assign("typ_id",); } elsif ($crd =~ /^\$\$ElmTr3/) { # three winding transformer element data $ntw++; $twname[$ntw] = assign('typ_id',); $bustw1[$ntw] = assign('Station1',); $bustw2[$ntw] = assign('Station2',); $bustw3[$ntw] = assign('Station3',); } elsif ($crd =~ /^\$\$ElmZone/) { # zone data $nzo++; $kzonum[$nzo] = assign('No',1); $kzoname[$nzo] = assign('Name',1); $kzo{$kzoname[$nzo]} = $kzonum[$nzo]; } elsif ($crd =~ /^\$\$TypTr2/) { # two winding transformer type data $n = assign('Name',); $utrasf{$n} = assign("utrn_h",1); $k = $utrasf{$n}*$utrasf{$n}/$pbas; $ktrasf{$n} = $utrasf{$n}/assign('utrn_l',1); $strasf{$n} = assign('strn',$pbas); $rtrasf{$n} = assign('pcutr',0)/$strasf{$n}/1000; $xtrasf{$n} = assign('uktr',1)/100; $phs{$n} = assign('phitr',0); $tap{$n} = assign('dutap',0)/100; } elsif ($crd =~ /^\$\$OP_ElmTr2/) { # two winding transformer operational data $noptr++; $utr[$noptr] = !assign("outserv",0); $ntap[$noptr] = assign("nntap",0); } elsif ($crd =~ /^\$\$TypTr3/) { # three winding transformer type data $n = assign('Name',); $twname{$n} = assign('Name',1); $twsb{$n} = assign('strn3_h',$pbas); # MVA $twdu{$n} = assign('du3tp_h',0)/100; $kv1{$n} = assign('utrn3_h',1); # kV $kv2{$n} = assign('utrn3_m',1); $kv3{$n} = assign('utrn3_l',1); $x12{$n} = assign('uktr3_h',1)/100; $x23{$n} = assign('uktr3_m',1)/100; $x31{$n} = assign('uktr3_l',1)/100; $r12{$n} = assign('pcut3_h',0)/1000/$twsb{$n}; $r23{$n} = assign('pcut3_m',0)/1000/$twsb{$n}; $r31{$n} = assign('pcut3_l',0)/1000/$twsb{$n}; } elsif ($crd =~ /^\$\$OP_ElmTr3/) { # three winding transformer operational data $noptw++; $utw[$noptw] = !assign("outserv",0); $ntaptw[$noptw] = assign("n3tap_h",0); } elsif ($crd =~ /^\$\$Graphic/) { # do nothing for now } else { # do nothing next; } }# -----------------------------------------------------------------------# close data file# -----------------------------------------------------------------------close(IN) || die "Cannot close $ARGV[0]: $!\n";$nbus >= 0 || die "ERROR: no bus has been found. Conversion failed.";$nline >= 0 || $ntr >= 0 || $ntw >= 0 || die "ERROR: no line has been found. Conversion failed.";# -----------------------------------------------------------------------# open output data file# -----------------------------------------------------------------------print "Writing PSAT file \"$ARGV[1]\"...\n";open(OUT,">$ARGV[1]") || die "cannot open $ARGV[1]: $!\n";# -----------------------------------------------------------------------# write output data file# -----------------------------------------------------------------------print OUT "% File generated by PSAT from DigSilent v.$version data file.\n";print OUT "% "."-" x 72 . "\n";print OUT "% Author: Federico Milano\n";print OUT "% E-mail: Federico.Milano\@uclm.es\n";print OUT "% "."-" x 72 . "\n";for ($j = 0; $j <= $ntitle; $j++) { print OUT "% $title[$j]\n";}print OUT "% "."-" x 72 . "\n\n";# -----------------------------------------------------------------------# write Bus.con# -----------------------------------------------------------------------$format = "%4d %6.2f 1 0 %4d 1;\n";$nbus >= 0 && print OUT "Bus.con = [ ...\n";for ($i = 0; $i <= $nbus; $i++) { printf OUT $format,$busidx[$i],$kvb[$i],$kae[$i];}$nbus >= 0 && printf OUT "];\n\n";# -----------------------------------------------------------------------# write SW.con# -----------------------------------------------------------------------if ($nsw >= 0) { print OUT "SW.con = [ ...\n"; $format = "%4d %7.2f %6.2f %8.5f 0 %8.5f %8.5f 1.1 0.9 " . "%8.5f 1 1 %1d;\n"; if ($tysw eq "EXT") { $h = $exbus[$nsw]; printf OUT $format,$busnum{$h},$pbas,$buskvb{$h}, $exvs[$nsw],$exqb[$nsw],$exqt[$nsw], $expg[$nsw],$extstt[$nsw]; } elsif ($tysw eq "SYN") { $h = $pvbus[$nsw]; $k = $sname[$nsw]; printf OUT $format,$busnum{$h},$sbas{$k}, $buskvb{$h},$pvvs[$nsw],$pvqb[$nsw],$pvqt[$nsw], $pvpg[$nsw],$synstt[$nsw]; } printf OUT "];\n\n";}# -----------------------------------------------------------------------# write PV.con# -----------------------------------------------------------------------($nsyn >= 0 || $next >= 0) && printf OUT "PV.con = [ ...\n";$format = "%4d %7.2f %6.2f " . "%8.5f " x 4 . "1.1 0.9 1 %1d;\n";for ($i = 0; $i <= $nsyn; $i++) { unless ($i == $nsw && $tysw eq "SYN") { $h = $pvbus[$i]; $k = $stype[$i]; printf OUT $format,$busnum{$h},$sbas{$k},$vbas{$k}, $pvpg[$i],$pvvs[$i],$pvqb[$i],$pvqt[$i],$synstt[$i]; }}for ($i = 0; $i <= $next; $i++) { unless ($i == $nsw && $tysw eq "EXT") { $h = $exbus[$i]; printf OUT $format,$busnum{$h},$pbas,$buskvb{$h}, $expg[$i],$exvs[$i],$exqb[$i],$exqt[$i],$extstt[$i]; }}($nsyn >= 0 || $next >= 0) && printf OUT "];\n\n";# -----------------------------------------------------------------------# write PQ.con# -----------------------------------------------------------------------$npq >= 0 && printf OUT "PQ.con = [ ...\n";$format = "%4d $pbas %8.2f %8.5f %8.5f 1.1 0.9 1 1;\n";for ($i = 0; $i <= $npq; $i++) { $h = $pqbus[$i]; printf OUT $format,$busnum{$h},$buskvb{$h},$pqpl[$i],$pqql[$i];}$npq >= 0 && printf OUT "];\n\n";# -----------------------------------------------------------------------# write Mn.con# -----------------------------------------------------------------------$nmn >= 0 && printf OUT "Mn.con = [ ...\n";$format = "%4d $pbas %8.2f 100 100 %2.2f %2.2f 1 1;\n";for ($i = 0; $i <= $npq; $i++) { $k = $tload[$i]; $h = $pqbus[$i]; if ($kpu{$k} || $kqu{$k}) { printf OUT $format,$busnum{$h},$buskvb{$h},$kpu{$k},$kqu{$k}; }}$nmn >= 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 1;\n";for ($i = 0; $i <= $nsh; $i++) { $h = $shbus[$i]; printf OUT $format,$busnum{$h},$buskvb{$h},$pshnt[$i],$qshnt[$i];}$nsh >= 0 && print OUT "];\n\n";#------------------------------------------------------------------------# write Mot.con#------------------------------------------------------------------------$nasm >= 0 && print OUT "Mot.con = [ ...\n";$format = "%4d %8.2f %8.2f %6.2f 1 0 %8.5f %8.5f %8.5f %8.5f " . "%8.5f %8.5f %8.5f 1 %8.5f 0 0 0 1 %1d;\n";for ($i = 0; $i <= $nasm; $i++) { $h = $busasm[$i]; $k = $tasm[$i]; printf OUT $format,$busnum{$h},$snasm{$k},$kvasm{$k},$fnasm{$k}, $rsasm{$k},$xsasm{$k},$rr1asm{$k},$xr1asm{$k},$rr2asm{$k},$xr2asm{$k}, $xmasm{$k},$pasm[$i]/$snasm{$k},$uasm[$i];}$nasm >= 0 && print OUT "];\n\n";# -----------------------------------------------------------------------# write Line.con# -----------------------------------------------------------------------($nline >= 0 || $ntr >= 0) && print OUT "Line.con = [ ...\n";$format = "%4d %4d %8.2f %8.2f 60 0 %5.2f " . "%8.5f " x 5 . " %8.3f 0 0 %1d;\n";for ($i = 0; $i <= $nline; $i++) { $h = $busfr[$i]; $j = $bustt[$i]; $k = $tline[$i]; printf OUT $format,$busnum{$h},$busnum{$j}, $pbas,$buskvb{$h},0,$dline[$i]*$rline{$k},$dline[$i]*$xline{$k}, $dline[$i]*$bline{$k},0,0,$iline{$k},1;}for ($i = 0; $i <= $ntr; $i++) { $h = $bustfr[$i]; $j = $busttt[$i]; $k = $ttrasf[$i]; printf OUT $format,$busnum{$h},$busnum{$j},$strasf{$k}, $utrasf{$k},$ktrasf{$k},$rtrasf{$k},$xtrasf{$k}, 0,$ntap[$i]*$tap{$k}+1,$phs{$k},0,$utr[$i];}($nline >= 0 || $ntr >= 0) && print OUT "];\n\n";# -----------------------------------------------------------------------# write Twt.con# -----------------------------------------------------------------------$ntw >= 0 && print OUT "Twt.con = [ ...\n";$format = "%4d %4d %4d %5.2f 60 %5.2f %5.2f %5.2f " . "%8.5f " x 7 . " 0 0 0 0 0 0 0 0 0 %1d;\n";for ($i = 0; $i <= $ntw; $i++) { $k = $twname[$i]; $h = $bustw1[$i]; $j = $bustw2[$i]; $w = $bustw3[$i]; printf OUT $format,$busnum{$h},$busnum{$j},$busnum{$w}, $twsb{$k},$kv1{$k},$kv2{$k},$kv3{$k}, $r12{$k},$r31{$k},$r23{$k},$x12{$k},$x31{$k},$x23{$k}, $ntaptw[$i]*$twdu{$k}+1,$utw[$i];} $ntw >= 0 && print 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 getting data fields# -----------------------------------------------------------------------sub fields { my $item; my $counter = -1; my %cards; my @mydata = split /;/, $crd; #/ shift(@mydata); foreach $item (@mydata) { $counter++; $item =~ s/\(\w+:*\d*\).*$//; $cards{$item} = $counter; } return %cards;}# -----------------------------------------------------------------------# function for formatting data and/or assigning default values# -----------------------------------------------------------------------sub assign { my $param; if (defined($card{$_[0]})) { $param = $data[$card{$_[0]}]; if ($param eq "") { $param = $_[1]; } } else { $param = $_[1]; } return $param;}# -----------------------------------------------------------------------# function for finding the slack generator# -----------------------------------------------------------------------sub swgen { my $swpgen = $_[0]; my $swpos = 0; for ($k = 0; $k <= $nopv; $k++) { if ($swpgen < $pvpg[$k]) { $swpos = $k; $swpgen = $pvpg[$k]; } } return $swpos;}# -----------------------------------------------------------------------# function for reading comma separated data# -----------------------------------------------------------------------sub mysplit { my $string = $_[0]; my @mydata = split /;/, $string; if ($mydata[0] eq "") { shift(@mydata); } return @mydata; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -