?? pf30.cpp
字號(hào):
V_Temp[1]=Voltage[j][1]*sin(Voltage[j][0]);
Comp_Mul(Cur_Temp,Y_UpTri[k],V_Temp);
Cur_Count[0]=Cur_Count[0]+Cur_Temp[0];
Cur_Count[1]=Cur_Count[1]+Cur_Temp[1];
}
Cur_Count[1]=-Cur_Count[1]; //電流取共軛
Comp_Mul(Pij_Sum[i],VV,Cur_Count); //至此,求得從節(jié)點(diǎn)i發(fā)出的所
//有Pij和Qij之和。
if(kgpv<Num_GPV&&i==Gen_PVNode[kgpv][0]) //發(fā)電機(jī)PV節(jié)點(diǎn)
{
if(kl<Num_Load&&i==Load_NodeName[kl]) //負(fù)荷節(jié)點(diǎn)
{
kl_old=Load_No_NewtoOld[kl]; //負(fù)荷舊順序號(hào)
if(LLoad[kl_old].Flag==1) //計(jì)及負(fù)荷靜特性
Power_Dis[i][0]=Power_Dis[i][0]\
-LLoad[kl_old].ABC[2]*V;
kl++;
}
if(ki<Num_Cur_Const&&i==Node_Name_Curr_Const[ki])
{ //含常數(shù)電流節(jié)點(diǎn)
Power_Dis[i][0]=Power_Dis[i][0]\
+V*(Current_Const[ki][0]*cos(Ang)\
+Current_Const[ki][1]*sin(Ang));
ki++;
}
Power_Dis[i][0]=Power_Dis[i][0]-Pij_Sum[i][0];
kgpv++;
}
else //PQ節(jié)點(diǎn)(包括發(fā)電機(jī)、負(fù)荷及聯(lián)絡(luò)節(jié)點(diǎn))
{
if(kl<Num_Load&&i==Load_NodeName[kl]) //負(fù)荷節(jié)點(diǎn)
{
kl_old=Load_No_NewtoOld[kl]; //負(fù)荷舊順序號(hào)
if(LLoad[kl_old].Flag==1) //計(jì)及負(fù)荷靜特性
{
Power_Dis[i][0]=Power_Dis[i][0]\
-LLoad[kl_old].ABC[2]*V;
Power_Dis[i][1]=Power_Dis[i][1]
-LLoad[kl_old].ABC[3]*V;
}
kl++;
}
if(ki<Num_Cur_Const&&i==Node_Name_Curr_Const[ki])
{ //含常數(shù)電流節(jié)點(diǎn)
Power_Dis[i][0]=Power_Dis[i][0]\
+V*(Current_Const[ki][0]*cos(Ang)\
+Current_Const[ki][1]*sin(Ang));
Power_Dis[i][1]=Power_Dis[i][1]\
+V*(Current_Const[ki][0]*sin(Ang)\
-Current_Const[ki][1]*cos(Ang));
ki++;
}
Power_Dis[i][0]=Power_Dis[i][0]-Pij_Sum[i][0];
Power_Dis[i][1]=Power_Dis[i][1]-Pij_Sum[i][1];
}
}
P_Dis_Max=0.0;
Q_Dis_Max=0.0;
for(i=0;i<Num_Node-Num_Swing;i++)
{
if(fabs(Power_Dis[i][0])>P_Dis_Max)
{
P_Dis_Max=fabs(Power_Dis[i][0]);
ipmax=i;
}
if(fabs(Power_Dis[i][1])>Q_Dis_Max)
{
Q_Dis_Max=fabs(Power_Dis[i][1]);
iqmax=i;
}
}
Power_Dis_Max=__max(P_Dis_Max,Q_Dis_Max);
/*cout<<setw(15)<<Num_Iteration\
<<setw(15)<<setprecision(8)<<P_Dis_Max\
<<setw(6)<<Node_Name_NewtoOld[ipmax]\
<<setw(15)<<setprecision(8)<<Q_Dis_Max\
<<setw(6)<<Node_Name_NewtoOld[iqmax]<<endl;*/
of_PQDisOut<<setw(15)<<Num_Iteration\
<<setw(15)<<setprecision(8)<<P_Dis_Max\
<<setw(6)<<Node_Name_NewtoOld[ipmax]\
<<setw(15)<<setprecision(8)<<Q_Dis_Max\
<<setw(6)<<Node_Name_NewtoOld[iqmax]<<endl;
//節(jié)點(diǎn)功率一次偏差修正項(xiàng)
for(k=0;k<Num_Cur_Const;k++) //常數(shù)電流修正項(xiàng)處理
{
i=Node_Name_Curr_Const[k]; //節(jié)點(diǎn)號(hào)
if(i<Num_Node-Num_Swing)
{
Ix=Current_Const[k][0];
Iy=Current_Const[k][1];
Ang=Voltage[i][0];
PP=(-Ix*sin(Ang)+Iy*cos(Ang))*DVolt[i][0]\
+(Ix*cos(Ang)+Iy*sin(Ang))*DVolt[i][1];
QQ=(Ix*cos(Ang)+Iy*sin(Ang))*DVolt[i][0]\
+(Ix*sin(Ang)-Iy*cos(Ang))*DVolt[i][1];
Power_Dis[i][0]=Power_Dis[i][0]-PP*0.1;
if(Node_Flag[i]!=2)Power_Dis[i][1]=Power_Dis[i][1]-QQ*0.1;
}
}
for(i=0;i<Num_Node-Num_Swing;i++) //i節(jié)點(diǎn)所有出線的Pij、Qij之和
{ //修正項(xiàng)處理。
V=Voltage[i][1];
PP=Pij_Sum[i][1]*DVolt[i][0]-Pij_Sum[i][0]*DVolt[i][1];
QQ=-Pij_Sum[i][0]*DVolt[i][0]-Pij_Sum[i][1]*DVolt[i][1];
// Power_Dis[i][0]=Power_Dis[i][0]-PP/V;
// if(Node_Flag[i]!=2)Power_Dis[i][1]=Power_Dis[i][1]-QQ/V;
Power_Dis[i][0]=Power_Dis[i][0]-PP*0.1;
if(Node_Flag[i]!=2)Power_Dis[i][1]=Power_Dis[i][1]-QQ*0.1;
}
for(k=0;k<Num_Load;k++) //負(fù)荷靜特性之修正項(xiàng)處理
{
i=Load_NodeName[k];
k1=Load_No_NewtoOld[k];
if(i<Num_Node-Num_Swing&&LLoad[k1].Flag==1)
{
PP=-LLoad[k1].ABC[2]*DVolt[i][1];
QQ=-LLoad[k1].ABC[3]*DVolt[i][1];
Power_Dis[i][0]=Power_Dis[i][0]-PP*0.5;
if(Node_Flag[i]!=2)Power_Dis[i][1]=Power_Dis[i][1]-QQ*.5;
}
}
}
//電壓保存(按內(nèi)部節(jié)點(diǎn)號(hào))子程
void Voltage_Reserve(int Num_Node,int Num_Swing)
{
ofstream of_VOut("vol30.ini",ios::out,filebuf::openprot);//打開(kāi)文件
if(of_VOut.fail()) //判斷打開(kāi)是否有錯(cuò)
{
cerr<<"Error opening the diskette data-file:"\
<<"Vol30.ini"<<endl;
exit(10);
}
of_VOut<< setiosflags( ios::fixed );
for(int i=0;i<Num_Node-Num_Swing;i++)
of_VOut<<setw(12)<<Voltage[i][0]<<setw(12)<<Voltage[i][1]<<endl;
of_VOut.close(); //關(guān)閉磁盤文件
}
//結(jié)果輸出子程
void Result_Output(int Num_Node,int Num_Line,int Num_Gen,int Num_Load,
int Num_Swing,int Num_Iteration,double Duration)
{
int i,j,k,kg_old,kl_old,k_old;
double Z[2],BK; //線路參數(shù)臨時(shí)工作單元
double S_Count[NODEMAX][2]; //節(jié)點(diǎn)所有出線功率累加數(shù)組:
//0-實(shí)部,1-虛部。
double S_Line[LINEMAX][4]; //線路功率:0-Pij,1-Qij,2-Pji,3-Qji
double S_Node[NODEMAX][4]; //節(jié)點(diǎn)功率:0-PG,1-QG,2-PL,3-QL
double DS_Node[NODEMAX][2]; //節(jié)點(diǎn)功率失配量:0-有功失配量,
//1-無(wú)功失配量。
double S_T[2],V_T[2],I_T[2],I1_T[2],I2_T[2]; //臨時(shí)工作單元
double V,t,Angle,Vi,Vj,Angi,Angj;
//將平衡節(jié)點(diǎn)的電壓值送入數(shù)組Voltage[][]中
for(i=0;i<Num_Swing;i++)
{
j=Gen_SWNode[i][0];
kg_old=Gen_SWNode[i][1];
Angle=GGen[kg_old].PQV[1]*Deg_to_Rad;
Voltage[j][0]=Angle;
Voltage[j][1]=GGen[kg_old].PQV[0];
} //至此可以直接使用系統(tǒng)中所有節(jié)點(diǎn)電壓的相位和幅值
//初值化處理
for(i=0;i<Num_Node;i++)
{
S_Count[i][0]=0.0; //節(jié)點(diǎn)所有出線功率累加數(shù)組賦初值0
S_Count[i][1]=0.0;
S_Node[i][0]=0.0; //節(jié)點(diǎn)功率數(shù)組賦初值0
S_Node[i][1]=0.0;
S_Node[i][2]=0.0;
S_Node[i][3]=0.0;
}
//求線路潮流及各節(jié)點(diǎn)的所有出線功率累加
for(k=0;k<Num_Line;k++)
{
i=Line_NodeName[k][0]; //取線路左節(jié)點(diǎn)
j=Line_NodeName[k][1]; //取線路右節(jié)點(diǎn)
k_old=Line_No_NewtoOld[k]; //對(duì)應(yīng)的舊線路順序號(hào)
Z[0]=LLine[k_old].RXBK[0]; //取線路的電阻值
Z[1]=LLine[k_old].RXBK[1]; //取線路的電抗值
BK=LLine[k_old].RXBK[2]; //取線路容納半值或變壓器非標(biāo)準(zhǔn)變比
if(Line_Flag[k]==0) //普通支路
{
if(i!=j) //非接地支路
{
Vi=Voltage[i][1];
Vj=Voltage[j][1];
Angi=Voltage[i][0];
Angj=Voltage[j][0];
V_T[0]=Vi*cos(Angi)-Vj*cos(Angj);
V_T[1]=Vi*sin(Angi)-Vj*sin(Angj);
Comp_Div(I_T,V_T,Z);
I1_T[0]=I_T[0]-BK*Vi*sin(Angi); //Iij
I1_T[1]=I_T[1]+BK*Vi*cos(Angi);
I1_T[1]=-I1_T[1]; //取Iij的共軛
I2_T[0]=-I_T[0]-BK*Vj*sin(Angj); //Iji
I2_T[1]=-I_T[1]+BK*Vj*cos(Angj);
I2_T[1]=-I2_T[1]; //取Iji的共軛
V_T[0]=Vi*cos(Angi);
V_T[1]=Vi*sin(Angi);
Comp_Mul(S_T,V_T,I1_T); //求Sij
S_Line[k][0]=S_T[0];
S_Line[k][1]=S_T[1];
S_Count[i][0]=S_Count[i][0]+S_T[0]; //節(jié)點(diǎn)i出線
S_Count[i][1]=S_Count[i][1]+S_T[1]; //功率累加。
V_T[0]=Vj*cos(Angj);
V_T[1]=Vj*sin(Angj);
Comp_Mul(S_T,V_T,I2_T); //求Sji
S_Line[k][2]=S_T[0];
S_Line[k][3]=S_T[1];
S_Count[j][0]=S_Count[j][0]+S_T[0]; //節(jié)點(diǎn)j出線
S_Count[j][1]=S_Count[j][1]+S_T[1]; //功率累加。
}
else //接地支路
{
Vi=Voltage[i][1];
Angi=Voltage[i][0];
V_T[0]=Vi*cos(Angi);
V_T[1]=Vi*sin(Angi);
Comp_Div(I_T,V_T,Z);
I1_T[0]=I_T[0]-BK*Vi*sin(Angi); //求接地支路電流Iii
I1_T[1]=I_T[1]+BK*Vi*cos(Angi);
I1_T[1]=-I1_T[1]; //取Iii的共軛
Comp_Mul(S_T,V_T,I1_T);
S_Line[k][0]=S_T[0]; //求Sii(由節(jié)點(diǎn)i到地節(jié)點(diǎn))
S_Line[k][1]=S_T[1];
S_Line[k][2]=0.0;//求Sii(由地節(jié)點(diǎn)到節(jié)點(diǎn)i,其值等于零)
S_Line[k][3]=0.0;
S_Count[i][0]=S_Count[i][0]+S_T[0]; //節(jié)點(diǎn)i出線
S_Count[i][1]=S_Count[i][1]+S_T[1]; //功率累加。
}
}
else if(Line_Flag[k]==1) //非標(biāo)準(zhǔn)變比在節(jié)點(diǎn)i側(cè)的變壓器支路
{
Vi=Voltage[i][1];
Vj=Voltage[j][1];
Angi=Voltage[i][0];
Angj=Voltage[j][0];
V_T[0]=Vi*cos(Angi)-Vj*cos(Angj);
V_T[1]=Vi*sin(Angi)-Vj*sin(Angj);
Comp_Div(I_T,V_T,Z);
I_T[0]=I_T[0]/BK;
I_T[1]=I_T[1]/BK;
V_T[0]=Vi*cos(Angi);
V_T[1]=Vi*sin(Angi);
Comp_Div(I1_T,V_T,Z);
t=(1.0/BK-1.0)/BK;
I1_T[0]=I1_T[0]*t;
I1_T[1]=I1_T[1]*t;
I1_T[0]=I1_T[0]+I_T[0]; //Iij
I1_T[1]=I1_T[1]+I_T[1];
I1_T[1]=-I1_T[1]; //取Iij的共軛
V_T[0]=Vj*cos(Angj);
V_T[1]=Vj*sin(Angj);
Comp_Div(I2_T,V_T,Z);
t=1.0-1.0/BK;
I2_T[0]=I2_T[0]*t-I_T[0]; //Iji
I2_T[1]=I2_T[1]*t-I_T[1];
I2_T[1]=-I2_T[1]; //取Iji的共軛
V_T[0]=Vi*cos(Angi);
V_T[1]=Vi*sin(Angi);
Comp_Mul(S_T,V_T,I1_T); //求Sij
S_Line[k][0]=S_T[0];
S_Line[k][1]=S_T[1];
S_Count[i][0]=S_Count[i][0]+S_T[0]; //節(jié)點(diǎn)i出線
S_Count[i][1]=S_Count[i][1]+S_T[1]; //功率累加。
V_T[0]=Vj*cos(Angj);
V_T[1]=Vj*sin(Angj);
Comp_Mul(S_T,V_T,I2_T); //求Sji
S_Line[k][2]=S_T[0];
S_Line[k][3]=S_T[1];
S_Count[j][0]=S_Count[j][0]+S_T[0]; //節(jié)點(diǎn)j出線
S_Count[j][1]=S_Count[j][1]+S_T[1]; //功率累加。
}
else if(Line_Flag[k]==2) //非標(biāo)準(zhǔn)變比在節(jié)點(diǎn)j側(cè)的變壓器支路
{
Vi=Voltage[i][1];
Vj=Voltage[j][1];
Angi=Voltage[i][0];
Angj=Voltage[j][0];
V_T[0]=Vi*cos(Angi)-Vj*cos(Angj);
V_T[1]=Vi*sin(Angi)-Vj*sin(Angj);
Comp_Div(I_T,V_T,Z);
I_T[0]=I_T[0]/BK;
I_T[1]=I_T[1]/BK;
V_T[0]=Vi*cos(Angi);
V_T[1]=Vi*sin(Angi);
Comp_Div(I1_T,V_T,Z);
t=1.0-1.0/BK;
I1_T[0]=I1_T[0]*t;
I1_T[1]=I1_T[1]*t;
I1_T[0]=I1_T[0]+I_T[0]; //Iij
I1_T[1]=I1_T[1]+I_T[1];
I1_T[1]=-I1_T[1]; //取Iij的共軛
V_T[0]=Vj*cos(Angj);
V_T[1]=Vj*sin(Angj);
Comp_Div(I2_T,V_T,Z);
t=(1.0/BK-1.0)/BK;
I2_T[0]=I2_T[0]*t-I_T[0]; //Iji
I2_T[1]=I2_T[1]*t-I_T[1];
I2_T[1]=-I2_T[1]; //取Iji的共軛
V_T[0]=Vi*cos(Angi);
V_T[1]=Vi*sin(Angi);
Comp_Mul(S_T,V_T,I1_T); //求Sij
S_Line[k][0]=S_T[0];
S_Line[k][1]=S_T[1];
S_Count[i][0]=S_Count[i][0]+S_T[0]; //節(jié)點(diǎn)i出線
S_Count[i][1]=S_Count[i][1]+S_T[1]; //功率累加。
V_T[0]=Vj*cos(Angj);
V_T[1]=Vj*sin(Angj);
Comp_Mul(S_T,V_T,I2_T); //求Sji
S_Line[k][2]=S_T[0];
S_Line[k][3]=S_T[1];
S_Count[j][0]=S_Count[j][0]+S_T[0]; //節(jié)點(diǎn)j出線
S_Count[j][1]=S_Count[j][1]+S_T[1]; //功率累加。
}
else //沒(méi)有此種線路類型
{
cout<<"There is not this line type!"<<endl;
exit(0);
}
}
//將節(jié)點(diǎn)功率失配量賦初值為節(jié)點(diǎn)出線功率累加的負(fù)值
for(i=0;i<Num_Node;i++)
{
DS_Node[i][0]=-S_Count[i][0];
DS_Node[i][1]=-S_Count[i][1];
}
//求取負(fù)荷節(jié)點(diǎn)功率PL和QL
for(i=0;i<Num_Load;i++)
{
j=Load_NodeName[i]; //負(fù)荷節(jié)點(diǎn)名稱
kl_old=Load_No_NewtoOld[i]; //負(fù)荷節(jié)點(diǎn)舊順序號(hào)
if(LLoad[kl_old].Flag==1) //計(jì)及靜特性
{
V=Voltage[j][1];
S_Node[j][2]=LLoad[kl_old].ABC[0]*V*V\
+LLoad[kl_old].ABC[2]*V\
+LLoad[kl_old].ABC[4];
S_Node[j][3]=LLoad[kl_old].ABC[1]*V*V\
+LLoad[kl_old].ABC[3]*V\
+LLoad[kl_old].ABC[5];
}
else if(LLoad[kl_old].Flag==0) //不計(jì)靜特性
{
S_Node[j][2]=LLoad[kl_old].ABC[4];
S_Node[j][3]=LLoad[kl_old].ABC[5];
}
else //沒(méi)有此種類型的負(fù)荷節(jié)點(diǎn)
{
cout<<"There is not this load node type!"<<endl;
exit(1);
}
DS_Node[j][0]=DS_Node[j][0]-S_Node[j][2]; //功率失配量處理
DS_Node[j][1]=DS_Node[j][1]-S_Node[j][3];
}
//求取發(fā)電機(jī)節(jié)點(diǎn)功率PG和QG
for(i=0;i<Num_Gen;i++)
{
j=Gen_NodeName[i]; //發(fā)電機(jī)節(jié)點(diǎn)名稱
kg_old=Gen_No_NewtoOld[i]; //發(fā)電機(jī)節(jié)點(diǎn)舊順序號(hào)
if(GGen[kg_old].Flag==0) //平衡發(fā)電機(jī)節(jié)點(diǎn)
{
S_Node[j][0]=S_Count[j][0]+S_Node[j][2];
S_Node[j][1]=S_Count[j][1]+S_Node[j][3];
}
else if(GGen[kg_old].Flag==1) //發(fā)電機(jī)PQ節(jié)點(diǎn)
{
S_Node[j][0]=GGen[kg_old].PQV[0];
S_Node[j][1]=GGen[kg_old].PQV[1];
}
else if(GGen[kg_old].Flag==2) //發(fā)電機(jī)PV節(jié)點(diǎn)
{
S_Node[j][0]=GGen[kg_old].PQV[0];
S_Node[j][1]=S_Count[j][1]+S_Node[j][3];
}
else //沒(méi)有此種類型的發(fā)電機(jī)節(jié)點(diǎn)
{
cout<<"There is not this generator node type!"<<endl;
exit(2);
}
DS_Node[j][0]=DS_Node[j][0]+S_Node[j][0]; //功率失配量處理
DS_Node[j][1]=DS_Node[j][1]+S_Node[j][1];
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -