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

📄 digsilent2psat

📁 这是一个很适合研究和学习用的电力系统仿真软件
💻
📖 第 1 页 / 共 3 页
字号:
        $kae[$nbus] = assign("ElmTerm",'pZone',1);
        $busidxn{$busname[$nbus]} = $busidx[$nbus];
        $kvbase{$busidxn{$busname[$nbus]}} = $kvb[$nbus];
}
}

# <$$ElmTr2> data card
# two winding transformer element data
$j = matching("ElmTr2");
if ($j == $n && $flgchk < 0) { 
$crd = $n;  
while (<IN>) {
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
        @data = mysplit($_);
        $nline++;
        $linename[$nline] = assign("ElmTr2",'typ_id',1);
        $busfr[$nline] = assign("ElmTr2",'Station1',);
        $bustt[$nline] = assign("ElmTr2",'Station2',);
        $tpos[$nline] = assign("ElmTr2",'nntap',1);
        $bsfr{$linename[$nline]} = $busfr[$nline];
        $bstt{$linename[$nline]} = $bustt[$nline];
        unless ($busfr[$nline]|| $bustt[$nline]) { $flgchk++; }
}
}


# <$$ElmTr3> data card
# three winding transformer element data
my (@twbus1,@twbus2,@twbus3);
$j = matching("ElmTr3");
if ($j == $n && $flgchk < 0) { 
$crd = $n;  
while (<IN>) { 
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
        @data = mysplit($_);
        $ntw++;
        $linename[$ntw] = assign("ElmTr3",'typ_id',1);
        $bustw1[$ntw] = assign("ElmTr3",'Station1',);
        $bustw2[$ntw] = assign("ElmTr3",'Station2',);
        $bustw3[$ntw] = assign("ElmTr3",'Station3',);
        unless ($bustw1[$ntw] || $bustw2[$ntw] || 
        $bustw3[$ntw]) { $flgchk++; }
}
}

# <$$ElmXnet> data card
$j = matching("ElmXnet");
if ($j == $n && $flgchk < 0) {
while (<IN>) { 
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
}
}

# <$$ElmZone> data card
# zone data
$j = matching("ElmZone");
if ($j == $n && $flgchk < 0) {
while (<IN>) { 
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
        @data = mysplit($_);
        $nzo++;
        $kzonum[$nzo] = assign("ElmZone",'No',1);
        $kzoname[$nzo] = assign("ElmZone",'Name',1);
        $kzo{$kzoname[$nzo]} = $kzonum[$nzo];
}
}

# <$$IntRef> data card
$j = matching("IntRef");
if ($j == $n && $flgchk < 0) {
while (<IN>) { 
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
}
}

# <$$Cubicles> data card
$j = matching("Cubicles");
if ($j == $n && $flgchk < 0) { 
while (<IN>) { 
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
}
}

# <$$TriCont> data card
$j = matching("TriCont");
if ($j == $n && $flgchk < 0) {
while (<IN>) { 
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
}
}

# <$$TypAsmo> data card
$j = matching("TypAsmo");
if ($j == $n && $flgchk < 0) { 
while (<IN>) { 
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
        @data = mysplit($_);
}
}

# <$$TypLne> data card
# line type data
$j = matching("TypLne");
if ($j == $n && $flgchk < 0) { 
while (<IN>) { 
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
        @data = mysplit($_);
        $nlpe++;
        $linename[$nlpe] = assign("TypLne",'Name',1);
        $r[$nlpe] = assign("TypLne",'rline',1);
        $x[$nlpe] = assign("TypLne",'xline',1);
        $c[$nlpe] = assign("TypLne",'cline',1);
        $rate[$nlpe] = assign("TypLne",'sline',1);
        $rest{$linename[$nlpe]} = $r[$nlpe] * $lght{$linename[$nlpe]};
        $reat{$linename[$nlpe]} = $x[$nlpe] * $lght{$linename[$nlpe]};
        # guessing f = 60 Hz.
        $susc{$linename[$nlpe]} =  0.002652582937 * $c[$nlpe] * 
        $lght{$linename[$nlpe]}; 
        $lnerate{$linename[$nlpe]} = $rate[$nlpe];
}
}

# <$$TypLod> data card
# load type data
$j = matching("TypLod");
if ($j == $n && $flgchk < 0) { 
    while (<IN>) { 
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
        @data = mysplit($_);
        $nmn++;
        $loadtype[$nmn] = assign("TypLod",'Name',1);
        $kpu[$nmn] = assign("TypLod",'kpu',0);
        $kqu[$nmn] = assign("TypLod",'kqu',0);
        $ktep{$loadtype[$nmn]} = $kpu[$nmn];
        $kteq{$loadtype[$nmn]} = $kqu[$nmn];
        if ($kpu[$nmn] == 0 && $kqu[$nmn] == 0) { $nmn = -1; }
    }
}

