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

📄 simpow2psat

📁 用于电力系统的一个很好的分析软件
💻
📖 第 1 页 / 共 3 页
字号:
	    $pqpl[$npq] = assign("P",0)/$pbase;
	    if (exists $data{"Q"}) {
		$pqql[$npq] = assign("Q",0)/$pbase;
	    } else {
		$h = assign("COSFI",1);
		$j = sqrt(1-$h*$h);
		$pqql[$npq] = $j*$pqpl[$npq]/$h;
	    }
	    $umin[$npq] = assign("UMIN",0.9);
	    $umax[$npq] = assign("UMAX",1.1);	
	    $loadstatus[$npq] = status();
	    $loadno[$npq] = assign("NO",0);
	}

    } elsif (/^POWER/) {

	while ($firstline ne "END") {

	    %data = splitdata(-1);
	    if (!$data{"BUS1"}) { print $firstline . "\n"; }
	    if ($data{"BUS1"} eq "END") { last; }
	    if (exists $data{"RTYPE"}) { $data{"RTYP"} = $data{"RTYPE"}; }
	    if ($data{"TYPE"} eq "NODE") {

		if ($data{"RTYP"} eq "UP") {

		    $npv++;
		    $ngen++;
		    $pvidx[$npv] = $ngen;
		    $pvbus[$npv] = $nameidx{$data{"BUS1"}};
		    $genbus[$ngen] = $pvbus[$npv]+1;
		    $genname[$ngen] = assign("NAME",$data{"BUS1"});
		    $pvpg[$npv] = assign("P",0)/$pbase;
		    $pvqt[$npv] = assign("QMAX",0)/$pbase;
		    $pvqb[$npv] = assign("QMIN",0)/$pbase;
		    $pvvs[$npv] = assign("U",0)/$kvb[$pvbus[$npv]];

		} elsif ($data{"RTYP"} eq "PQ") {

		    $npg++;
		    $ngen++;
		    $pgidx[$npg] = $ngen;
		    $pgbus[$npg] = $nameidx{$data{"BUS1"}};
		    $genbus[$ngen] = $pgbus[$npg]+1;
		    $genname[$ngen] = assign("NAME",$data{"BUS1"});
		    $pqpg[$npg] = assign("P",0)/$pbase;
		    $pqqg[$npg] = assign("Q",0)/$pbase;

		} elsif ($data{"RTYP"} eq "SW" || $data{"RTYP"} eq "UFI") {

		    $nsw++;
		    $ngen++;
		    $swidx[$nsw] = $ngen;
		    $swbus[$nsw] = $nameidx{$data{"BUS1"}};
		    $genbus[$ngen] = $swbus[$nsw]+1;
		    $genname[$ngen] = assign("NAME",$data{"BUS1"});
		    $swpg[$nsw] = assign("P",0)/$pbase;
		    $swqt[$nsw] = assign("QMAX",0)/$pbase;
		    $swqb[$nsw] = assign("QMIN",0)/$pbase;
		    $swvs[$nsw] = assign("U",$kvb[$swbus[$nsw]])/$kvb[$swbus[$nsw]];
		    $swfi[$nsw] = 0.017453*assign("FI",0);
		    if ($data{"RTYP"} eq "SW") {
			$swtype[$nsw] = 1;
		    } else {
			$swtype[$nsw] = 0;
		    }
		}

	    } elsif ($data{"TYPE"} eq "CONV") {

		$i = $cvidx{$data{"BUS1"}};
		
		if (($data{"RTYP"} eq "I") && $i >= 0) {
		    $cvtyp[$i] = 1;
		    $cvio[$i] = assign("IO",0);
		} elsif (($data{"RTYP"} eq "U") && $i >= 0) {
		    $cvtyp[$i] = 2;
		    $cvio[$i] = assign("UO",0);
		}
		$cvdi[$i] = assign("DI",0);
		$cvamin[$i] = assign("AMIN",0);
		$cvgmin[$i] = assign("GMIN",0);	

	    } elsif ($data{"TYPE"} eq "TREG") {

		$i = $lineno{$data{"BUS1"}.$data{"BUS2"}.assign("NO",1)};
		$h = $i-1;
		
		if (($data{"RTYP"} eq "TAUFI") && $i >= 0) {
		    
		    $treg[$h] = 1;
		    if ($tapside[$h] == 1) {
			$ratio[$h] = 1/assign("TAU",1);
		    } else {
			$ratio[$h] = assign("TAU",1);
		    }
		    $phas[$h] = 0.017453*assign("FI",0);
		    if (exists $data{"UNT"}) {
			$ratio[$h] = $data{"UNT"}/$kvb[$bustt[$h]];			
		    }

		} elsif (($data{"RTYP"} eq "UFI") && $i >= 0) { 

		    $treg[$h] = 2;
		    $linefi[$h] = assign("FI",0);
		    $linecnode[$h] = $nameidx{assign("CNODE",$data{"BUS2"})};
		    $linepar[$h] = assign("U",0);
		    
		} elsif (($data{"RTYP"} eq "AFI") && $i >= 0) { 

		    $treg[$h] = 3;
		    $linefi[$h] = assign("FI",0);
		    $linecnode[$h] = $nameidx{assign("CNODE",$data{"BUS2"})};
		    $lineconv[$h] = $cvidx{$data{"CONV"}}+1;
		    $linepar[$h] = assign("ALPHA",0);          

		} elsif (($data{"RTYP"} eq "GFI") && $i >= 0) { 

		    $treg[$h] = 4;
		    $linefi[$h] = assign("FI",0);
		    $linecnode[$h] = $nameidx{assign("CNODE",$data{"BUS2"})};
		    $lineconv[$h] = $cvidx{$data{"CONV"}}+1;
		    $linepar[$h] = assign("GAMMA",0);

		}

	    }
	}

    } elsif (/^COMMANDS/) {

	while (defined($_ = shift(@data))) {

	    chomp;
	    next if /^!/;
	    if (/^\$DISABLE/) { discom(); next; }
	    if (/^\$INCLUDE/) { include(); next; }
	    if (/^END/) { last; }

	    $_ =~ s/^\s*//;
	    
	    if (/^RUN/) { next; }
	    if (/^ALTER/) {
		
		@alter = split /\%\s*/ , $_;
		#print $alter[1] . "\n";

		if (/^LINE/) {
		    
		} elsif (/^TR2/) {
		    
		} elsif (/^TR3/) {
		    
		} elsif (/^SHUN/) {
		    
		} elsif (/^LOAD/) {
		    
		} elsif (/^PROD/) {
		    
		} elsif (/^ASYN/) {
		    
		}

		$_ =~ s/^ALTER\s+//;
		#print $_ . "\n";

	    }
	}
    }
}

