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

📄 psse2psat

📁 这是一个很适合研究和学习用的电力系统仿真软件
💻
📖 第 1 页 / 共 3 页
字号:
    last if /^\s*0/;    
    next if (ididx(int($data[0])) || ididx(abs($data[1])));
    $nline++;
    $busfr[$nline] = int($data[0]);
    $bustt[$nline] = abs($data[1]);
    $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 || $flag_version == V23) {
	$stt[$nline] = $data[13];
	if ($stt[$nline] == 0) { $cmt++ };
    }
    #$ratio[$nline] = 0; 
    if ($flag_version == V24 || $flag_version == V23) {
	# this is for PSS/E V23, V24 and V25 data files
	if (/,,,/) {           
	    $ratio[$nline] = 0;
	    # additional shunt admittance at "from" bus
	    if ($data[9] != 0 || $data[10] != 0) { 
		$nsh++;
		$idxsh[$nsh] = int(abs($data[0])); 
		$psh[$nsh] = $data[9];	
		$qsh[$nsh] = $data[10];		
	    }
	    # additional shunt admittance at "to" bus
	    if ($data[11] != 0 || $data[12] != 0) {
		$nsh++;
		$idxsh[$nsh] = int(abs($data[1]));
		$psh[$nsh] = $data[11];	
		$qsh[$nsh] = $data[12];		
	    }
	    $stt[$nline] = $data[13];
	    if ($stt[$nline] == 0) { $cmt++ };
	} else {
	    $ratio[$nline] = $data[9];
	    $stt[$nline] = $data[15];
	    if ($stt[$nline] == 0) { $cmt++ };
	}
    } else {
	$ratio[$nline] = 0; 
	if ($data[9] != 0 || $data[10] != 0) { 
	    $nsh++;
	    $idxsh[$nsh] = int($data[0]);
	    $psh[$nsh] = $data[9];	
	    $qsh[$nsh] = $data[10];		
	}
	# additional shunt admittance at "to" bus
	if ($data[11] != 0 || $data[12] != 0) {
	    $nsh++;
	    $idxsh[$nsh] = int($data[1]);
	    $psh[$nsh] = $data[11];	
	    $qsh[$nsh] = $data[12];		
	}	       	     
    }
}
   
# transformer data PSS/E V29 and V30
my (@data1,@data2,@data3,@data4,@data5);
my (@bustw1,@bustw2,@bustw3);
my ($ntw,$three_winding);
my (@r12,@r23,@r13,@x12,@x23,@x13,@rt1a,@rt1b,@rt1c,
    @rt2a,@rt2b,@rt2c,@rt3a,@rt3b,@rt3c);
my ($nltc,@ltc_busfr,@ltc_busto,@ltc_busct,@ltc_r,@ltc_dm,
    @ltc_x,@ltc_bas,@ltc_vma,@ltc_vmi,@ltc_ctr,@ltc_ref);
my ($nphs,@phs_busfr,@phs_busto,@phs_r,@phs_x,@phs_bas,
    @phs_vma,@phs_vmi,@phs_ref);
