自动控制装置课程设计电力系统潮流计算的程序设计Word格式文档下载.docx
《自动控制装置课程设计电力系统潮流计算的程序设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《自动控制装置课程设计电力系统潮流计算的程序设计Word格式文档下载.docx(32页珍藏版)》请在冰豆网上搜索。
写出编程思想及流程框图。
并附录原程序。
图1IEEE9节点电力系统线路图
IEEE9节点电力系统原始数据:
图中GEN1节点为平衡节点,V1=1.04,GEN2和GEN3为PV节点,V2=1.025,P2=1.63,V3=1.025,P3=0.85,其他节点为PQ节点,S7=1.25+j0.5,S8=0.9+j0.3,S9=1.0+j0.35。
表1系统基本参数数据
节点总数
基准电压(KV)
基准功率(MW)
平衡节点
PV节点
PQ节点
计算精度
9
345
100
GEN1
GEN2,3
4~9
10(-1~-14)
表2系统线路原始参数(标幺值)
标号
起始节点i
终止节点j
电阻(R)
电抗(jX)
对地导纳(B/2)
1
2
5
0.000
0.063
0.019
0.072
0.075
3
6
0.012
0.101
0.105
4
0.059
8
0.039
0.170
0.179
0.017
0.092
0.079
7
0.032
0.161
0.153
0.010
0.085
0.088
0.058
表3节点功率、电压数据(标幺值)
节点I
P
Q
V
1.000
1.040
1.630
1.025
0.850
-1.250
-0.500
-0.900
-0.300
-1.000
-0.350
二、设计主要仪器设备和材料
表4设计主要设备
序号
名称
主要用途
计算机
程序编写
三、牛顿法潮流计算的步骤及计算程序框图
牛顿法潮流计算的求解过程大致可以分为以下几步:
(1)输入系统的原始数据,包括系统的信息,各线路和变压器所在节点的编号和等值电路中的参数;
各负荷所在节点的编号及其所取用的有功功率和无功功率;
作为PQ节点的发电机所在节点和编号及所给定的有功功率和无功功率,PV节点的编号和所接发电机的有功功率和电压有效值的给定值,平衡节点的编号和给定的电压有效值。
(2)形成节点导纳矩阵。
(3)给定各PQ节点的电压初值和除平衡节点外各节点电压相位的初值
并组成待求量的初始向量
和
。
(4)置迭代次数k=0。
(5)应用
、
及PV节点和平衡节点所给定的电压,按式1:
计算各PQ节点的有功功率误差
和无功功率误差
以及各PV节点的有功功率误差
,并组成功率误差向量
(6)按式2:
中的收敛判据判断最大的功率误差是否小于容许值,如果满足则转到第(11)步,否则进行下一步。
(7)应用
按式3和式4:
计算雅可比矩阵元素,并形成式5中的雅可比矩阵
(8)解修正方程式5,得出
(9)应用式6:
计算各节点电压和相位的修正值,即新的初值。
(10)置k=k+1返回第(5)步继续进行下一轮迭代。
(11)按式7:
计算平衡节点的发电机(或注入)有功功率和无功功率,并按式8:
计算各PV节点发电机(或注入)的无功功率;
按式9和式10:
计算各元件两端的功率和损耗,最后输出计算结果。
与上述步骤相对应的计算程序框图如下图所示:
四、程序代码
//文件一,NEquation.h:
interfacefortheNEquationclass.//
//////////////////////////////////////////////////////////////////////
#if!
defined(AFX_NEQUATION_H__7D6DCBC7_B370_4F2E_A720_4FB8BA7B55D9__INCLUDED_)
#defineAFX_NEQUATION_H__7D6DCBC7_B370_4F2E_A720_4FB8BA7B55D9__INCLUDED_
#if_MSC_VER>
1000
#pragmaonce
#endif//_MSC_VER>
#defineCHECKERROR
classNEquation
{
public:
NEquation();
virtual~NEquation();
voidSetSize(intsize);
double&
Data(intlhs,intrhs);
Value(intlhs);
intRun();
protected:
intm_nNumber;
double*m_nDataBuffer;
double*m_nValue;
voidFactorial();
voidForward();
voidBackward();
virtualdoubleZEROD();
virtualdoubleZEROV();
};
NEquation:
:
NEquation()
m_nDataBuffer=NULL;
m_nValue=NULL;
m_nNumber=0;
}
~NEquation()
if(m_nDataBuffer!
=NULL)delete[]m_nDataBuffer;
if(m_nValue!
=NULL)delete[]m_nValue;
doubleNEquation:
ZEROD(){return0.0;
ZEROV(){return0.0;
voidNEquation:
SetSize(intsize)
if(size<
1)return;
m_nDataBuffer=newdouble[size*size];
m_nValue=newdouble[size];
for(inti=0;
i<
size*size;
i++)m_nDataBuffer[i]=ZEROD();
for(i=0;
size;
i++)m_nValue[i]=ZEROV();
m_nNumber=size;
double&
NEquation:
Data(intlhs,intrhs)
#ifdefined(CHECKERROR)
if((lhs<
m_nNumber)&
&
(lhs>
=0)&
(rhs<
(rhs>
=0))
#endif
returnm_nDataBuffer[lhs*m_nNumber+rhs];
else
printf("
Error"
);
returnm_nDataBuffer[0];
Value(intlhs)
returnm_nValue[lhs];
returnm_nValue[0];
intNEquation:
Run()
Factorial();
Forward();
Backward();
return1;
doublereverse(doubleff){return(double)1.0/ff;
Factorial()
inti,j,k;
m_nNumber;
i++)
{
//规格化formatline;
Data(i,i)=reverse(Data(i,i));
for(j=i+1;
j<
m_nNumber;
j++)Data(i,j)=Data(i,i)*Data(i,j);
//消去
j++)
{
for(k=i+1;
k<
k++)
{
Data(j,k)=Data(j,k)-Data(j,i)*Data(i,k);
}
}
}
Forward()
inti,j;
Value(i)=Data(i,i)*Value(i);
j<
Value(j)=Value(j)-Data(j,i)*Value(i);
Backward()
for(i=1;
i<
for(j=1;
i+1;
Value(m_nNumber-i-1)-=Data(m_nNumber-i-1,m_nNumber-j)*Value(m_nNumber-j);
#endif//!
//////////文件二,LF.h//////////////
#ifndef_LF_LCR_
#define_LF_LCR_
#include"
DataDesign.h"
intMakeY(intnB,intnL,Line*sL,double**YG,double**YB);
intCalDeltaPQ(intnpv,intnpq,Bus*bus,double**YG,double**YB,int*p_Jtobus,double*deltaf);
intFormJacobian(intnpv,intnpq,Bus*bus,double**YG,double**YB,int*p_Jtobus,double**Jac);
#endif//_LF_LCR_
////////文件三,数据设计,DataDesign.h//////////
#ifndef_DATA_LCR_INCLUDE_
#define_DATA_LCR_INCLUDE_
structLine
intNum,NumI,NumJ,Type;
doubleR,X,B,K;
structBus
intNum;
doubleVolt,Phase,GenP,GenQ,LoadP,LoadQ;
intType;
structShunt
intNum,NumI;
doubleG,B;
#endif//_DATA_LCR_INCLUDE_
/////文件四,FormF.cpp//////////
#include<
math.h>
fstream.h>
LF.h"
stdio.h>
//formdeltapanddeltaq
intCalDeltaPQ(intnpv,intnpq,Bus*bus,double**YG,double**YB,int*p_Jtobus,double*deltaf)
inti,j;
//循环变量
intk;
//节点修正变量
doublei1,i2;
doubledphase;
i<
npv+npq+npq;
i++)
if(i<
npv+npq)//formdeltaP
i1=0;
k=p_Jtobus[i];
for(j=0;
j<
npv+npq+1;
j++)
dphase=bus[k].Phase-bus[j].Phase;
i1+=bus[j].Volt*(YG[k][j]*cos(dphase)+YB[k][j]*sin(dphase));
deltaf[i]=bus[k].GenP-bus[k].LoadP-bus[k].Volt*i1;
else
{//formdeltaQ
i2=0;
i2+=bus[j].Volt*(YG[k][j]*sin(dphase)-YB[k][j]*cos(dphase));
deltaf[i]=bus[k].GenQ-bus[k].LoadQ-bus[k].Volt*i2;
for(i=0;
npv+npq*2;
deltaf[i]*=(-1);
return1;
/////文件五,计算雅可比矩阵,FormJ.cpp///////////
malloc.h>
string.h>
//////////////生成雅可比矩阵///////////////////
intFormJacobian(intnpv,intnpq,Bus*bus,double**YG,double**YB,int*p_Jtobus,double**Jac)
intnp=npv+npq;
////////生成H矩阵////////////
double**H;
H=(double**)newchar[(np)*sizeof(void*)];
for(i=0;
np;
i++)
H[i]=newdouble[np];
memset(H[i],0,sizeof(double)*(np));
//清零
doubletemp=0;
for(j=0;
if(i!
=j)
dphase=bus[i+1].Phase-bus[j+1].Phase;
H[i][j]=bus[i+1].Volt*bus[j+1].Volt*(YG[i+1][j+1]*sin(dphase)-YB[i+1][j+1]*cos(dphase));
temp+=H[i][j];
doubledphase1=bus[i].Phase-bus[0].Phase;
H[i][i]=temp*(-1)-bus[i+1].Volt*bus[0].Volt*(YG[i+1][0]*sin(dphase1)-YB[i+1][0]*cos(dphase));
ofstreamfout1("
out.txt"
ios:
app);
/////////生成L矩阵////////////
double**L;
L=(double**)newchar[(np)*sizeof(void*)];
L[i]=newdouble[np];
memset(L[i],0,sizeof(double)*(np));
for(i=npv;
for(j=npv;
L[i][j]=H[i][j];
L[i][i]=-1*H[i][i]-2*bus[i+1].Volt*bus[i+1].Volt*YB[i+1][i+1];
/////////////生成J矩阵///////////////////
double**J;
J=(double**)newchar[(np)*sizeof(void*)];
J[i]=newdouble[np];
memset(J[i],0,sizeof(double)*(np));
np+1;
J[i][j]=-1*bus[i+1].Volt*bus[j+1].Volt*(YG[i+1][j+1]*cos(dphase)+YB[i+1][j+1]*sin(dphase));
temp+=-1*J[i][j];
J[i][i]=temp;
/////////////////生成N矩阵/////////////////
double**N;
N=(double**)newchar[(np)*sizeof(void*)];
N[i]=newdouble[np];
memset(N[i],0,sizeof(double)*(np));
N[i][j]=-1*J[i][j];
N[i][i]=J[i][i]+2*bus[i+1].Volt*bus[i+1].Volt*YG[i+1][i+1];
Jac[i][j]=H[i][j];
for(i=np;
np+npq;
Jac[i][j]=J[i-np+2][j];
for(j=np;
Jac[i][j]=N[i][j-np+2];
Jac[i][j]=L[i-np+2][j-np+2];
//////////////////输出雅可比矩阵///////////////////////
ofstreamfout("
static