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

📄 ieee2psat

📁 用于电力系统的一个很好的分析软件
💻
📖 第 1 页 / 共 2 页
字号:
#!/usr/bin/perl -w# IEEE2PSAT converts IEEE/CDF data file into PSAT data file## IEEE2PSAT <OPTIONS> FILEINPUT <FILEOUTPUT>## Author:  Federico Milano# Date:    25-Jun-2003# Version: 1.0.0##E-mail:    fmilano@thunderbox.uwaterloo.ca#Web-site:  http://thunderbox.uwaterloo.ca/~fmilanouse strict;# -----------------------------------------------------------------------# variable declaration# -----------------------------------------------------------------------my $nargin = 0;my $verbose = 0;my $helpmsg = 0;my ($i,$k);my $h = 1;my $format;my $n = 0;my $npv = -1;my $nsw = -1;my $npq = -1;my $nsh = -1;my (@idxpv, @idxsw, @idxpq, @idxsh);my $pbas = 100;my $freq = 60;my $blanks = " " x 100;my $iter = 20;my $toler = 0.0001;my $nbus = -1;my $nline = -1;my $narea = -1; # Zones in PSAT formatmy $nzone = -1; # Areas in PSAT formatmy $flag_bus = 0;my $flag_line = 0;my $flag_area = 0;my $flag_trsf = 0;my $flag = 1;my $check = 0;my $skipline = 0;my $skipbus = 0;my (@busidx,@bustype,@busname,@status);my (@ein,@ang,@pag,@prg,@qmi,@qma,@psh,@pac);my (@prc,@qsh,@kvb,@karea,@kzone);	    my %kvbase;my (@busfr,@busto);my (@rest,@reat,@susc,@tfas,@tfmi,@tfma,@phsf);my (@nbci,@cano,@caem,@sbas,@linestatus);	    my (@areanum,@areaslack,@areaexp,@areatol,@areaname);my (@zonenum,@zonename);# -----------------------------------------------------------------------# check inputs# -----------------------------------------------------------------------$nargin = @ARGV;$nargin || die "Error: No input data file.\n";my $title = 'Generic IEEE/CDF Data Format File '.$ARGV[0];# -----------------------------------------------------------------------# check options# -----------------------------------------------------------------------while ($ARGV[0] =~ /^-/) {    if ($ARGV[0] =~ /v/) {$verbose = 1;}    if ($ARGV[0] =~ /h/) {$helpmsg = 1;}    shift(@ARGV);    $nargin--;    if ($nargin == 0) { 	last;    }}# -----------------------------------------------------------------------# help (if requested)# -----------------------------------------------------------------------if ($helpmsg) {    print "\nIEEE2PSAT converts IEEE/CDF data files into PSAT data files.\n\n";    print "ieee2psat <options> fileinput <fileoutput>\n";    print "  -v   verbose\n";    print "  -h   print this help and exit\n\n";    print "Author:   Federico Milano\n";    print "Date:     25-Jun-2003\n";    print "Version:  1.0.0\n\n";    print "E-mail:   fmilano\@thunderbox.uwaterloo.ca\n";    print "Web-site: http://thunderbox.uwaterloo.ca/~fmilano\n";    die "\n";}# -----------------------------------------------------------------------# define output file name (if necessary)# -----------------------------------------------------------------------if ($nargin == 1) {    $ARGV[1] = $ARGV[0];    $ARGV[1] =~ s/^d*_*/d_/;    $ARGV[1] =~ s/[^\w\.]/_/g;    $ARGV[1] =~ s/\..+$/.m/;} elsif ($nargin == 0) {    die "Error: Input file name is missing.\n";}# -----------------------------------------------------------------------# open input data file# -----------------------------------------------------------------------print "Opening IEEE/CDF file \"$ARGV[0]\"...\n";carret();open(IN,$ARGV[0]) || die "cannot open $ARGV[0]: $!\n";# -----------------------------------------------------------------------# find header# -----------------------------------------------------------------------while (<IN>) {    if (/^TAPE/) {      # TAPE data format	$verbose && print "IEEE data file is in TAPE format";    } elsif (/^CARD/) { # CARD data format	$verbose && print "IEEE data file is in CARD format";    } elsif (/^C/) {	next;    } else {	chomp;	$title = $_;	last;        }}$pbas  = assign($_,31,6,100) || die "Header row is in a wrong format.\n";# -----------------------------------------------------------------------# find bus data# -----------------------------------------------------------------------$i = 0;while (<IN>) {    if (/^C/) {next;}    if (/^BUS/) {last;}    $i++;    if ($i == 5) {die "No Bus Data Found.";}}# -----------------------------------------------------------------------# scan bus data# -----------------------------------------------------------------------while (<IN>) {    if (/^-999/) {last;}    chomp;    $_ = $_ . $blanks;    $nbus++;    $bustype[$nbus] = assign($_,24,2,0);    $busidx[$nbus]  = assign($_,0,5,1);    $ein[$nbus] = assign($_,27,6,1);    $ang[$nbus] = 3.141592654*assign($_,33,7,0)/180;	        if ($bustype[$nbus] == 4) { 	$status[$nbus] = 0;    } else {	$status[$nbus] = 1;    }    if ($bustype[$nbus] == 2) {	$npv++;	$idxpv[$npv] = $nbus;	if (assign($_,84,6,0)) {	    $ein[$nbus] = assign($_,84,6,1);	}    } elsif ($bustype[$nbus] == 3) {	$nsw++;	$idxsw[$nsw] = $nbus;    }    $check = ($bustype[$nbus] <= 1);    $busname[$nbus] = deblank(substr($_,5,12));    $busname[$nbus] =~ s/\'/\'\'/g;    $pag[$nbus] = assign($_,59,8,0)/$pbas;    $prg[$nbus] = assign($_,67,8,0)/$pbas;    $qma[$nbus] = assign($_,90,8,0)/$pbas;    $qmi[$nbus] = assign($_,98,8,0)/$pbas;    $pac[$nbus] = assign($_,40,9,0)/$pbas;    $prc[$nbus] = assign($_,49,10,0)/$pbas;    if ($pac[$nbus] != 0 || $prc[$nbus] != 0 || 	$check*$pag[$nbus] != 0 || $check*$prg[$nbus] != 0) {	$npq++;	$idxpq[$npq] = $nbus;	$pac[$nbus] -= $check*$pag[$nbus];	$prc[$nbus] -= $check*$prg[$nbus];    }    $psh[$nbus] = assign($_,106,8,0);    $qsh[$nbus] = assign($_,114,8,0);     if ($qsh[$nbus] != 0 || $psh[$nbus] != 0) {	$nsh++;	$idxsh[$nsh] = $nbus;    }    $kvb[$nbus] = assign($_,76,7,1.00);    if ($kvb[$nbus] == 0) { $kvb[$nbus] = 1; }    $karea[$nbus] = assign($_,17,3,1);    $kzone[$nbus] = assign($_,20,4,1);    $kvbase{$busidx[$nbus]} = $kvb[$nbus];    $verbose && printf("Found Bus  %4d:  $busname[$nbus]\n",$nbus+1);}if ($skipbus) {print "* * Skipped " . $skipbus . " isolated buses.\n"; }# -----------------------------------------------------------------------# find branch data# -----------------------------------------------------------------------$i = 0;while (<IN>) {    if (/^BRANCH/) {last;}    $i++;    if ($i == 5) {die "No Branch Data Found.";}}# -----------------------------------------------------------------------# scan branch data# -----------------------------------------------------------------------while (<IN>) {    if (/^-999/) {last;}    chomp;    $nline++;    $linestatus[$nline] = openline($_);    $_ = $_ . $blanks;    $busfr[$nline] = assign($_,0,5,1);    $busto[$nline] = assign($_,5,5,1);    $rest[$nline] = assign($_,19,10,0);    $reat[$nline] = assign($_,29,11,0);	        $susc[$nline] = assign($_,40,10,0);    $tfas[$nline] = assign($_,76,6,1);    $tfmi[$nline] = assign($_,90,7,1.1);    $tfma[$nline] = assign($_,97,7,0.9);    $phsf[$nline] = assign($_,83,7,0);    $nbci[$nline] = assign($_,105,6,0);    $cano[$nline] = assign($_,50,5,0)/$pbas;    $caem[$nline] = assign($_,56,5,0)/$pbas;	        $verbose && printf("Found Line %4d: %4d -> %4d\n",$nline+1,$busfr[$nline],$busto[$nline]);}# -----------------------------------------------------------------------# scan loss zones# -----------------------------------------------------------------------$_  = <IN>;if (/^LOSS/) {    while (<IN>) {	if (/^-9/) {last;}	chomp;	$_ = $_ . $blanks;	$nzone++;	$zonenum[$nzone] = assign($_,0,3,1);	$zonename[$nzone] = deblank(assign($_,4,12,"Area " . $zonenum[$nzone]));	$zonename[$nzone] =~ s/\'/\'\'/g;	$verbose && printf("Found Area %4d: %2d\n",$nzone+1,$zonenum[$nzone]);    }    $_  = <IN>;} else {    print "No Loss Zone Data found.";

⌨️ 快捷键说明

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