📄 ge2psat
字号:
#!/usr/bin/perl -w# GE2PSAT converts GE data file into PSAT data file## GE2PSAT <OPTIONS> FILEINPUT <FILEOUTPUT>## Author: Juan Carlos Morataya# Date: 25-Oct-2005# Version: 1.0.0# # E-mail: jmorataya@eegsa.net#use strict;# -----------------------------------------------------------------------# variable declaration# -----------------------------------------------------------------------my $nargin = 0;my $verbose = 0;my $helpmsg = 0;my ($i,$j,$h,$k);my $nbus = -1;my $nsw = -1;my $npv = -1;my $npq = -1;my $npl = -1;my $nsh = -1;my $nline = -1;my $narea = -1;my $nzone = -1;my $ntitle = -1;my $ncom = -1;my $ntw = -1;my $nsvc = -1;my ($title1,$title2,$ver,);my $pbas = 100;my $freq = 60;my $format;my (@data,@data1,@data2,@data3);my (@kvb,@kzo,@kae,@ein,@ang,@bustype, @busidx,@busname,@pload,@qload,@qcap, @qmi,@qma,@bshunt,@title,@comment, @vmax,@vmin,@pbtf,%busidx); my (@swidx,$swbus,$swsb,$swqt,$swqb,$swpg,$swpb,$swpt);my (@plbus,@plip,@pliq,@plyp,@plyq);my (@pqidx,@pqbus,@pqpl,@pqql,@pqstatus,@plstatus); my (@pvidx,@pvbus,@pvsb,@pvpg,@pvqt,@pvqb,@pvpt,@pvpb,@pvstatus); my (@idxsh,@psh,@qsh,@shstatus);my (@busfr,@bustt,@rest,@reat,@susc,@ratea,@rateb,@ratec, @phas,@ratio,@linestatus,@linekv,@kt); my (@idxsvc,@svcbus,@svcbma,@svcbmi,@svcref,@rgn,@rtc);my (@areanum,@areaslack,@areaexp,@areatol,@areaname,@areapnet,@areaqnet);my (@zonenum,@zonename,@zonepnet,@zoneqnet);# -----------------------------------------------------------------------# check inputs# -----------------------------------------------------------------------$nargin = @ARGV;$nargin || die "Error: No input data file.\n";# -----------------------------------------------------------------------# 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 "\nGE2PSAT converts GE data files into PSAT data files.\n\n"; print "ge2psat [options] fileinput [fileoutput]\n"; print " -v verbose\n"; print " -h print this help and exit\n\n"; print "Author: Juan Carlos Morataya and Federico Milano\n"; print "Date: 25-Oct-2005\n"; print "Update: 05-Mar-2008\n"; print "E-mail: jmorataya\@eegsa.net, Federico.Milano\@uclm.es\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 GE data file \"$ARGV[0]\"...\n";carret();open(IN,$ARGV[0]) || die "cannot open $ARGV[0]: $!\n";# -----------------------------------------------------------------------# scan data file# -----------------------------------------------------------------------# read titlewhile (<IN>) { chomp; if (/^title/) { next; } if (/^!/) { last; } $ntitle++; $title[$ntitle] = $_;}# read commentswhile (<IN>) { chomp; if (/^comments/) { next; } if (/^!/) { last; } $ncom++; $comment[$ncom] = $_;}# read solution parameterswhile (<IN>) { chomp; if (/^!/) { last; } if (/^sbas/) { @data = mysplit0($_); $pbas = $data[1]; }}# read bus datawhile (<IN>) { chomp; if (/^bus/) { next; } if (/^branch/) { last; } @data = mysplit($_); $nbus++; $busidx[$nbus] = $data[0]; $busidx{$busidx[$nbus]} = $nbus; $busname[$nbus] = $data[1]; $busname[$nbus] =~ s/\'/\'\'/g; $kvb[$nbus] = $data[2]; $ein[$nbus] = $data[5]; $ang[$nbus] = $data[6]*0.017453292519943; $kzo[$nbus] = $data[7]; $kae[$nbus] = $data[8]; $vmax[$nbus] = $data[9]; $vmin[$nbus] = $data[10]; if ($data[3] == 0) { $nsw++; $swbus = $data[0]; } }# read branch datawhile (<IN>) { chomp; # read first line my $branch_data = 0; if (/^transformer/) { last; } @data1 = mysplit($_); # read second line $_ = <IN>; chomp; @data2 = mysplit($_); if ($branch_data == 0) { if ($data1[9] == 1) { $busfr[++$nline] = $data1[0]; $bustt[$nline] = $data1[3]; if ($data[2]) { $linekv[$nline] = $data[2]; } else { $linekv[$nline] = $kvb[$busidx{$busfr[$nline]}]; } $pbtf[$nline] = $pbas; $kt[$nline] = 0; $linestatus[$nline] = $data1[9]; $rest[$nline] = $data1[10]; $reat[$nline] = $data1[11]; $susc[$nline] = $data1[12]; $ratea[$nline] = $data1[13]/$pbas; $rateb[$nline] = $data1[14]/$pbas; $ratec[$nline] = $data1[15]/$pbas; $ratio[$nline] = 0; $phas[$nline] = 0; } }}# read transformer datawhile (<IN>) { chomp; if (/^generator/) { last; } # read first line @data1 = mysplit($_); # read second line $_ = <IN>; chomp; @data2 = mysplit($_); # read third line $_ = <IN>; chomp; @data3 = mysplit($_); if ($data1[8] == 1) { $busfr[++$nline] = $data1[0]; $bustt[$nline] = $data1[3]; if ($data[2]) { $linekv[$nline] = $data[2]; } else { $linekv[$nline] = $kvb[$busidx{$busfr[$nline]}]; } if ($data[5]) { $kt[$nline] = $linekv[$nline]/$data[5]; } else { $kt[$nline] = $linekv[$nline]/$kvb[$busidx{$bustt[$nline]}]; } $linestatus[$nline] = $data1[8]; $rest[$nline] = $data1[23]; $reat[$nline] = $data1[24]; $susc[$nline] = 0; $ratio[$nline] = $data2[16]; $phas[$nline] = 0; if ($data1[19]) { $pbtf[$nline] = $data1[19]; } else { $pbtf[$nline] = $pbas; } $ratea[$nline] = $data2[6]/$pbtf[$nline]; $rateb[$nline] = $data2[7]/$pbtf[$nline]; $ratec[$nline] = $data2[8]/$pbtf[$nline]; }}# read generator datawhile (<IN>) { chomp; if (/^load/) { last; } # read first line @data1 = mysplit($_); # read second line $_ = <IN>; ## second line is not need for now ... # chomp; # @data2 = mysplit($_); if ($data1[5] == 1) { if ($data1[0] == $swbus) { $swsb = $data1[19]; if ($swsb == 0) { $swsb = $pbas; } $swbus = $data1[0]; $swpg = $data1[13]/$swsb; $swpt = $data1[14]/$swsb; $swpb = $data1[15]/$swsb; $swqt = $data1[17]/$swsb; $swqb = $data1[18]/$swsb; #$swvs = $ein[$busidx{$swbus}]; } else { $pvsb[++$npv] = $data1[19]; if ($pvsb[$npv] == 0) { $pvsb[$npv] = $pbas; } $pvbus[$npv] = $data1[0]; $pvstatus[$npv] = $data1[5]; $pvpg[$npv] = $data1[13]/$pvsb[$npv]; $pvqt[$npv] = $data1[17]/$pvsb[$npv]; $pvqb[$npv] = $data1[18]/$pvsb[$npv]; $pvpt[$npv] = $data1[14]/$pvsb[$npv]; $pvpb[$npv] = $data1[15]/$pvsb[$npv]; } } }# read load datawhile (<IN>) { chomp; if (/^shunt/) { last; } @data = mysplit($_); $pqbus[++$npq] = $data[0]; $pqstatus[$npq] = $data[5]; $pqpl[$npq] = $data[6]/$pbas; $pqql[$npq] = $data[7]/$pbas; if ($data[8] != 0 || $data[9] != 0 || $data[10] != 0 || $data[11] != 0) { $npl++; $plstatus[$npq] = $data[5]; $plbus[$npl] = $data[0]; $plip[$npl] = $data[8]/$pbas; $pliq[$npl] = $data[9]/$pbas; $plyp[$npl] = $data[10]/$pbas; $plyq[$npl] = $data[11]/$pbas; }}# read shunt datawhile (<IN>) { chomp; if (/^svd/) { last; } @data = mysplit($_); if ($data[10] == 1) { if ($data[13] != 0 || $data[14] != 0) { $idxsh[++$nsh] = $data[0]; $shstatus[$nsh] = $data[10]; $psh[$nsh] = $data[13]; $qsh[$nsh] = $data[14]; } }}# read svc datawhile (<IN>) { chomp; if (/^area/) { last; } # read first line @data1 = mysplit($_); # read second line $_ = <IN>; chomp; @data2 = mysplit($_); $j = pvidx($data1[0]); # add SVC only if there is no PV at the same bus if ($j >= 0) { printf "SVC at PV bus " . $data1[0] . " will be ignored.\n" ; } else { if ($data1[5] == 1) { $idxsvc[++$nsvc] = $data1[0]; if ($data1[17] != 0) { $svcbmi[$nsvc] = $data1[17]; } else { $svcbmi[$nsvc] = -1; } if ($data1[18] != 0) { $svcbma[$nsvc] = $data1[18]; } else { $svcbma[$nsvc] = 1; } $rgn[$nsvc] = $data2[2]; $rtc[$nsvc] = $data2[3]; # add PV generator to initialize SVC component $pvsb[++$npv] = $pbas; $pvbus[$npv] = $data1[0]; $pvpg[$npv] = 0; $pvqt[$npv] = 99; $pvqb[$npv] = -99; $pvpt[$npv] = 0; $pvpb[$npv] = 0; } }}# read area datawhile (<IN>) { chomp; if (/^zone/) { last; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -