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

📄 ieee2psat

📁 电力系统分析计算程序
💻
📖 第 1 页 / 共 2 页
字号:
}# -----------------------------------------------------------------------# scan interchange data# -----------------------------------------------------------------------if (/^INTERCHANGE/) {    while (<IN>) {	if (/^-9/) {last;}	chomp;	$_ = $_ . $blanks;	$narea++;	$areanum[$narea] = assign($_,0,3,1);	$areaname[$narea] = deblank(assign($_,37,10,"Region " . $areanum[$narea]));	$areaname[$narea] =~ s/\'/\'\'/g;	$areaslack[$narea] = assign($_,3,5,0);	$areaexp[$narea] = assign($_,20,8,0)/$pbas;	$areatol[$narea] = assign($_,29,6,0)/$pbas;	$verbose && printf("Found Region %4d: %2d\n",$narea+1,$areanum[$narea]);    }    $_  = <IN>;} else {    print "No Interchange Data found.";}# -----------------------------------------------------------------------# scan tie lines# -----------------------------------------------------------------------if (/^TIE/) {    print "TIE LINES are not defined in PSAT and will be neglected.\n";    while (<IN>) {	if (/^-9/) {last;}    }}# -----------------------------------------------------------------------# 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 IEEE/CDF 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 "% $title\n\n";# -----------------------------------------------------------------------# write Bus.con# -----------------------------------------------------------------------if ($nbus >= 0) {    print OUT "Bus.con = [ ...\n";    $format = "%4d %7.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],	$kzone[$i],$karea[$i];    }    printf OUT "  ];\n\n";}# -----------------------------------------------------------------------# write SW.con# -----------------------------------------------------------------------if ($nsw >= 0) {    print OUT "SW.con = [ ...\n";    $format = "%4d $pbas %6.2f " . "%8.5f " x 4 . "1.1 0.9 %8.5f 1 1 1;\n";    for ($i = 0; $i <= $nsw; $i++) {	$h = $idxsw[$i];	printf OUT $format,$busidx[$h],$kvb[$h],$ein[$h],$ang[$h],	$qma[$h],$qmi[$h],$pag[$h];    }    printf OUT "  ];\n\n";}# -----------------------------------------------------------------------# write PV.con# -----------------------------------------------------------------------if ($npv >= 0) {    print OUT "PV.con = [ ...\n";    $format = "%4d $pbas %6.2f " . "%8.5f " x 4 . "1.1 0.9 1 %2d;\n";    for ($i = 0; $i <= $npv; $i++) {	$h = $idxpv[$i];	printf OUT $format,$busidx[$h],$kvb[$h],$pag[$h],$ein[$h],	$qma[$h],$qmi[$h],$status[$h];    }    printf OUT "  ];\n\n";}# -----------------------------------------------------------------------# write PQ.con# -----------------------------------------------------------------------if ($npq >= 0) {    print OUT "PQ.con = [ ...\n";    $format = "%4d $pbas %6.2f %8.5f %8.5f 1.1 0.9 1 %2d;\n";    for ($i = 0; $i <= $npq; $i++) {	$h = $idxpq[$i];	printf OUT $format, $busidx[$h],$kvb[$h],$pac[$h],$prc[$h],$status[$h];    }    printf OUT "  ];\n\n";}# -----------------------------------------------------------------------# write Shunt.con# -----------------------------------------------------------------------if ($nsh >= 0) {    print OUT "Shunt.con = [ ...\n";    $format = "%4d $pbas %6.2f 60 %8.5f %8.5f %2d;\n";    for ($i = 0; $i <= $nsh; $i++) {	$h = $idxsh[$i];	printf OUT $format, $busidx[$h],$kvb[$h],$psh[$h],$qsh[$h],$status[$h];    }    printf OUT "  ];\n\n";}# -----------------------------------------------------------------------# write Line.con# -----------------------------------------------------------------------if ($nline >= 0) {    print OUT "Line.con = [ ...\n";    $format = "%4d %4d %7.2f %6.2f 60 0 %8.4f " . "%8.5f " x 5 . "0 %8.3f %8.3f %2d;\n";    for ($i = 0; $i <= $nline; $i++) {	$k = $kvbase{$busfr[$i]}/$kvbase{$busto[$i]};	if ($k == 1) {$k = 0;}	printf OUT $format, $busfr[$i],$busto[$i],$pbas,	$kvbase{$busfr[$i]},$k,$rest[$i],$reat[$i],$susc[$i],$tfas[$i],	$phsf[$i],$cano[$i],$caem[$i],$linestatus[$i];    }    printf OUT "  ];\n\n";}# -----------------------------------------------------------------------# write Areas.con# -----------------------------------------------------------------------if ($nzone >= 0) {    print OUT "Areas.con = [ ...\n";    $format = "%4d 0 $pbas 0 0 0 0 0;\n";    for ($i = 0; $i <= $nzone; $i++) {	printf OUT $format, $zonenum[$i];    }    printf OUT "  ];\n\n";    }# -----------------------------------------------------------------------# write Region.con# -----------------------------------------------------------------------if ($narea >= 0) {    print OUT "Regions.con = [ ...\n";    $format = "%4d %4d $pbas %8.5f %8.5f 0 0 0;\n";    for ($i = 0; $i <= $narea; $i++) {	printf OUT $format, $areanum[$i],$areaslack[$i],	$areaexp[$i],$areatol[$i];    }    printf 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";# -----------------------------------------------------------------------# write area names# -----------------------------------------------------------------------$nzone >= 0 && print OUT "Areas.names = { ...\n";for ($i = 0; $i <= $nzone-1; $i++) {    print OUT "  '$zonename[$i]';\n";}$nzone >= 0 && print OUT "  '$zonename[$nzone]'};\n\n";# -----------------------------------------------------------------------# write region names# -----------------------------------------------------------------------$narea >= 0 && print OUT "Regions.names = { ...\n";for ($i = 0; $i <= $narea-1; $i++) {    print OUT "  '$areaname[$i]';\n";}$narea >= 0 && print OUT "  '$areaname[$narea]'};\n\n";# -----------------------------------------------------------------------# close output data file# -----------------------------------------------------------------------close(OUT) || die "cannot close $ARGV[1]: $!\n";print "Conversion completed.\n";# -----------------------------------------------------------------------# function for formatting data and/or assigning default values# -----------------------------------------------------------------------sub assign {    my $param;    $param = substr($_[0],$_[1],$_[2]);    $param =~ s/\s+//g;    if ($param eq "") { $param = $_[3]; }    return $param;}# -----------------------------------------------------------------------# function for determining if the line is close# -----------------------------------------------------------------------sub openline {    my @mydata = split /\s+/, $_[0];    $_[0] =~ s/\s+$//;    if (length($_[0]) > 130) {	if ($mydata[-1] > 1) {	    return 1;	} else {	    return $mydata[-1];	}    } else {	return 1;    }}# -----------------------------------------------------------------------# 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";}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -