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

📄 neplan2psat

📁 电力系统分析计算程序
💻
📖 第 1 页 / 共 2 页
字号:
#!/usr/bin/perl -w# NEPLAN2PSAT converts NEPLAN data file into PSAT data file## NEPLAN2PSAT <OPTIONS> FILEINPUT <FILEOUTPUT>## Author:  Federico Milano# Date:    30-May-2005# Version: 1.0.0##E-mail:    fmilano@thunderbox.uwaterloo.ca#Web-site:  http://thunderbox.uwaterloo.ca/~fmilanouse strict;# -----------------------------------------------------------------------# variable declaration# -----------------------------------------------------------------------my $tab = 0;my %busname;my %busnumb;my %genname;my @list;my (@idxpv, @idxsw, @idxpq, @idxsh);my $nargin;my $verbose = 0;my $helpmsg = 0;my $colasadd = 0;my $addfile = 0;my ($i,$h,$k,$j);my $format;my $n = 0;my $npv = -1;my $nsw = -1;my $npq = -1;my $npl = -1;my $nsh = -1;my $ntw = -1;my $ngen = 1;my $pbas = 100;my $nbus = -1;my $nline = -1;my $narea = -1;my $flag_bus = 0;my $flag_line = 0;my $flag_area = 0;my $flag_trsf = 0;my $flag = 1;my $key;my $value;my $add;my $unit;my $length;my $zn;my @data;my @busidx;my (@vn,@ein,@ang,@pag,@prg,@qmi,@qma,@pac,@prc,@psh,@qsh,@vmax,@vmin,@switch); my (@kvbase,@busfr,@busto,@rest,@reat,@susc,@tap,@phi,@imax,@kt,@sbase);	    my (@kvsh,@bsh,@gsh);my (@r12,@r23,@r13,@x12,@x23,@x13,@twbus1,@twbus2,@twbus3);my (@twkv1,@twkv2,@twkv3,@twtap,@twbase);# -----------------------------------------------------------------------# check inputs# -----------------------------------------------------------------------$nargin = @ARGV;$nargin || die "Error: No input data file.\n";my $title1 = 'Generic NEPLAN Data Format File '.$ARGV[0];my $title2 = '   ';# -----------------------------------------------------------------------# check options# -----------------------------------------------------------------------while ($ARGV[0] =~ /^-/) {    if ($ARGV[0] =~ /v/) {$verbose = 1;}    if ($ARGV[0] =~ /h/) {$helpmsg = 1;}    if ($ARGV[0] =~ /a/) {	$colasadd = 1;	$addfile = $ARGV[1];	@ARGV = @ARGV[0, 2 .. $#ARGV];  	$nargin--;    }    shift(@ARGV);    $nargin--;    if ($nargin == 0) { 	last;    }}# -----------------------------------------------------------------------# help (if requested)# -----------------------------------------------------------------------if ($helpmsg) {    print "\nNEPLAN2PSAT converts NEPLAN data files into PSAT data files.\n\n";    print "psse2psat <options> fileinput <fileoutput>\n";    print "  -v   verbose\n";    print "  -h   print this help and exit\n\n";    print "Author:   Federico Milano\n";    print "Date:     30-May-2005\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 NDT data file# -----------------------------------------------------------------------print "Opening NEPLAN NDT file \"$ARGV[0]\"...\n";carret();open(IN,$ARGV[0]) || die "cannot open $ARGV[0]: $!\n";# -----------------------------------------------------------------------# scan input data file# -----------------------------------------------------------------------# read identification data$_ = <IN>; # discard first lineif ($_ =~ /;/) {    $tab = ';';} elsif ($_ =~ /\t/) {    $tab = '\t';} elsif ($_ =~ /,/) {    $tab = ',';} else {    die "Unknown separator in .ndt file";}@list = split(/$tab/);while (<IN>) {    chomp;    if ($tab ne ',') {	$_ =~ s/,/\./g;    }    @data = split(/$tab/);    # build index of buses    # -------------------------------------------------------------------    $add = 1;    while ( ($key, $value) = each(%busname) ) {	if ($key eq $data[0]) {	    $add = 0;	}	        }    if ($add) {	$nbus++;	$busidx[$nbus] = $nbus+1;	$busname{$data[0]} = $nbus;    }    # determine bus type and save data    # -------------------------------------------------------------------    $value = $busname{$data[0]};    $vmax[$value] = $data[6]/100;    $vmin[$value] = $data[5]/100;    if (not $ein[$value]) {	$ein[$value] = $data[7]/100;    }    $ang[$value] = 0;    $qma[$value] = 0;    $qmi[$value] = 0;    if ($data[22] eq "T") {	$switch[$value] = 1;    } elsif ($data[22] eq "F") {	$switch[$value] = 0;    }        # This is to avoid multiple slack buses in the same network    if ($nsw == 0 and $data[1] eq "SL") {	$data[1] = "PV";    }    # This is to avoid multiple PV generators at the same bus    if ($genname{$data[0]}) {	$data[1] = "PQ";    }    # This is to avoid multiple PQ loads at the same bus    if ($pac[$value] or $prc[$value]) {	if (!$data[3]) {$data[3] = 0;} 	$pac[$value] += $data[3]/$pbas;	if (!$data[4]) {$data[4] = 0;} 	$prc[$value] += $data[4]/$pbas;	$data[1] = "NOTHING";    }        if ($data[1] eq "SL") {	$nsw++;	$ngen++;	$genname{$data[0]} = $ngen-1;	$idxsw[$nsw] = $value;	if ($data[10] and $data[3]) {	    $pag[$value] = -$data[10]*$data[3]/$pbas;	} else {	    $pag[$value] = 0;	}  	if ($data[21] == 0) {	    $ein[$value] = $data[7]/100;	} else {	    $ein[$value] = $data[21]/100;	}	$ang[$value] = 0;    } elsif ($data[1] eq "PV") {	$npv++;	$ngen++;	$genname{$data[0]} = $ngen-1;	$idxpv[$npv] = $value;	$pag[$value] = -$data[10]*$data[3]/$pbas;	$ein[$value] = $data[21]/100;    } elsif ($data[1] eq "PQ") {	if (!$data[3]) {$data[3] = 0;} 	$pac[$value] = $data[3]/$pbas;	if (!$data[4]) {$data[4] = 0;} 	$prc[$value] = $data[4]/$pbas;	if ($pac[$value] != 0 or $prc[$value] != 0) {	    $npq++;	    $idxpq[$npq] = $value;	    $pac[$value] = $data[10]*$data[3]/$pbas;	    $prc[$value] = $data[10]*$data[4]/$pbas;	}    } elsif ($data[1] eq "NOTHING") {        # nothing to do ...    } else {	print "Conversion from bus type " . $data[1] . "is not supported.";    }}# -----------------------------------------------------------------------# close NDT data file# -----------------------------------------------------------------------close(IN) || die "cannot close $ARGV[0]: $!\n";# -----------------------------------------------------------------------# open EDT data file# -----------------------------------------------------------------------if (!$addfile) {    $addfile = $ARGV[0];    $addfile =~ s/\.ndt$/\.edt/;}print "Opening NEPLAN EDT file \"$addfile\"...\n";open(IN,$addfile) || die "cannot open $addfile: $!\n";# -----------------------------------------------------------------------# scan input data file# -----------------------------------------------------------------------# read identification data$_ = <IN>; # discard first lineif ($_ =~ /;/) {    $tab = ';';} elsif ($_ =~ /\t/) {    $tab = '\t';} elsif ($_ =~ /,/) {    $tab = ',';} else {    die "Unknown separator in .edt file";}@list = split(/$tab/);while (<IN>) {    chomp;    if ($tab ne ',') {	$_ =~ s/,/\./g;    }    @data = split(/$tab/);    if ($data[0] == 1) { # transmission line	$nline++;	addbus($data[5]);	$busfr[$nline] = $busname{$data[5]}+1;	$vn[$busname{$data[5]}] = $data[12];	addbus($data[6]);	$busto[$nline] = $busname{$data[6]}+1;	$vn[$busname{$data[6]}] = $data[12];	$sbase[$nline] = $pbas;	$kvbase[$nline] = $data[12];	$unit = $data[35]; # 1 => Ohm/km	                   # 2 => Ohm/mile                           # 3 => Ohm/ 1000 feet	$length = $data[31];	$zn = $data[12]*$data[12]/$pbas;	if ($unit == 1 or $unit == 2 or $unit == 3) {	    $reat[$nline] = $length*$data[19]/$zn;	    $rest[$nline] = $length*$data[22]/$zn;	    $susc[$nline] = $zn*$length*$data[25]/1000000;	} else {	    print "* * * Unknown units for line length. Guessing [p.u.]\n";	    $reat[$nline] = $data[19];	    $rest[$nline] = $data[22];	    $susc[$nline] = $data[25];	    	} 	$kt[$nline] = 0;	$tap[$nline] = 1; 	$phi[$nline] = 0; 	$imax[$nline] = 1.7320508*$data[12]*$data[18]/$pbas/1000;	    } elsif ($data[0] == 2) { # coupling transmission line	$nline++;	addbus($data[5]);	addbus($data[6]);	$busfr[$nline] = $busname{$data[5]}+1;

⌨️ 快捷键说明

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