# <$$TypSym> data card
# sinchronous machine type data
$j = matching("TypSym");
if ($j == $n && $flgchk < 0) { 
    while (<IN>) { 
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
        @data = mysplit($_);
        $ndyn++;
        $symname[$ndyn] = assign("TypSym",'Name',1);
        $pbas[$ndyn] = assign("TypSym",'sgn',100);
        $xd[$ndyn] = assign("TypSym",'xd',1.9);
        $xq[$ndyn] = assign("TypSym",'xq',1.7);
        $xdsss[$ndyn] = assign("TypSym",'xdsss',0.204);
        $rstr[$ndyn] = assign("TypSym",'rstr',0);
        $xdsat[$ndyn] = assign("TypSym",'xdsat',0);
        $satur[$ndyn] = assign("TypSym",'satur',0); # Machine IEC909
        $pbase{$symname[$ndyn]} = $pbas[$ndyn];
    }
}


# <$$TypTr2> data card
# two winding transformer type data
$j = matching("TypTr2");
if ($j == $n && $flgchk < 0) { 
    while (<IN>) {
	next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
        @data = mysplit($_);
        $nttf = $nline;
        $nttf++;
        $linename[$nttf] = assign("TypTr2",'Name',1);
        $pbas[$nttf] = assign("TypTr2",'strn',100); # [MVA]
        $kv1[$nttf] = assign("TypTr2",'utrn_h',1); # [kV]
        $kv2[$nttf] = assign("TypTr2",'utrn_l',1); 
        $uktr[$nttf] = assign("TypTr2",'uktr',0); # [%]
        $pcutr[$nttf] = assign("TypTr2",'pcutr',0); # [kW]
        $phs[$nttf] = assign("TypTr2",'nt2ag',0);
        # parameters * * short circuit test * *
        $inomtr = 1000*$pbas[$nttf]/$kv1[$nttf]; # [A]
	$zn = 10*$uktr[$nttf]*$kv1[$nttf]/$inomtr; # [Ohm]
        $r[$nttf] = 1000*$pcutr[$nttf]/$inomtr**2; # [Ohm]
	$x[$nttf] = sqrt($zn**2 - $r[$nttf]**2); # [Ohm]
	# relations
        $rest{$linename[$nttf]} = $r[$nttf];
        $reat{$linename[$nttf]} = $x[$nttf];
        $susc{$linename[$nttf]} = $c[$nttf];
        $lnerate{$linename[$nttf]} = $rate[$nttf];
        $phsf{$linename[$nttf]} = $phs[$nttf]/30;
        $pbase{$linename[$nttf]} = $pbas[$nttf];
    }
}

# <$$TypTr3> data card
# three winding transformer type data
$j = matching("TypTr3");
if ($j == $n && $flgchk < 0) { 
    while (<IN>) { 
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
        @data = mysplit($_);
        $ntwf++; 
        $tr3wname[$ntwf] = assign("TypTr3",'Name',1);
        $rt3a[$ntwf] = assign("TypTr3",'strn3_h',100);
        $rt3b[$ntwf] = assign("TypTr3",'strn3_m',100);
        $rt3c[$ntwf] = assign("TypTr3",'strn3_m',100); # [MVA]
        $kv1[$ntwf] = assign("TypTr3",'utrn3_h',1); # [kV]
        $kv2[$ntwf] = assign("TypTr3",'utrn3_m',1);
        $kv3[$ntwf] = assign("TypTr3",'utrn3_l',1);
        $uktrh[$ntwf] = assign("TypTr3",'uktr3_h',1); # [%]
        $uktrm[$ntwf] = assign("TypTr3",'uktr3_m',1);
        $uktrl[$ntwf] = assign("TypTr3",'uktr3_l',1);
        $pcuth[$ntwf] = assign("TypTr3",'pcut3_h',1); # [kW]
        $pcutm[$ntwf] = assign("TypTr3",'pcut3_m',1); 
        $pcutl[$ntwf] = assign("TypTr3",'pcut3_l',1); 
        #$phsf[$ntwf] = assign("TypTr3",'nntap0',1);
        # parameters * * short circuit test * *
        # currents through the windings
        $inomtrh = 1000 * $rt3a[$ntwf]/$kv1[$ntwf]; # [A]
        $inomtrm = 1000 * $rt3b[$ntwf]/$kv2[$ntwf];
        $inomtrl = 1000 * $rt3c[$ntwf]/$kv3[$ntwf];
        # r12,x12
        $zn = 10 * ($pbas/$kv1[$ntwf]**2) *
        $uktrh[$ntwf] * $kv1[$nttf]/$inomtrh; # [pu]
        $r12[$ntwf] = 1000 * ($pbas/$kv1[$ntwf]**2) *
        $pcuth[$ntwf]/$inomtrh**2; # [pu]
	    $x12[$ntwf] = sqrt($zn**2 - $r12[$ntwf]**2); # [pu]   	 	
	    # r23,x23
        $zn = 10 * ($pbas/$kv1[$ntwf]**2) *
        $uktrm[$ntwf] * $kv1[$nttf]/$inomtrm; # [pu]
        $r23[$ntwf] = 1000 * ($pbas/$kv2[$ntwf]**2) *
        $pcutm[$ntwf]/$inomtrm**2; # [pu]
	    $x23[$ntwf] = sqrt($zn**2 - $r23[$ntwf]**2); # [pu]
	    # r13,x13
        $zn = 10 * ($pbas/$kv1[$ntwf]**2) * 
        $uktrl[$ntwf] * $kv1[$nttf]/$inomtrl; # [pu]
        $r13[$ntwf] = 1000 * ($pbas/$kv1[$ntwf]**2) * 
        $pcutl[$ntwf]/$inomtrl**2; # [pu]
	    $x13[$ntwf] = sqrt($zn**2 - $r13[$ntwf]**2); # [pu]
	    $rt3c[$ntwf] / $kv3[$ntwf]**2;
	    # relations
        $r12{$tr3wname[$ntwf]} = $r12[$ntwf];
        $x12{$tr3wname[$ntwf]} = $x12[$ntwf];
        $r23{$tr3wname[$ntwf]} = $r23[$ntwf];
        $x23{$tr3wname[$ntwf]} = $x23[$ntwf];
        $r13{$tr3wname[$ntwf]} = $r13[$ntwf];
        $x13{$tr3wname[$ntwf]} = $x13[$ntwf];
        $rt3a{$tr3wname[$ntwf]} = $rt3a[$ntwf]/$pbas;
        $rt3b{$tr3wname[$ntwf]} = $rt3b[$ntwf]/$pbas;
        $rt3c{$tr3wname[$ntwf]} = $rt3c[$ntwf]/$pbas;
        $susc{$tr3wname[$ntwf]} = $c[$ntwf];
        $lnerate{$tr3wname[$ntwf]} = $rate[$ntwf];
    }
}