# -----------------------------------------------------------------------
# scan DYNPOW/SIMPOW data file
# -----------------------------------------------------------------------

if (!$dynfile) {
    $ARGV[0] =~ s/\.optpow$/\.dynpow/;
    $file =~ s/\.optpow$/\.dynpow/;
} else {
    ($file,$dir) = fileparse($dynfile);
    $ARGV[0] = $dynfile;
}

print "Opening SIMPOW-DYNPOW file <$file>\n";

if (open(IN,$ARGV[0]) && !$nodyn) {

    @data = <IN>;
    close(IN) || die "Cannot close $file: $!\n";

    # read comments
    while (defined($_ = shift(@data))) {
	chomp;
	last if /^\*\*/;
	if (/^\$DISABLE/) { discom(); next; }
	if (/^\$INCLUDE/) { include(); next; }
	$ntitle++;
	$_ =~ s/^\!+//;
	$title[$ntitle] = $_;
    }

    # read data
    while (defined($_ = shift(@data))) {

	chomp;
	next if /^!/;
	if (/^\$DISABLE/) { discom(); }
	if (/^\$INCLUDE/) { include(); }
	$firstline = "NULL";

	if (/^GENERAL/) {	        # System bases

	    while ($firstline ne "END") {
		%data = splitdata(0);
		$fbase = assign("FN",$fbase);
	    }

	} elsif (/^CONTROL/) {	        # Control data

	    while ($firstline ne "END") {
		%data = splitdata(0);
		$symod = assign("SYMOD",$symod);
	    }

	} elsif (/^SYNCHRONOUS/) {	# Synchronous machines
	    
	    while ($firstline ne "END") {
		%data = splitdata(2);
		$nsyn++;
		$synbus[$nsyn] = $nameidx{$data{"BUS2"}};
		$gbas[$nsyn] = assign("SN",$pbase);
		$pf[$nsyn] = assign("PF",1);
		$qf[$nsyn] = assign("QF",1);
		$xd[$nsyn] = assign("XD",0);
		$xq[$nsyn] = assign("XQ",0);
		$xdp[$nsyn] = assign("XDP",0);
		$xqp[$nsyn] = assign("XQP",0);
		$xdb[$nsyn] = assign("XDB",0);
		$xqb[$nsyn] = assign("XQB",0);
		$ra[$nsyn] = assign("RA",0);
		$xl[$nsyn] = assign("XA",0);
		$td0p[$nsyn] = assign("TD0P",0);
		$tq0p[$nsyn] = assign("TQ0P",0);
		$td0b[$nsyn] = assign("TD0B",0);
		$tq0b[$nsyn] = assign("TQ0B",0);
		$mstt[$nsyn] = assign("H",5);
		$damp[$nsyn] = assign("DAMP",0);
		$gentype[$nsyn] = assign("TYPE",2);
		$gentype[$nsyn] =~ s/A//;
		if ($gentype[$nsyn] == 1) {
		    $gentype[$nsyn] = 6;
		} elsif ($gentype[$nsyn] == 2) {
		    $gentype[$nsyn] = 4;
		} elsif ($gentype[$nsyn] == 4) {
		    $gentype[$nsyn] = 2;
		}
		if ($tq0p[$nsyn] == 0) {
		    $gentype[$nsyn] = 3;
		}
		$synvreg[$nsyn] = assign("VREG",0);
	    }
	    
	} elsif (/^REGULATORS/) {

	    while ($firstline ne "END") {

		%data = splitdata(1);
		$type = assign("TYPE",1);

		if ($type eq "1") {
		    
		    $nexc++;
		    $exctype[$nexc] = 2;
		    $exccode[$nexc] = $data{"BUS1"};
		    $excka[$nexc] = assign("KA",0);
		    $excta[$nexc] = assign("TA",0);
		    $excte[$nexc] = assign("TE",0);
		    $exckf[$nexc] = assign("KF",0);
		    $exctf[$nexc] = assign("TF",0);
		    $exctr[$nexc] = assign("TR",0);
		    $excvrmax[$nexc] = assign("VRMAX",0);
		    $excvrmin[$nexc] = assign("VRMIN",0);
		    
		  } else {
		    
		    #print "Regulator type " . $type . " not supported.\n"
		      
		  }

	    }

	} # end scan components

    }

} elsif ($nodyn) {

    print "Force to ignore DYNPOW file.\n";

} else {

    print "Cannot open $file: $!\n";

}

