⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 digsilent2psat

📁 用于电力系统的一个很好的分析软件
💻
📖 第 1 页 / 共 2 页
字号:
    } 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 + -