# <$$Graphic>; data card
# graphic data (future versions can include
# simulink model conversion)
$j = matching("Graphic");
if ($j == $n && $flgchk < 0) { 
    while (<IN>) { 
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
    }
}


# <$$GraphCon>; data card
$j = matching("GraphCon");
if ($j == $n && $flgchk < 0) { 
    while (<IN>) { 
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
    }
}

# <$$OP_ElmAsm> data card
$j = matching("OP_ElmAsm");
if ($j == $n && $flgchk < 0) { 
    while (<IN>) { 
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
    }
}

# <$$OP_ElmCoup> data card
$j = matching("OP_ElmCoup");
if ($j == $n && $flgchk < 0) { 
    while (<IN>) { 
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
    }
}

# <$$OP_ElmLod> data card
# load operational data
$j = matching("OP_ElmLod");
if ($j == $n && $flgchk < 0) { 
    while (<IN>) {
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
        @data = mysplit($_);
        $j = pqidx(assign("OP_ElmLod",'Name',1)); 
        if ($j >= 0) { 
	    # add powers if there are multiple 
	    # PQ loads at the same bus
	    $pqpl[$j] += assign("OP_ElmLod",'plini',1)/$pbas;
	    $pqql[$j] += assign("OP_ElmLod",'qlini',1)/$pbas;
        } else {
	    $nopq++;
	    $pqname[$nopq] = assign("OP_ElmLod",'Name',1);
	    $pqpl[$nopq] = assign("OP_ElmLod",'plini',1)/$pbas;
	    $pqql[$nopq] = assign("OP_ElmLod",'qlini',1)/$pbas;
	}
    }
}

# <$$OP_ElmShnt> data card
# shunt operational data
$j = matching("OP_ElmShnt");
if ($j == $n && $flgchk < 0) { 
    while (<IN>) { 
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
        @data = mysplit($_);
    }
}

# <$$OP_ElmSym> data card
# sinchronous machine operational data
$j = matching("OP_ElmSym");
if ($j == $n && $flgchk < 0) { 
    while (<IN>) { 
        next if /^\*+/;
        next if /^\*+\s+\w+/;
        next if /^.$/;
        last if /^\$\$/;
        @data = mysplit($_);
    	$j = pvidx(assign("OP_ElmSym",'Name',1));
     	if ($j >= 0) { 
   	    # add powers if there are multiple 
	    # PV generators at the same bus
	    $pvpg[$j] += assign("OP_ElmSym",'pgini',1)/$pbas;
	    $pvqg[$j] += assign("OP_ElmSym",'qgini',1)/$pbas;
	    $pvqt[$j] += assign("OP_ElmSym",'q_min',1)/$pbas;
	    $pvqb[$j] += assign("OP_ElmSym",'q_max',1)/$pbas;
	} else { 
	    $nopv++; 
	    $symname[$nopv] = assign("OP_ElmSym",'Name',1);
	    $pvsb[$nopv] = $pbase{$symname[$nopv]};
	    $symstt[$nopv] = assign("OP_ElmSym",'outserv',1);
	    $opmode[$nopv] = assign("OP_ElmSym",'iv_mode',99);

⌨️ 快捷键说明

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