# -----------------------------------------------------------------------
# open output data file
# -----------------------------------------------------------------------
print "Writing Matlab file <$outfile>\n";
open(OUT,">$ARGV[1]") || die "cannot open $outfile: $!\n";

# -----------------------------------------------------------------------
# write output data file
# -----------------------------------------------------------------------
print OUT "% File generated from SIMPOW data file.\n";
print OUT "% "."-" x 78 . "\n";
print OUT "% Author:   Federico Milano\n";
print OUT "% e-mail:   Federico.Milano\@uclm.es\n";
print OUT "% "."-" x 78 . "\n";
print OUT "% $title\n";
for ($i = 0; $i <= $ntitle; $i++) {
    print OUT "% $title[$i]\n";
}
print OUT "\n";

# -----------------------------------------------------------------------
# write Bus.con
# -----------------------------------------------------------------------
$format = "%4d %6.2f  %7.4f  %7.4f  %3d  %2d;\n";
$nbus >= 0 && print OUT "Bus.con = [ ...\n";
for ($i = 0; $i <= $nbus; $i++) {
    printf OUT $format,$i+1,$kvb[$i],$vol[$i],$ang[$i],$karea[$i],$kzone[$i];
}
$nbus >= 0 && printf OUT "   ];\n\n";

# -----------------------------------------------------------------------
# write SW.con
# -----------------------------------------------------------------------
$nsw >= 0 && print OUT "SW.con = [ ...\n";
for ($i = 0; $i <= $nsw; $i++) {
    $format = "%4d $pbase %6.2f %8.5f %8.5f %8.5f %8.5f 1.1 0.9 %8.5f %2d 1;\n";
    $h = $swbus[$i];
    printf OUT $format,$h+1,$kvb[$h],$swvs[$i],$swfi[$i],
    $swqt[$i],$swqb[$i],$swpg[$i],$swtype[$i];
}
$nsw >= 0 && printf OUT "   ];\n\n";


# -----------------------------------------------------------------------
# write PV.con
# -----------------------------------------------------------------------
$npv >= 0 && printf OUT "PV.con = [ ...\n";
$format = "%4d $pbase %6.2f " . "%8.5f " x 4 . "1.1 0.9 1 1;\n";
for ($i = 0; $i <= $npv; $i++) {
    $h = $pvbus[$i];
    printf OUT $format,$h+1,$kvb[$h],
    $pvpg[$i],$pvvs[$i],$pvqt[$i],$pvqb[$i];
}
$npv >= 0 && printf OUT "   ];\n\n";

# -----------------------------------------------------------------------
# write PQgen.con
# -----------------------------------------------------------------------
$npg >= 0 && printf OUT "PQgen.con = [ ...\n";
$format = "%4d $pbase %6.2f %8.5f %8.5f 1.1 0.9 1 1;\n";
for ($i = 0; $i <= $npg; $i++) {
    $h = $pgbus[$i];
    printf OUT $format,$h+1,$kvb[$h],$pqpg[$i],$pqqg[$i];
}
$npg >= 0 && printf OUT "   ];\n\n";

# -----------------------------------------------------------------------
# write PQ.con
# -----------------------------------------------------------------------
$npq >= 0 && printf OUT "PQ.con = [ ...\n";
$format = "%4d $pbase %6.2f %8.5f %8.5f %7.4f %7.4f 1 %2d;\n";
for ($i = 0; $i <= $npq; $i++) {
    $h = $pqbus[$i];
    printf OUT $format,$h+1,$kvb[$h],$pqpl[$i],$pqql[$i],
    $umax[$i],$umin[$i],$loadstatus[$i];

⌨️ 快捷键说明

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