📄 th2psat
字号:
#!/usr/bin/perl -w# TH2PSAT converts TH data file into PSAT data file## TH2PSAT <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,$h,$k);my $format;my $n = 2;my (@dum,$idx);# System variablesmy $pbas = 100;my $freq = 60;# BUS variablesmy $nbus = 0;my $npv = -1;my $npq = -1;my $nsh = -1;my (@idxpv, @idxpq, @idxsh, @idxzip);my (@ein,@ang,@pag,@prg,@qmi,@qma,@tap,@pac,@prc,@psh,@qsh,@vmi,@vma); my (%busname,%genname,%busidx);# Slack variablesmy $nsw = -1;my (@idxsw,@vsw,@tsw);# LINE SHUNT variablesmy $nshunt = -1;my (@shname,@gsh,@bsh);# LINE variablesmy $nline = -1;my (@busfr,@busto);my (@rest,@reat,@susc,@kt,@phsf,@tfas,@sbas); # ZIP LOAD variablesmy $nzip = -1;my (@ppzip,@pqzip,@ipzip,@iqzip,@zpzip,@zqzip,@kvzip);# LTC variablesmy $nltc = -1;my (@ltcfr,@ltcto,@rltc,@xltc,@mltc,@mstep,@mmax,@mmin);# -----------------------------------------------------------------------# check inputs# -----------------------------------------------------------------------$nargin = @ARGV;$nargin || die "Error: No input data file.\n";my $title1 = 'Generic TH Data Format File '.$ARGV[0];my $title2;# -----------------------------------------------------------------------# 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 "\nTH2PSAT converts TH data files into PSAT data files.\n\n"; print "th2psat <options> fileinput <fileoutput>\n"; print " -v verbose\n"; print " -h print this help and exit\n\n"; print "Author: Federico Milano\n"; print "Date: 14-Jan-2004\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 TH file \"$ARGV[0]\"...\n";carret();open(IN,$ARGV[0]) || die "cannot open $ARGV[0]: $!\n";# -----------------------------------------------------------------------# scan input data file# -----------------------------------------------------------------------$title2 = <IN>;$_ = <IN>; # dummy linewhile (<IN>) { chomp; $n++; @dum = split(/\s+/); if (/^\*/) { # comment next; } elsif (/^\s+/) { # blank line $verbose && print "Line $n is blank\n"; next; } elsif ($_ eq '') { # empty line $verbose && print "Line $n is empty\n"; next; } elsif (/^SYSBASE/) { # System base $pbas = $dum[2]; } elsif (/^SYSF(RE|ER)Q/) { # System frequency $freq = $dum[2]; } elsif (/^THLINE/) { # transmission line $nline++; $busfr[$nline] = $dum[2]; $busto[$nline] = $dum[3]; $rest[$nline] = $dum[4]; $reat[$nline] = $dum[5]; $susc[$nline] = -2*$dum[6]; $kt[$nline] = 0; $idx = addbus($dum[2]); $idx = addbus($dum[3]); } elsif (/^LINE/) { # transmission line $nline++; $busfr[$nline] = $dum[2]; $busto[$nline] = $dum[3]; $rest[$nline] = $dum[4]; $reat[$nline] = $dum[5]; $susc[$nline] = -2*$dum[6]; $sbas[$nline] = $dum[7]; $kt[$nline] = 0; $idx = addbus($dum[2]); $idx = addbus($dum[3]); } elsif (/^THTRFO/) { # transformer $nline++; $busfr[$nline] = $dum[2]; $busto[$nline] = $dum[3]; $rest[$nline] = $dum[4]; $reat[$nline] = $dum[5]; $tfas[$nline] = $dum[6]/100; $kt[$nline] = 1; $idx = addbus($dum[2]); $idx = addbus($dum[3]); } elsif (/^TRFOPH/) { # transformer $nline++; $busfr[$nline] = $dum[2]; $busto[$nline] = $dum[3]; $rest[$nline] = $dum[4]; $reat[$nline] = $dum[5]; $tfas[$nline] = $dum[6]/100; $phsf[$nline] = $dum[7]; $kt[$nline] = 1; $idx = addbus($dum[2]); $idx = addbus($dum[3]); } elsif (/^TRFOB2/) { # transformer $nline++; $busfr[$nline] = $dum[2]; $busto[$nline] = $dum[3]; $rest[$nline] = $dum[4]; $reat[$nline] = $dum[5]; $tfas[$nline] = $dum[10]/100; $kt[$nline] = 1; $nshunt++; $shname[$nshunt] = $busfr[$nline]; $gsh[$nshunt] = $dum[6]; $bsh[$nshunt] = $dum[7]; $nshunt++; $shname[$nshunt] = $busto[$nline]; $gsh[$nshunt] = $dum[8]; $bsh[$nshunt] = $dum[9]; $idx = addbus($dum[2]); $idx = addbus($dum[3]); } elsif (/^TRFO/) { # transformer $nline++; $busfr[$nline] = $dum[2]; $busto[$nline] = $dum[3]; $rest[$nline] = $dum[4]; $reat[$nline] = $dum[5]; $tfas[$nline] = $dum[6]/100; $sbas[$nline] = $dum[7]; $kt[$nline] = 1; $idx = addbus($dum[2]); $idx = addbus($dum[3]); } elsif (/^TAPCV/) { # transformer # not implemented print "Warning: TAPCV data are not used"; } elsif (/^TAP/) { # transformer $nltc++; $rltc[$nltc] = $dum[4]; $xltc[$nltc] = $dum[5]; if ($dum[16] == 1) { # control on sending side $ltcfr[$nltc] = $dum[3]; $ltcto[$nltc] = $dum[2]; $mltc[$nltc] = $dum[10]/100; $mstep[$nltc] = $dum[12]/100; } else { # control on ending side $ltcfr[$nltc] = $dum[2]; $ltcto[$nltc] = $dum[3]; $mltc[$nltc] = $dum[11]/100; $mstep[$nltc] = $dum[13]/100; } $mmax[$nltc] = $dum[17]*$mstep[$nltc]+$mltc[$nltc]; $mmin[$nltc] = $dum[18]*$mstep[$nltc]+$mltc[$nltc]; if ($dum[6] || $dum[7]) { $nshunt++; $shname[$nshunt] = $ltcfr[$nline]; $gsh[$nshunt] = $dum[6]; $bsh[$nshunt] = $dum[7]; } if ($dum[8] || $dum[9]) { $nshunt++; $shname[$nshunt] = $ltcto[$nline]; $gsh[$nshunt] = $dum[8]; $bsh[$nshunt] = $dum[9]; } $idx = addbus($dum[2]); $idx = addbus($dum[3]); } elsif (/^GENERCV/) { # PV generator $idx = addbus($dum[2]); $npv++; $idxpv[$npv] = $idx; $genname{$dum[1]} = $idx; $pag[$idx] = $dum[3]/$pbas; $prg[$idx] = $dum[4]/$pbas; } elsif (/^GENERDATA/) { # generator data $idx = $genname{$dum[1]}; $qmi[$idx] = $dum[10]/$pbas; $qma[$idx] = $dum[9]/$pbas; $vmi[$idx] = $dum[12]; $vma[$idx] = $dum[11];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -