📄 cyme2psat
字号:
#!/usr/bin/perl -w# CYME2PSAT converts CYME data file into PSAT data file## CYME2PSAT <OPTIONS> FILEINPUT <FILEOUTPUT>## Author: Federico Milano# Date: 28-Jan-2006# Version: 1.0.0# # E-mail: Federico.Milano@uclm.es#use strict;# -----------------------------------------------------------------------# variable declaration# -----------------------------------------------------------------------my $nargin = 0;my $verbose = 0;my $helpmsg = 0;my ($i,$h,$k);my $ntitle = -1;my $nbus = -1;my $nsw = -1;my $npv = -1;my $npq = -1;my $nsh = -1;my $nline = -1;my $narea = -1;my $nhvdc = -1;my $zone = 0;my ($title1,@title,$ver);my $pbas = 100;my $freq = 60;my $blanks = " " x 80;my $format;my $filetype;my ($header,$vmax,$vmin,$init,$iter,$dtol,$intc,$ovld);my @data;my $value;my $bustype;my (@kvb,@kzo,@busidx,@busname,@busang, @busvol,@pgen,@pload,@qload,@qmi,@qma,@shur,@shux);my (@swidx,@pvidx,@pqidx,@shidx);my (@areanum,@areaexp,@areatol);my (@busfr,@bustt,@rest,@reat,@susc,@rateA,@rateS,@phs,@tap); my (@rbus,@ibus,@rnum,@inum,@rKV,@iKV,@alpha,@gamma,@rdc,@pdes,@vdes);my (%kvbase,%zoneid);# -----------------------------------------------------------------------# 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 "\nCYME2PSAT converts CYME data files into PSAT data files.\n\n"; print "CYME2psat <options> fileinput <fileoutput>\n"; print " -v verbose\n"; print " -h print this help and exit\n\n"; print "Author: Federico Milano\n"; print "Date: 28-Jan-2006\n"; print "Version: 1.0.0\n\n"; print "E-mail: 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 CYME data file \"$ARGV[0]\"...\n";carret();open(IN,$ARGV[0]) || die "cannot open $ARGV[0]: $!\n";# read header$_ = <IN>;chomp;$_ = $_ . $blanks; $header = substr($_,0,2);if ($header == 81) { print "CYME data file is in free format\n"; $filetype = 0;} elsif ($header == 91) { $filetype = 1;} else { die "Header row is in a wrong format. Conversion interrupted.\n";}if ($filetype) { $title1 = assign($_,3,42,"Generic CYME data file"); $pbas = assign($_,45,50,100); $vmax = assign($_,51,56,1.1); $vmin = assign($_,57,62,0.9); $init = assign($_,68,68,1); $iter = assign($_,69,71,60); $dtol = assign($_,72,76,0.0001); $intc = assign($_,79,79,0); $ovld = assign($_,80,80,0); } else { @data = split ',' , $_; $title1 = $data[1]; $pbas = $data[2]; $vmax = $data[3]; $vmin = $data[4]; $init = $data[5]; $iter = $data[6]; $dtol = $data[7]; $intc = $data[8]; $ovld = $data[9]; }# read datawhile (<IN>) { chomp; $_ = $_ . $blanks; if ($filetype) { if (/^92/) { $header = 92; $ntitle++; $title[$ntitle] = substr($_,5,-1); } elsif (/^01/) { $header = 1; $narea++; $areanum[$narea] = assign($_,3,6,0); $areaexp[$narea] = assign($_,57,62,0)/$pbas; $areatol[$narea] = assign($_,63,68,0)/$pbas; } elsif (/^02/) { $header = 2; $nbus++; $busidx[$nbus] = assign($_,3,6,0); $busname[$nbus] = substr($_,6,6); $busname[$nbus] =~ s/(\s*)$//; $kzo[$nbus] = assign($_,13,14,1); $kvb[$nbus] = assign($_,15,20,1); $kvbase{$busidx[$nbus]} = $kvb[$nbus]; $pload[$nbus] = assign($_,21,26,0)/$pbas; $qload[$nbus] = assign($_,27,32,0)/$pbas; $shur[$nbus] = assign($_,33,38,0); $shux[$nbus] = assign($_,39,44,0); $busvol[$nbus] = assign($_,45,50,1)/$kvb[$nbus]; $pgen[$nbus] = assign($_,51,56,0)/$pbas; $qmi[$nbus] = assign($_,63,69,0)/$pbas; $qma[$nbus] = assign($_,57,62,0)/$pbas; $bustype = assign($_,70,70,3); $busang[$nbus] = 3.14159265358979*assign($_,71,77,1)/180; if ($bustype == 1) { $nsw++; $swidx[$nsw] = $nbus; } elsif ($bustype == 2) { $npv++; $pvidx[$npv] = $nbus; } if ($shur[$nbus] != 0 || $shux[$nbus] != 0) { $nsh++; $shidx[$nsh] = $nbus; } if ($pload[$nbus] != 0 || $qload[$nbus] != 0) { $npq++; $pqidx[$npq] = $nbus; } } elsif (/^03/) { $header = 3; $nline++; $busfr[$nline] = assign($_,3,6,0); $bustt[$nline] = assign($_,15,18,0); $rest[$nline] = assign($_,30,35,0); $reat[$nline] = assign($_,36,41,0); $susc[$nline] = assign($_,42,47,0); if ($ovld == 0) { $rateA[$nline] = assign($_,48,53,0)* $kvbase{$busfr[$nline]}*sqrt(3)/$pbas; $rateS[$nline] = 0; } else { $rateA[$nline] = 0; $rateS[$nline] = assign($_,48,53,0)/$pbas; } $tap[$nline] = evaltap(assign($_,54,59,0), assign($_,60,65,0), $kvbase{$busfr[$nline]}, $kvbase{$bustt[$nline]}); $phs[$nline] = evalphs(assign($_,66,71,0)); } elsif (/^04/) { # rectifier data $header = 4; $nhvdc++; $rbus[$nhvdc] = assign($_,3,6,0); $rnum[$nhvdc] = assign($_,15,18,0); $rKV[$nhvdc] = assign($_,19,24,0); $alpha[$nhvdc] = assign($_,37,42,0); $rdc[$nhvdc] = assign($_,43,48,0); } elsif (/^00/) { if ($header == 1) { # nothing to do for now... } elsif ($header == 2) { # nothing to do for now... } elsif ($header == 3) { # nothing to do for now... } elsif ($header == 4) { # inverter data $ibus[$nhvdc] = assign($_,3,6,0); $inum[$nhvdc] = assign($_,15,18,0); $iKV[$nhvdc] = assign($_,19,24,0); $gamma[$nhvdc] = assign($_,37,42,0); $pdes[$nhvdc] = assign($_,43,48,0); $vdes[$nhvdc] = assign($_,49,54,0); } } } else { @data = split ',' , $_; if ($data[0] eq "92") { $header = 92; $ntitle++; $title[$ntitle] = substr($_,5,-1); } elsif ($data[0] eq "01") { $header = 1; $narea++; $areanum[$narea] = $data[2]; $areaexp[$narea] = $data[3]/$pbas; $areatol[$narea] = $data[4]/$pbas;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -