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

📄 ge2psat

📁 电力系统分析计算程序
💻
📖 第 1 页 / 共 2 页
字号:
#!/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 + -