📄 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/~fmilano
use 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 variables
my $pbas = 100;
my $freq = 60;
# BUS variables
my $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 variables
my $nsw = -1;
my (@idxsw,@vsw,@tsw);
# LINE SHUNT variables
my $nshunt = -1;
my (@shname,@gsh,@bsh);
# LINE variables
my $nline = -1;
my (@busfr,@busto);
my (@rest,@reat,@susc,@kt,@phsf,@tfas,@sbas);
# ZIP LOAD variables
my $nzip = -1;
my (@ppzip,@pqzip,@ipzip,@iqzip,@zpzip,@zqzip,@kvzip);
# LTC variables
my $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 line
while (<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 + -