$ntw = -1;
$nltc = -1;
$nphs = -1;
while ($flag_version >= V29) {
    # read first line
    $three_winding = 0;
    $_ = <IN>; 
    chomp;
    @data1 = mysplit($_); 
    # check for end of transformer data
    if ($data1[0] == 0) { last; }  
    # read second line
    $_ = <IN>;
    chomp;
    @data2 = mysplit($_);
    # read third line
    $_ = <IN>;
    chomp;
    @data3 = mysplit($_);
    # read fourth line
    $_ = <IN>;
    chomp;
    @data4 = mysplit($_);
    # check for three-winding transformers
    if (int($data1[2]) != 0) {
	$three_winding = 1;
	$_ = <IN>;
	chomp;
	@data5 = mysplit($_);
    }
    # to avoid elements in isolated buses
    next if (ididx(int($data1[0])) || ididx(abs($data1[1])));
    if ($three_winding == 0) {
	if (1) {
	    # standard transformer PSS/E V29 and V30
	    $nline++;
	    $ntr++;
	    $busfr[$nline] = int($data1[0]);
	    $bustt[$nline] = int($data1[1]);
	    if (abs($data3[6]) == 4) {
		printf "DC line control for transformer #" . 
		    $ntr . " is ignored.\n";
	    }
	    if ($flag_version == V29) { $stt[$nline] = $data1[11]; }
	    else { $stt[$nline] = $data[15]; }
	    if ($stt[$nline] == 0) { $cmt++ };  
	    $rest[$nline] = $data2[0];
	    $reat[$nline] = $data2[1];
	    $susc[$nline] = 0;
	    if ($data1[4] == 1) {
		$ratio[$nline] = $data4[0];
	    } else {
		$ratio[$nline] = 1;		
	    }
	    $phas[$nline] = 0.175*$data3[2];
	    if ($data1[5] == 1) {
		$lbas[$nline] = $pbas;
		$ratea[$nline] = $data3[3]/$pbas;
		$rateb[$nline] = $data3[4]/$pbas;
		$ratec[$nline] = $data3[5]/$pbas;
	    } elsif ($data1[5] == 2) {
		$lbas[$nline] = $data2[2];
		$ratea[$nline] = $data3[3]/$data2[2];
		$rateb[$nline] = $data3[4]/$data2[2];
		$ratec[$nline] = $data3[5]/$data2[2];
	    } else {
		$lbas[$nline] = $data2[2];
		if ($data3[1] == 0) {
		    $j = $kvbase{$busfr[$nline]};
		} else {
		    $j = $data3[1];		
		}
		$h = $data2[2]*$data2[2]/3/$j/$j;
		$rest[$nline] = $rest[$nline]/$h;
		$ratea[$nline] = $data3[3]/$data2[2];
		$rateb[$nline] = $data3[4]/$data2[2];
		$ratec[$nline] = $data3[5]/$data2[2];	
	    }
	} elsif (abs($data3[6]) == 3) {
	    # phase shifting transformer PSS/E V29 and V30
	    $nphs++;
	    $phs_busfr[$nphs] = int($data1[0]);
	    $phs_busto[$nphs] = int($data1[1]);
	    $phs_r[$nphs] = $data2[0];
	    $phs_x[$nphs] = $data2[1];
	    $phs_vma[$nphs] = 0.175*$data3[8];
	    $phs_vmi[$nphs] = 0.175*$data3[9];
	    if ($data1[5] == 1) {
		$phs_bas[$nphs] = $pbas;
	    } elsif ($data1[5] == 2) {
		$phs_bas[$nphs] = $data2[2];
	    } else {
		$phs_bas[$nphs] = $data2[2];
		if ($data3[1] == 0) {
		    $j = $kvbase{$phs_busfr[$nphs]};
		} else {
		    $j = $data3[1];		
		}
		$h = $data2[2]*$data2[2]/3/$j/$j;
		$phs_r[$nphs] = $phs_r[$nphs]/$h;
	    }   	
	    $phs_ref[$nphs] = 0.5*($data3[10]+$data3[11])/$phs_bas[$nphs];
	} elsif (abs($data3[6]) == 1 || abs($data3[6]) == 2) {
	    # under load tap changer PSS/E V29 and V30
	    $nltc++;
	    $ltc_busfr[$nltc] = int($data1[0]);
	    $ltc_busto[$nltc] = int($data1[1]);
	    $ltc_busct[$nltc] = int(abs($data3[7]));
	    if ($ltc_busct[$nltc] == 0) {
		$ltc_busct[$nltc] = $ltc_busto[$nltc];	
	    }
	    $ltc_ctr[$nltc] = abs($data3[6]);
	    if ($ltc_busct[$nltc] != $ltc_busfr[$nltc] || 
		$ltc_busct[$nltc] != $ltc_busto[$nltc]) {
		$ltc_ctr[$nltc] = 3;	    
	    }
	    $ltc_r[$nltc] = $data2[0];
	    $ltc_x[$nltc] = $data2[1];
	    $ltc_vma[$nltc] = $data3[8];
	    $ltc_vmi[$nltc] = $data3[9];
	    if (int($data3[12]) == 0) {
		$ltc_dm[$nltc] = 0;
	    } else {
		$ltc_dm[$nltc] = 0; #($data3[8]-$data3[9])/$data3[12];
	    }
	    $ltc_ref[$nltc] = 0.5*($data3[10]+$data3[11]);
	    if ($data1[5] == 1) {
		$ltc_bas[$nltc] = $pbas;
	    } elsif ($data1[5] == 2) {
		$ltc_bas[$nltc] = $data2[2];
	    } else {
		$ltc_bas[$nltc] = $data2[2];
		if ($data3[1] == 0) {
		    $j = $kvbase{$ltc_busfr[$nltc]};
		} else {
		    $j = $data3[1];		
		}
		$h = $data2[2]*$data2[2]/3/$j/$j;
		$ltc_r[$nltc] = $ltc_r[$nltc]/$h;
	    }    	    
	}	
    } else {
	# three-winding transformer PSS/E V29 and V30
	$ntw++;
	$bustw1[$ntw] = int($data1[0]);
	$bustw2[$ntw] = int($data1[1]);
	$bustw3[$ntw] = int($data1[2]);
	$stt[$ntw] = $data1[11];
	if ($stt[$ntw] == 0) { $cmtwt++ };  
	$x12[$ntw] = $data2[1]*$pbas/$data2[2];
	$x23[$ntw] = $data2[4]*$pbas/$data2[5];
	$x13[$ntw] = $data2[7]*$pbas/$data2[8];
	if ($data1[5] == 3) {
	    $j = $kvbase{$bustw1[$ntw]};
	    $h = $data2[2]*$data2[2]/3/$j/$j;
	    $r12[$ntw] = $data2[0]/$h;
	    $j = $kvbase{$bustw2[$ntw]};
	    $h = $data2[5]*$data2[5]/3/$j/$j;
	    $r23[$ntw] = $data2[3]/$h;
	    $j = $kvbase{$bustw3[$ntw]};
	    $h = $data2[8]*$data2[8]/3/$j/$j;
	    $r13[$ntw] = $data2[6]/$h;
	} else {
	    $r12[$ntw] = $data2[0]*$pbas/$data2[2];
	    $r23[$ntw] = $data2[3]*$pbas/$data2[5];
	    $r13[$ntw] = $data2[6]*$pbas/$data2[8];
	}
	$rt1a[$ntw] = $data3[3]/$pbas;
	$rt1b[$ntw] = $data3[4]/$pbas;
	$rt1c[$ntw] = $data3[5]/$pbas;
	$rt2a[$ntw] = $data4[3]/$pbas;
	$rt2b[$ntw] = $data4[4]/$pbas;
	$rt2c[$ntw] = $data4[5]/$pbas;
	$rt3a[$ntw] = $data5[3]/$pbas;
	$rt3b[$ntw] = $data5[4]/$pbas;
	$rt3c[$ntw] = $data5[5]/$pbas;
   }
}

