潮流上机.docx
《潮流上机.docx》由会员分享,可在线阅读,更多相关《潮流上机.docx(19页珍藏版)》请在冰豆网上搜索。
潮流上机
课程设计报告
(2011--2012年度第1学期)
名称:
电力系统潮流上机
院系:
电气与电子工程学院
班级:
电网1101
学号:
学生姓名:
指导教师:
王莉丽
设计周数:
两周
成绩:
日期:
2014年1月
《电力系统综合仿真》课程设计
一、目的与要求
培养学生编程实现电力系统仿真计算的能力,掌握潮流计算、短路计算、暂态稳定计算的相关知识
二、主要内容
1.编写潮流计算程序,要求如下:
2.1据给定的潮流计算任务书整理潮流计算的基础数据:
节点的分类,线路模型,等值变压器模型,电压等级的归算,标幺值的计算;
2.2基础数据的计算机存储:
节点数据,支路数据(包括变压器);
2.3用牛顿-拉夫逊法计算;
2.4根据所选潮流计算方法画流程图,划分出功能模块,有数据输入模块,导纳阵形成模块,解线性方程组模块,计算不平衡功率模块,形成雅可比矩阵模块,解修正方程模块,计算线路潮流,网损,PV节点无功功率和平衡节点功率,数据输出模块;
2.5据上述模块编制程序并上机调试程序,得出潮流计算结果;
2.6源程序及其程序中的符号说明集、程序流图
2.利用潮流计算结果编写故障计算程序,要求如下:
2.1发电机参数一律为PN=200MW,cosφ=0.85,
2.2变压器一律为Yd11接线,其中三角形侧接发电机,星形侧都直接接地
2.3线路零序参数一律为
2.4负荷都采用Y/Y型变压器接入,中性点与系统相连侧部接地。
负荷按照对称负荷考虑,纯阻抗形式。
2.5计算5节点发生三相对称短路、单相接地短路、两相短路和两相接地短路时的故障电流,以及各支路电流和节点电压。
3.思考题
3.1潮流计算和短路电流计算的元件模型有哪些不同点?
节点导纳矩阵有哪些不同?
计算过程有哪些不同点?
3.2短路电流计算中进行了哪些假设?
3.3如果交给你一个任务,请你用已有的潮流计算软件计算北京城市电网的潮流,你应该做哪些工作?
(收集哪些数据,如何整理,计算结果如何分析)
3.4比较过去的计算机语言上机学习和本课程上机有哪些不同?
设计中遇到的问题和解决的办法。
三、进度计划
序号
设计内容
完成时间
备注
1
教师讲解本次设计的任务及相关知识
课程设计开始前
2
整理潮流计算的原始数据,完成数据的读入读出模块
一天
3
编写及调试形成导纳矩阵模块
一天
4
计算不平衡功率,形成雅可比矩阵
一天
5
解修正方程
一天
6
计算线路潮流,网损,PV节点无功功率和平衡节点功率
一天
7
读入故障计算需要的数据,计算三相短路
一天
8
计算不对称短路
一天
9
写设计报告
一天
10
验收
一天
四、设计成果要求
1.提交任务书
2.计算机计算潮流程序流程图;
3.计算机计算短路电流程序流程图;
4.完整的仿真程序(包括变量的定义,子程序的调用等,计算结果),并有程序注释。
5.回答思考题
五、考核方式
总成绩=考勤+设计报告+面试成绩
学生姓名:
指导教师:
2014年1月
附录:
1.手算:
2.计算机计算潮流程序流程图
3.程序
#include"stdafx.h"
#include"fstream"
#include"iostream"
#include"DataForm.h"
#include"NEquation.h"
#include"math.h"
usingnamespaceSystem;
usingnamespacestd;
#definePI3.1415926
voidDataRead();
voidFormY();
voidVoltageInitial();
voidSetUnbalance();
voidFormJacobi();
voidGetRevised();
voidGetNewVoltageValue();
voidBusBalance();
voidBranchPQ();
voidBranceLoss();
intmain(array:
String^>^args)
{
DataRead();
FormY();
VoltageInitial();
for(inti=0;i<50;i++)
{
SetUnbalance();
FormJacobi();
GetRevised();
GetNewVoltageValue();
//break()
//if(fabs(H[i][j])>=1e-5||(N[i][j])>=1e-5||(H[i][j])>=1e-5||(J[i][j])>=1e-5||(L[i][j])>=1e-5)
}
BusBalance();
BranchPQ();
BranceLoss();
Console:
:
WriteLine(L"HelloWorld");
return0;
}
voidDataRead()//节点、支路数据读入子程序
{ifstreaminfile1;
infile1.open("BranchData2.txt");
for(inti=0;iinfile1>>Branch[i].Num>>Branch[i].BusFirst>>Branch[i].BusEnd>>Branch[i].R>>Branch[i].X>>Branch[i].B>>Branch[i].K;
infile1.close();
for(inti=0;icout<ifstreaminfile2;
infile2.open("BusData2.txt");
for(inti=0;iinfile2>>Bus[i].Num>>Bus[i].BusType>>Bus[i].Voltage>>Bus[i].Phase>>Bus[i].Pg>>Bus[i].Qg>>Bus[i].Pl>>Bus[i].Ql;
infile2.close();
for(inti=0;icout<}
voidFormY()//形成节点导纳矩阵子程序
{
for(inti=0;i{for(intj=0;j{G[i][j]=0;
B[i][j]=0;
}
}
intm,n;//设置两个变量分别存储之路手摸节点的编号
for(inti=0;i{
floatGG,BB,B0,G1,G2,B1,B2;
m=Branch[i].BusFirst-1;//
n=Branch[i].BusEnd-1;
//以下为变压器变比不唯
Branch[i].R=Branch[i].K*Branch[i].R;
Branch[i].X=Branch[i].K*Branch[i].X;
//将变压器变比引起的对地之路转换成电哪里?
G1=(1-Branch[i].K)/(Branch[i].K*Branch[i].K)/(Branch[i].R*Branch[i].R+Branch[i].X*Branch[i].X)*Branch[i].R;
B1=-(1-Branch[i].K)/(Branch[i].K*Branch[i].K)/(Branch[i].R*Branch[i].R+Branch[i].X*Branch[i].X)*Branch[i].X;
//将变压器变比引起的对地之路换成导纳
G2=(Branch[i].K-1)/Branch[i].K/(Branch[i].R*Branch[i].R+Branch[i].X*Branch[i].X)*Branch[i].R;
B2=-(Branch[i].K-1)/Branch[i].K/(Branch[i].R*Branch[i].R+Branch[i].X*Branch[i].X)*Branch[i].X;
//变压器非标准变比处理完毕
GG=Branch[i].R/(Branch[i].R*Branch[i].R+Branch[i].X*Branch[i].X);
BB=-Branch[i].X/(Branch[i].R*Branch[i].R+Branch[i].X*Branch[i].X);
B0=Branch[i].B;//接地数据
G[m][m]+=GG+G1;
G[m][n]-=GG;
G[n][m]-=GG;
G[n][n]+=GG+G2;
B[m][m]+=BB+B0+B1;
B[m][n]-=BB;
B[n][m]-=BB;
B[n][n]+=BB+B0+B2;
//B[][]+=
}
ofstreamoutfile1("result.txt");
for(inti=0;i{for(intj=0;j{outfile1<outfile1<}
outfile1.close();
}
voidVoltageInitial()//设置节点电压子程序
{
for(inti=0;i{
if(Bus[i].BusType==3)
{Ue[i]=1.04;
Uf[i]=0.0;
}
else
{Ue[i]=1.0;
Uf[i]=0.0;
}
cout<}
}
voidSetUnbalance()//计算功率不平衡量子程序
{
for(inti=1;i{P[i]=0;
Q[i]=0;
for(intj=0;j{P[i]=P[i]+Ue[i]*(G[i][j]*Ue[j]-B[i][j]*Uf[j])+Uf[i]*(G[i][j]*Uf[j]+B[i][j]*Ue[j]);
Q[i]=Q[i]+Uf[i]*(G[i][j]*Ue[j]-B[i][j]*Uf[j])-Ue[i]*(G[i][j]*Uf[j]+B[i][j]*Ue[j]);
}
//cout<
//cout<if(Bus[i].BusType==1)//PQ
{DeltaP[i]=Bus[i].Pg-Bus[i].Pl-P[i];
DeltaQU2[i]=Bus[i].Qg-Bus[i].Ql-Q[i];
}
elseif(Bus[i].BusType==2)//PV
{DeltaP[i]=Bus[i].Pg-Bus[i].Pl-P[i];
DeltaQU2[i]=Bus[i].Voltage*Bus[i].Voltage-(Ue[i]*Ue[i]+Uf[i]*Uf[i]);
}
//cout<//cout<}
for(inti=0;i{Delta[2*i]=DeltaP[i+1];
Delta[2*i+1]=DeltaQU2[i+1];
}//形成delta值
ofstreamoutfile2("Delta2.txt");
for(intj=0;j<2*(BusNum-1);j++)
{outfile2<outfile2.close();
}
voidFormJacobi()//形成雅各比矩阵子程序
{floatH[BusNum-1][BusNum-1],N[BusNum-1][BusNum-1],J[BusNum-1][BusNum-1],L[BusNum-1][BusNum-1];
floata[BusNum],b[BusNum];
for(inti=1;i{a[i]=G[i][i]*Ue[i]-B[i][i]*Uf[i];
b[i]=G[i][i]*Uf[i]+B[i][i]*Ue[i];
for(intj=0;j{if(j!
=i)
{a[i]=a[i]+(G[i][j]*Ue[j]-B[i][j]*Uf[j]);
b[i]=b[i]+(G[i][j]*Uf[j]+B[i][j]*Ue[j]);
}
}
}
for(inti=1;i{
for(intj=1;j{if(i==j)
{H[i][i]=-B[i][i]*Ue[i]+G[i][i]*Uf[i]+b[i];
N[i][i]=G[i][i]*Ue[i]+B[i][i]*Uf[i]+a[i];
if(Bus[i].BusType==1)
{J[i][i]=-G[i][i]*Ue[i]-B[i][i]*Uf[i]+a[i];
L[i][i]=-B[i][i]*Ue[i]+G[i][i]*Uf[i]-b[i];
}
elseif(Bus[i].BusType==2)
{J[i][i]=2*Uf[i];
L[i][i]=2*Ue[i];
}
}
elseif(i!
=j)
{H[i][j]=-B[i][j]*Ue[i]+G[i][j]*Uf[i];
N[i][j]=G[i][j]*Ue[i]+B[i][j]*Uf[i];
if(Bus[i].BusType==1)
{J[i][j]=-G[i][j]*Ue[i]-B[i][j]*Uf[i];
L[i][j]=-B[i][j]*Ue[i]+G[i][j]*Uf[i];
}
elseif(Bus[i].BusType==2)
{J[i][j]=0;
L[i][j]=0;
}
}
}
}
for(inti=0;i{for(intj=0;j{Jacobi[2*i][2*j]=H[i+1][j+1];
Jacobi[2*i][2*j+1]=N[i+1][j+1];
Jacobi[2*i+1][2*j]=J[i+1][j+1];
Jacobi[2*i+1][2*j+1]=L[i+1][j+1];
}
}
ofstreamoutfile4;
outfile4.open("Jacobi2.txt");
for(inti=0;i<2*(BusNum-1);i++)
{
for(intj=0;j<2*(BusNum-1);j++)
{
outfile4<}
outfile4<}
outfile4.close();
}
voidGetRevised()//求解修正方程得到电压增量子程序
{
NEquationObject;//建立一个对象
Object.SetSize(2*(BusNum-1));//设置矩阵的维数
ifstreaminfile1;
infile1.open("Jacobi2.txt");
for(inti=0;i<2*(BusNum-1);i++)
{for(intj=0;j<2*(BusNum-1);j++)
{Object.Data(i,j)=Jacobi[i][j];
infile1>>Object.Data(i,j);
}
}
infile1.close();
ifstreaminfile2;
infile2.open("Delta2.txt");
for(inti=0;i<2*(BusNum-1);i++)
infile2>>Object.Value(i);
infile2.close();
Object.Run();
for(inti=0;i<2*(BusNum-1);i++)
{DeltaU[i]=Object.Value(i);}//结果输出
ofstreamoutfile5("revisedequation2.txt");
for(intj=0;j<2*(BusNum-1);j++)
{outfile5<outfile5.close();
}
voidGetNewVoltageValue()//得到新的电压子程序
{
for(inti=0;iif(Bus[i].BusType!
=3)
{Ue[i]+=DeltaU[2*i-1];
Uf[i]+=DeltaU[2*i-2];
}
ofstreamoutfile6("newvoltagevalue2.txt");
for(inti=0;i{//if(Bus[i].BusType==1||Bus[i].BusType==2)
outfile6<}
outfile6.close();
}
voidBusBalance()//计算平衡节点功率子程序
{
for(inti=0;i{
if(Bus[i].BusType==3)
{
P[i]=0.0;
Q[i]=0.0;
for(intj=0;j{
P[i]+=Ue[i]*(G[i][j]*Ue[j]-B[i][j]*Uf[j])+Uf[i]*(G[i][j]*Uf[j]+B[i][j]*Ue[j]);//有功
Q[i]+=Uf[i]*(G[i][j]*Ue[j]-B[i][j]*Uf[j])-Ue[i]*(G[i][j]*Uf[j]+B[i][j]*Ue[j]);//无功
}
}
}
ofstreamoutfile7("BusBalance2.txt");
for(inti=0;iif(Bus[i].BusType==3)
{outfile7<
outfile7.close();
//for(inti=0;i//if(Bus[i].BusType==3)
//{cout<
}
voidBranchPQ()//计算支路功率子程序
{floatB0;
for(inti=0;i{
for(intj=0;j{
if(i!
=j&(G[i][j])!
=0&(B[i][j])!
=0)
{B0=Branch[i].B;
BranchP[i][j]=Ue[i]*(-Uf[i]*B0+Ue[i]*0+(Ue[i]-Ue[j])*G[i][j]-(Uf[i]-Uf[j])*B[i][j])+Uf[i]*(Ue[i]*B0+Uf[i]*0+(Ue[i]-Ue[j])*B[i][j]+(Uf[i]-Uf[j])*G[i][j]);
BranchQ[i][j]=Uf[i]*(-Uf[i]*B0+Ue[i]*0+(Ue[i]-Ue[j])*G[i][j]-(Uf[i]-Uf[j])*B[i][j])-Ue[i]*(Ue[i]*B0+Uf[i]*0+(Ue[i]-Ue[j])*B[i][j]+(Uf[i]-Uf[j])*G[i][j]);
BranchP[j][i]=Ue[j]*(-Uf[j]*B0+Ue[j]*0+(Ue[j]-Ue[i])*G[j][i]-(Uf[j]-Uf[i])*B[j][i])+Uf[j]*(Ue[j]*B0+Uf[j]*0+(Ue[j]-Ue[i])*B[j][i]+(Uf[j]-Uf[i])*G[j][i]);
BranchQ[j][i]=Uf[j]*(-Uf[j]*B0+Ue[j]*0+(Ue[j]-Ue[i])*G[j][i]-(Uf[j]-Uf[i])*B[j][i])-Ue[j]*(Ue[j]*B0+Uf[j]*0+(Ue[j]-Ue[i])*B[j][i]+(Uf[j]-Uf[i])*G[j][i]);
}
}
}
ofstreamoutfile8("BranchPQ2.txt");
for(inti=0;i{for(intj=0;j//if(i!
=j&(G[i][j])!
=0&(B[i][j])!
=0)
{outfile8<}
outfile8<}
outfile8.close();
}
voidBranceLoss()//计算线路上损耗子程序
{floatLossP[BusNum][BusNum],LossQ[BusNum][BusNum],LossPP,LossQQ;
LossPP=0;
LossQQ=0;
for(inti=0;i{
for(intj=0;j{
if(i!
=j&(G[i][j])!
=0&(B[i][j])!
=0)
{
LossP[i][j]=BranchP[i][j]+BranchP[j][i];
LossQ[i][j]=BranchQ[i][j]+BranchQ[j][i];
//cout<