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

📄 psse2psat

📁 电力系统分析计算程序
💻
📖 第 1 页 / 共 3 页
字号:
#!/usr/bin/perl -w# PSSE2PSAT converts PSS/E data file into PSAT data file## PSSE2PSAT <OPTIONS> FILEINPUT <FILEOUTPUT># # Author:   Federico Milano# Date:     19-July-2004# Update:   24-March-2006 by JC.Morataya@ieee.org# Update:   12-December-2007# Version:  1.3##E-mail:    fmilano@thunderbox.uwaterloo.ca#Web-site:  http://thunderbox.uwaterloo.ca/~fmilano   use strict;use constant V23 => 23;use constant V24 => 24;use constant V25 => 25;use constant V26 => 26;use constant V29 => 29;use constant V30 => 30; # -----------------------------------------------------------------------# variable declaration# -----------------------------------------------------------------------my $nargin = 0;my $verbose = 0;my $helpmsg = 0;my ($i,$h,$k,$j);my $format;my $format1;my $n = 0;my $npv = -1;my $nsw = -1;my $npq = -1;my $npl = -1;my $nsh = -1;my $ntr = -1;my $nsvc = -1;my $title1 = 'PSS/E Data Format File '.$ARGV[0];my $title2 = '   ';my $pbas = 100;my $nbus = -1;my $nline = -1;my $narea = -1;my $nzone = -1;my $ncard = -1;my $flag_bus = 0;my $flag_line = 0;my $flag_area = 0;my $flag_trsf = 0;my $V26_up = 0;my $V25_down = 0;my $guess = 0;my $psse_v = 0;my ($ver,$pos,$rev,$block);my $flag_version = V29; # By default, version is supposed to be 29 my @data;my (@busidx,@bustype,@busname,%extname);my (@ein,@ang,@pag,@prg,@qmi,@qma,@tap,    @pac,@prc,@psh,@qsh,@kae,@kzo,@kvb);	    my (@plbus,@plip,@pliq,@plyp,@plyq);my (@pqbus,@pqpl,@pqql,@stt,@chkcard,@pqu,@shu,@plu,@pvu);my $stt = '%';my %kvbase;my %busidw;my (@svcbus,@svcbma,@svcbmi,@svcref);my (@areaidx,@areabus,@areapdes,@areaptol,@areaname);my (@zoneidx,@zonename);# -----------------------------------------------------------------------# 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 "\nPSSE2PSAT converts PSS/E 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:   Federico Milano\n";print " Date:     19-July-2004\n";print " Update:   24-March-2006 by JC.Morataya\@ieee.org\n";print " Version:  1.2.1\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_/;    $ARGV[1] =~ s/^d_d/d_/;    $ARGV[1] =~ s/[^a-zA-Z0-9_\.]/_/g;    $ARGV[1] =~ s/\..*/.m/;} elsif ($nargin == 0) {    die "Error: Input file name is missing.\n";}# -----------------------------------------------------------------------# find data version# -----------------------------------------------------------------------print "Opening PSS/E file \"$ARGV[0]\"...\n";carret();open(IN,$ARGV[0]) || die "cannot open $ARGV[0]: $!\n";while (<IN>) {    if (/PSS\/E-30/) { $flag_version = V30; }    if (/Version:24/) { $flag_version = V24; }    if (/Version:25/) { $flag_version = V25; }    if (/Version:26/) { $flag_version = V26; }    next if !/\d+/;    if (/^\s*0/) {	$ncard++; 	$chkcard[$ncard] = $_;	if ($ncard == 0) {	    $pos = index "$_" , 'RAW';	    $block = substr "$_",$pos,16;	    $block =~ s/\s+//g;	    if ($pos == -1) {		$pos = index "$_" , 'PSS/E';		$block = substr "$_",$pos,16;		$block =~ s/\s+//g;		$psse_v = 1;	    }	    unless ($pos == -1) {		if ($psse_v != 1) {		    $ver = substr "$block",3,2;		    $rev = substr "$block",9,2;		    print "PSS/E V-"."$ver"." revision "."$rev"." file found...\n";		} else {		    $ver = substr "$block",6,4;		    print "PSS/E V-"."$ver"." file found...\n";		}		$guess = 1;	    }	}	if ($ncard == 4) { last; }	if ($chkcard[$ncard] =~ /^\s*0\s*\//) {	    #if ($ncard == 3 && $guess == 0 ) { print "PSS/E Version > 25 file found...\n"; }	    $V26_up = 1;	} else {	    #if ($ncard == 3 && $guess == 0) { print "PSS/E Version < 26 file found...\n"; }	}     } else {	if ($ncard == 0) {	    $V25_down = index "$_" , '\'';	    if ($V25_down > 20) {		$flag_version = V23;	    }	} elsif ($ncard == 3) {	    if (/,,,/) {		if ($V26_up == 1) {		    $flag_version = V26;		} else {		    $flag_version = V24;		}	    }	}    }}	close (IN) || die "cannot close $ARGV[0]: $!\n";print "PSS/E data version " . $flag_version . "\n"; # -----------------------------------------------------------------------# open input data file# -----------------------------------------------------------------------#print "Scanning PSS/E file \"$ARGV[0]\"...\n";#carret();open(IN,$ARGV[0]) || die "cannot open $ARGV[0]: $!\n";   # -----------------------------------------------------------------------# scan input data file# -----------------------------------------------------------------------# read identification data$_ = <IN>;chomp;@data = mysplit($_);if ($data[1]) { # assign system base    $pbas = deblank($data[1]);    chomp($pbas);}  print "Power Base = " . $pbas . " MVA\n";$_ = <IN>;chomp;$title1 = $_;  # 1st header line$_ = <IN>;chomp;$title2 = $_;  # 2nd header line# bus data PSS/E V24, V29 my ($swbus,@idxsh,$nisl,@islbus); $nisl = -1;while (<IN>) {    chomp;    @data = mysplit($_);    last if /^\s*0/;     if ($flag_version != V23) {	$nbus++;	$busidx[$nbus] = int($data[0]);	$bustype[$nbus] = $data[3];	$busname[$nbus] = $data[1];	$extname{$busname[$nbus]} = $busidx[$nbus];	$kvb[$nbus] = $data[2];	$ein[$nbus] = $data[8];	$ang[$nbus] = 0.0175*$data[9];	$kae[$nbus] = $data[6];	$kzo[$nbus] = $data[7];	$kvbase{$busidx[$nbus]} = $kvb[$nbus];	$busidw{$busidx[$nbus]} = $busname[$nbus]; # for the warnings	if ($data[3] == 3) { $nsw++; $swbus = $data[0]; } 	if ($data[3] == 4) { 	    $nisl++;	    $islbus[$nisl] = $data[0];	    # printf "Isolated bus " . $data[0] . " will be ignored.\n";	}       } else { # bus data V23 format  	$nbus++;	$busidx[$nbus] = int($data[0]);	$bustype[$nbus] = $data[1];	$busname[$nbus] = $data[9];	$extname{$busname[$nbus]} = $busidx[$nbus];	$kvb[$nbus] =  $data[10];	$ein[$nbus] =  $data[7];	$ang[$nbus] =  0.0175*$data[8];	$kae[$nbus] =  $data[6];	$kzo[$nbus] =  $data[11];	$kvbase{$busidx[$nbus]} = $kvb[$nbus];	$busidw{$busidx[$nbus]} = $busname[$nbus]; # to identify warnings	if ($data[1] == 3) { $nsw++; $swbus = $data[0]; } 	if ($data[1] == 4) { 	    $nisl++;	    $islbus[$nisl] = $data[0];	    # printf "Isolated bus " . $data[0] . " will be ignored.\n";	}		# load data V23 format          if ($data[2] != 0  || $data[3] != 0) {	    $npq++;	    $pqbus[$npq] = int($data[0]);	    $pqpl[$npq] = $data[2]/$pbas;	    $pqql[$npq] = $data[3]/$pbas;		    $pqu[$npq] = ididx($pqbus[$npq]);	}    }	            # shunt data V23, V24 and V25 formats    if ($data[4] != 0  || $data[5] != 0) {	$nsh++; 	$idxsh[$nsh] = int($data[0]);	$psh[$nsh] = $data[4]/$pbas/$ein[$nbus]/$ein[$nbus];		$qsh[$nsh] = $data[5]/$pbas/$ein[$nbus]/$ein[$nbus];		$shu[$nsh] = ididx($idxsh[$nsh]);    }}# load data PSS/E V29 and V30if ($flag_version != V23) {    while (<IN>) {	chomp;	@data = mysplit($_);	last if /^\s*0/;  	if ($data[5] != 0 || $data[6] != 0) {	            $npq++;	    $pqbus[$npq] = extended($data[0]);	    $pqpl[$npq] = $data[5]/$pbas;	    $pqql[$npq] = $data[6]/$pbas;	   	    $pqu[$npq] = ididx($pqbus[$npq]);	}	if ($data[7] != 0 || $data[8] != 0 || 	    $data[9] != 0 || $data[10] != 0) {		    $npl++;	    $plbus[$npl] = extended($data[0]);	    $plip[$npl] = $data[7]/$pbas;	    $pliq[$npl] = $data[8]/$pbas;	    $plyp[$npl] = $data[9]/$pbas;	    $plyq[$npl] = $data[10]/$pbas;   	    $plu[$npl] = ididx($plbus[$npl]);	}    }}# generator data all formats (PSS/E V23 - V29)my (@pvbus,@pvpg,@pvqt,@pvqb,@pvvs,@pvsb,@pvpt,@pvpb);my ($swpg,$swqt,$swqb,$swvs,$swsb,$swpt,$swpb);while (<IN>) {    chomp;    @data = mysplit($_);    last if /^\s*0/;    if (extended($data[0]) == $swbus) {	$swsb = $data[8]; 	if ($swsb == 0) { $swsb = $pbas; } 	$swbus = extended($data[0]);            	$swpg = $data[2]/$swsb;            	$swqt = $data[4]/$swsb;	$swqb = $data[5]/$swsb;	$swvs = $data[6];	$swpt = $data[16]/$swsb;	$swpb = $data[17]/$swsb;    } else {        $npv++;        $pvsb[$npv] = $data[8];        if ($pvsb[$npv] == 0) { $pvsb[$npv] = $pbas; }        $pvbus[$npv] = extended($data[0]);        $pvpg[$npv] = $data[2]/$pvsb[$npv];        $pvqt[$npv] = $data[4]/$pvsb[$npv];        $pvqb[$npv] = $data[5]/$pvsb[$npv];        $pvvs[$npv] = $data[6];        $pvpt[$npv] = $data[16]/$pvsb[$npv];        $pvpb[$npv] = $data[17]/$pvsb[$npv];   	$pvu[$npv] = ididx($pvbus[$npv]);    }}# branch data PSS/E V29 and V30 (line and transformers # data for PSS/E V23, V24, V25 and V26 data files)my (@busfr,@bustt);my (@rest,@reat,@susc,@ratea,@rateb,@ratec,@phas,@lbas,@ratio);	    while (<IN>) {    chomp;    @data = mysplit($_);    last if /^\s*0/;        $nline++;    $busfr[$nline] = extended($data[0]);    $bustt[$nline] = extended($data[1]);    $stt[$nline] = ididx($busfr[$nline])*ididx($bustt[$nline]);    $lbas[$nline] = $pbas;    $rest[$nline] = $data[3];    $reat[$nline] = $data[4];    $susc[$nline] = $data[5];    $phas[$nline] = 0;    $ratea[$nline] = $data[6]/$pbas;    $rateb[$nline] = $data[7]/$pbas;    $ratec[$nline] = $data[8]/$pbas;    unless ($flag_version <= V24) {	$stt[$nline] = $data[13];    }    if ($flag_version <= V26) {	# this is for PSS/E V23-V26 data files	if (/,,,/) {           	    $ratio[$nline] = 0;	    # additional shunt admittance at "from" bus	    if ($data[9] != 0 || $data[10] != 0) { 		$nsh++;		$idxsh[$nsh] = extended($data[0]); 		$psh[$nsh] = $data[9];			$qsh[$nsh] = $data[10];		 	        $shu[$nsh] = ididx($idxsh[$nsh]);	    }	    # additional shunt admittance at "to" bus	    if ($data[11] != 0 || $data[12] != 0) {		$nsh++;		$idxsh[$nsh] = extended($data[1]);		$psh[$nsh] = $data[11];			$qsh[$nsh] = $data[12];			        $shu[$nsh] = ididx($idxsh[$nsh]);	    }	    $stt[$nline] = $data[13];	} else {	    $ratio[$nline] = $data[9];

⌨️ 快捷键说明

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