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

📄 simpow2psat

📁 基于PSAT 软件的多目标最优潮流计算用于中小型电力系统的分析和管理
💻
📖 第 1 页 / 共 2 页
字号:
#!/usr/bin/perl -w# SIMPOW2PSAT converts SIMPOW data file into PSAT data file## SIMPOW2PSAT <OPTIONS> FILEINPUT <FILEOUTPUT>## Author:  Juan Carlos Morataya# Date:    14-Nov-2005# Version: 1.0.0##E-mail:    jmorataya@eegsa.netuse 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 $ngen = -1;my $nline = -1;my $ntitle = -1;my $ncom = -1;my $ntw = -1;my $nsvc = -1;my $ndyn = -1;my $pbase;my ($kvb,$kae,$ein,$ang,);my ($swbus,$swsb,$swvs,$swqt,    $swqb,$swpg,$swpb,$swpt);my (@plbus,@plip,@pliq,@plyp,@plyq);my (@pqbus,@pqpl,@pqql);    my $title = 'Generic SIMPOW Data Format File.';my $pbas = 100;my $fsys = 60;my $format;my @data;my (@bustw1,@bustw2,@bustw3,@x12,@x13,@x23,@r12,@r13,@r23,@rt1a,@rt1b,@rt1c,    @rt2a,@rt2b,@rt2c,@rt3a,@rt3b,@rt3c);my (@kvb,@kzo,@kae,@ein,@ang,@bustype,    @busidx,@busname,@pload,@qload,@qcap,    @qmi,@qma,@bshunt,@title,@pbtf,@lght,@tfsb);my (@pvbus,@pvsb,@pvpg,@pvvs,    @pvqt,@pvqb,@pvpt,@pvpb);    my (@swidx,@pvidx,@pqidx,@idxsh,    @vmax,@vmin,@psh,@qsh);my (@busfr,@bustt);my (@rest,@reat,@susc,@ratea,@rateb,    @ratec,@phas,@ratio);	    my (@idxsvc,@svcbus,@svcbma,@svcbmi,    @svcref,@rgn,@rtc);my (@synidx,@pbgen,@mstt,@xd,@xq,@xdp,@xqp,@xdb,@xqb,@xl,    @td0p,@td0b,@tq0p,@tq0b,@se1d,@se2d,@se1q,@se2q,@damp,@gbas,@ra);my (%kvbase,%nameidx,%einsch,%genbas);    # -----------------------------------------------------------------------# 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;    }}$title = 'Generic SIMPOW Data Format File '.$ARGV[0];# -----------------------------------------------------------------------# help (if requested)# -----------------------------------------------------------------------if ($helpmsg) {    print "\nSIMPOW2PSAT converts SIMPOW 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:   Juan Carlos Morataya\n";    print "Date:     14-Nov-2005\n";    print "Version:  1.0.0\n\n";    print "E-mail:   jmorataya\@eegsa.net\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 OPTPOW data file# -----------------------------------------------------------------------print "Opening OPTPOW/SIMPOW file \"$ARGV[0]\"...\n";carret();open(IN,$ARGV[0]) || die "cannot open $ARGV[0]: $!\n";# -----------------------------------------------------------------------# scan input data file# -----------------------------------------------------------------------# read commentswhile (<IN>) {    chomp;    last if /^\*/;    $ntitle++;    $title[$ntitle] = $_;}# read general datawhile (<IN>) {    chomp;    last if /^END/;    if (/SN/) {	$pbase = assign($_,'SN',2,100);    }    if (/LBASE/) {	$pbas = assign($_,'LBASE',5,100);    }}# read bus datawhile (<IN>) {    chomp;    next if /^!/;    next if /^NODES/;    last if /^END/;    @data = splitdata($_);    $nbus++;    $busidx[$nbus] = $nbus+1;    $busname[$nbus] = $data[1];    $kvb[$nbus] = assign($_,'VOLT',4,1);    $kzo[$nbus] = assign($_,'AREA',4,1);    $kvbase{$busname[$nbus]} = $kvb[$nbus];    $kvbase{$busidx[$nbus]} = $kvb[$nbus];    $nameidx{$busname[$nbus]} = $busidx[$nbus];}# read line datawhile (<IN>) {    chomp;    next if /^!/;    next if /^LINES/;    last if /^END/;    @data = splitdata($_);    $nline++;    $busfr[$nline] = $data[1];    $bustt[$nline] = $data[2];    $lght[$nline] = assign($_,'LENGTH',6,1);    $rest[$nline] = $lght[$nline] * abs(assign($_,'REST',4,0));    $reat[$nline] = $lght[$nline] * abs(assign($_,'REAC',4,0));    $susc[$nline] = $lght[$nline] * abs(assign($_,'SUSC',4,0));}# read transformer datawhile (<IN>) {    chomp;    next if /^!/;    next if /^TRANSFORMERS/;    last if /^END/;    @data = splitdata($_);    $nline++;    $busfr[$nline] = $data[1];    $bustt[$nline] = $data[2];    $tfsb[$nline] = assign($_,'SN',2,100);    $rest[$nline] = abs(assign($_,'ER12',4,0));    $reat[$nline] = abs(assign($_,'EX12',4,0));}# read shunts datawhile (<IN>) {    chomp;    next if /^!/;    next if /^SHUNT/;    last if /^END/;    @data = splitdata($_);    $nsh++;    $idxsh[$nsh] = $data[1];    $psh[$nsh] = -assign($_,'QPOW',4,0)/$pbas;}# read load datawhile (<IN>) {    chomp;    next if /^!/;    next if /^LOAD/;    last if /^END/;    @data = splitdata($_);    $j = pqidx($nameidx{$data[1]});     if ($j >= 0) { 	# add powers if there are multiple 	# PQ loads at the same bus	$pqpl[$j] += assign($_,'PPOW',4,0)/$pbas;	$pqql[$j] += assign($_,'QPOW',4,0)/$pbas;    } else {	$npq++;	$pqbus[$npq] = $nameidx{$data[1]};	$pqpl[$npq] = assign($_,'PPOW',4,0)/$pbas;	$pqql[$npq] = assign($_,'QPOW',4,0)/$pbas;    }}# read power directions datawhile (<IN>) {    chomp;    next if /^!/;    next if /^POWER/;    last if /^END/;    @data = splitdata($_);    $ngen++;    $bustype[$ngen] =  assign($_,'R',3,0);     if ($bustype[$ngen] == 1) {	$nsw++;	$swbus = $nameidx{$data[1]};	$swsb = $pbas;	$swpg = assign($_,'PPOW',4,0)/$swsb;	$swqt = assign($_,'QMIN',4,-999.99);	$swqb =  assign($_,'QMAX',4,999.99);	$swvs = assign($_,'V',1,0)/$kvbase{$data[1]};    } elsif ($bustype[$ngen] == 2) {	$j = pvidx($nameidx{$data[1]});	if ($j >= 0) { 	    # add powers if there are multiple 	    # PV generators at the same bus	    $pvpg[$j] += assign($_,'PPOW',4,0)/$pvsb[$npv];	    $pvqt[$j] += assign($_,'Qmin',4,-999.99)/$pvsb[$npv];	    $pvqb[$j] += assign($_,'Qmax',4,999.99)/$pvsb[$npv];	} else { 	    $npv++;	    $pvbus[$npv] = $nameidx{$data[1]};	    $pvsb[$npv] = $pbas;	    $pvpg[$npv] = assign($_,'PPOW',4,0)/$pvsb[$npv];	    $pvqt[$npv] = assign($_,'QMIN',4,-999.99/$pvsb[$npv]);	    $pvqb[$npv] = assign($_,'QMAX',4,999.99)/$pvsb[$npv];	    $pvvs[$npv] = assign($_,'V',1,0)/$kvbase{$data[1]};	}    } elsif ($bustype[$ngen] == 3) {	$j = pvidx($nameidx{$data[1]});	if ($j >= 0) { 	    # add powers if there are multiple 	    # PV generators at the same bus	    $pvpg[$j] += assign($_,'PPOW',4,0)/$pvsb[$npv];	    $pvqt[$j] += assign($_,'Qmin',4,-999.99)/$pvsb[$npv];	    $pvqb[$j] += assign($_,'Qmax',4,999.99)/$pvsb[$npv];	} else { 	    $npv++;	    $pvbus[$npv] = $nameidx{$data[1]};	    $pvsb[$npv] = $pbas;	    $pvpg[$npv] = assign($_,'PPOW',4,0)/$pvsb[$npv];	    $pvqt[$npv] = assign($_,'QMIN',4,-999.99/$pvsb[$npv]);	    $pvqb[$npv] = assign($_,'QMAX',4,999.99)/$pvsb[$npv];	    $pvvs[$npv] = 1;		}      } }# -----------------------------------------------------------------------# close OPTPOW data file# -----------------------------------------------------------------------close(IN) || die "cannot close $ARGV[0]: $!\n";# -----------------------------------------------------------------------# open DYNPOW/SIMPOW data file# -----------------------------------------------------------------------$ARGV[0] =~ s/\.optpow$/\.dynpow/;print "Opening DYMPOW/SIMPOW file \"$ARGV[0]\"...\n";carret();open(IN,$ARGV[0]) || die "cannot open $ARGV[0]: $!\n";# -----------------------------------------------------------------------# scan input data file# -----------------------------------------------------------------------# read commentswhile (<IN>) {    chomp;    last if /^\*/;    $ntitle++;    $title[$ntitle] = $_;} # read control datawhile (<IN>) {    chomp;    next if /^CONTROL/;    last if /^END/;}# read general datawhile (<IN>) {    chomp;    next if /^GENERAL/;    last if /^END/;    $fsys = assign($_,'FN',2,0,3);}# read dynamic synchronous machine datawhile (<IN>) {    chomp;    next if /^!/;    next if /^SYNCH/;    last if /^END/;    @data = splitdata($_);        # read first line    $ndyn++;    $synidx[$ndyn] = $data[1];    $xd[$ndyn] = assign($_,'XD',5,1.9);    $xq[$ndyn] = assign($_,'XQ',5,1.7);    $xl[$ndyn] = assign($_,'XA',2,0);    $xdp[$ndyn] = assign($_,'XDP',6,0.302);    $xqp[$ndyn] = assign($_,'XQP',5,0.50);        # read second line    $_ = <IN>;    chomp;    #print "$_\n";    $xdb[$ndyn] = assign($_,'XDS',3,0.204);    $xqb[$ndyn] = assign($_,'XQS',3,0.30);    $ra[$ndyn] = assign($_,'RA',2,1);    $td0p[$ndyn] = assign($_,'TD0P',12,8);    $tq0p[$ndyn] = assign($_,'TQ0P',12,0.8);    $td0b[$ndyn] = assign($_,'TD0S',4,0.04);    $tq0b[$ndyn] = assign($_,'TQ0S',4,0.02);

⌨️ 快捷键说明

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