if ($flag_version == V24 || $flag_version == V23) { 
    # PSS/E V23, V24 and V25 under load tap changer 
    # and phase shifting transformer 
    while (<IN>) {
	@data = mysplit($_);
	last if /^\s*0/;        
    }
}

# area data all formats (PSS/E V23 - V30)
while (<IN>) {
    @data = mysplit($_);
    last if /^\s*0/;        
}

# two terminal DC data all formats (PSS/E V23 - V30)
while (<IN>) {
   @data = mysplit($_);
   last if /^\s*0/;        
}

if ($flag_version >= V29) { # PSS/E V29 and V30
    # VSC DC line data 
    while (<IN>) {
	@data = mysplit($_);
	last if /^\s*0/;        
    }
}

# switched shunt data all formats (PSS/E V23 - V30)
my ($nsvc,@svcbus,@svcbma,@svcbmi,@svcref);
$nsvc = -1;
while (<IN>) {
    @data = mysplit($_);
    last if /^\s*0/;  
    #next if (ididx(int($data[0])));
    #$j = pvidx(int($data[0]));
    # add SVC only if there is no PV at the same bus
    #if ($j) {
    #printf "SVC at PV bus " . $data[0] . " will be ignored.\n" ;
    #} elsif ($data[1] == 0) { # fixed SVCs are treated as a shunt
    if ($flag_version >= V29 || $flag_version == V23) {
	if ($data[6] =~ m/\'/) {
	    # likely PSS/E V30 ...
	    $flag_version = V30;
	    $data[6] = $data[5];
	}
	if ($data[6] != 0) {
	    $nsh++;
	    $idxsh[$nsh] = int($data[0]);
	    $psh[$nsh] = 0;
	    $qsh[$nsh] = $data[6]/$pbas;	
	}
    } elsif ($flag_version == V24)  {
	if ($data[7] != 0) { 
	    $nsh++;
	    $idxsh[$nsh] = int($data[0]);
	    $psh[$nsh] = 0;	
	    $qsh[$nsh] = $data[5]/$pbas;	
	}
    }
}

# -----------------------------------------------------------------------
# close input data file
# -----------------------------------------------------------------------
close(IN) || die "cannot close $ARGV[0]: $!\n";

# -----------------------------------------------------------------------
# open output data file
# -----------------------------------------------------------------------
print "Writing PSAT file \"$ARGV[1]\"...\n";
carret();
open(OUT,">$ARGV[1]") || die "cannot open $ARGV[1]: $!\n";

# -----------------------------------------------------------------------
# write output data file
# -----------------------------------------------------------------------
print OUT "% File generated by PSAT from PSS/E data file.\n";
print OUT "% "."-" x 78 . "\n";
print OUT "% Author:   Federico Milano\n";
print OUT "% E-mail:   fmilano\@thunderbox.uwaterloo.ca\n";
print OUT "% Web-site: http://thunderbox.uwaterloo.ca/~fmilano\n";
print OUT "% Coauthor: Juan Carlos Morataya\n";
print OUT "% E-mail:   jc.morataya\@ieee.org\n";
print OUT "% "."-" x 78 . "\n";
print OUT "% $title1\n";
if ($cmt > 0) {
    print OUT "% $title2\n";
    print OUT "% Commented lines are disconnected branches\n";
    print OUT "% "."-" x 78 . "\n\n";
} else {
    print OUT "% $title2\n";
    print OUT "% "."-" x 78 . "\n\n";
}

⌨️ 快捷键说明

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