电力系统分析实验DOC.docx
《电力系统分析实验DOC.docx》由会员分享,可在线阅读,更多相关《电力系统分析实验DOC.docx(35页珍藏版)》请在冰豆网上搜索。
电力系统分析实验DOC
电力系统分析实验报告
院系:
电气学院电气工程系
班级:
姓名:
学号:
联系方式:
实验一:
节点导纳阵和短路实验
1.1自导纳和互导纳的计算原理
1.1.1节电导纳矩阵的定义及物理意义:
节点导纳阵是一个稀疏的对称矩阵。
一般的,对于有n个独立节点的网络,可以列写n个节电方程,或用矩阵缩记写成YV=I的形式,其中矩阵Y称为节点导纳矩阵。
它的对角线元素Yii称为节点i的自导纳,其值等于接于节点i的所有支路导纳之和。
换句话说,自导纳Yii是节点i以外的所有节点都接地时节点i对地的总导纳。
非对角线元素Yij称为节点i、j之间的互导纳,它等于直接连接于节点i、j间的支路导纳的负值。
由此可见,若节点i、j之间不存在直接支路,则Yij=0。
1.1.2节点导纳矩阵的主要特点:
(1)导纳矩阵的元素很容易根据网络接线图和支路参数直观地求得,形成节点导纳矩阵的程序比较简单。
(2)导纳矩阵是稀疏矩阵,其对角线元素一般不为零,但在非对角线元素中则存在不少零元素。
在电力系统的接线图中,一半每个节点同平均3-4个其他节点有直接的支路连接,因此在导纳矩阵的非对角线元素中每行平均仅有3-4个非零元素,其余的都是零元素。
c.自导纳与互导纳的计算原理
一般网络:
一般地,对于有n个独立节点的网络,可以列写n个节电方程:
也可以用矩阵写成:
根据上述节点导纳矩阵的物理意义及定义特点,我们容易得出节点导纳矩阵中元素的计算方法和原理:
对于节点自导纳,有:
即Yii等于与节点i相接的所有支路的导纳之和。
对于节点间互导纳,有:
即Yik等于节点k、i之间的支路导纳的负值。
对于含变压器的支路:
根据∏型等值电路,可以写出节点p、q的自导纳和节点间的互导纳分别为:
1.2给定计算条件及程序如何修改:
给定计算条件:
在2节点处增加一个发电机,其有功功率为5,无功功率为3j;
程序修改方法:
无需修改程序;
原因:
节点导纳矩阵反映了网络元件的结构特点,而与电源或负载无关。
自导纳反应了节点i以外的所有节点都接地时节点i对地的总导纳,互导纳反应了两节点之间的支路导纳负值。
因此,增加发电机,节点导纳矩阵无需修改。
1.3程序代码及计算结果:
程序代码:
#include"stdio.h"
intnNode,nBranch;
/*定义结构体*/
structBranchInfo
{inti;
intj;
floatr;
floatx;
floatyb;
intflag;
floatIR;
floatIX;
}Branch[10];
/*读取数据函数*/
voiddata_read()
{FILE*fp;
fp=fopen("node5.txt","rb");
fscanf(fp,"%d%d\n",&nNode,&nBranch);
printf("%3d%3d\n",nNode,nBranch);
for(intk=0;k{
fscanf(fp,"%d%d%f%f%f%d\n",&Branch[k].i,&Branch[k].j,&Branch[k].r,&Branch[k].x,&Branch[k].yb,&Branch[k].flag);
printf("%d%d%f%f%f%d\n",Branch[k].i,Branch[k].j,Branch[k].r,Branch[k].x,Branch[k].yb,Branch[k].flag);
}
fclose(fp);
}
floatYR[10][10],YB[10][10];
/*计算导纳参数矩阵*/
voidComputeYmatrix()
{
for(inti=0;i<10;i++)
for(intj=0;j<10;j++)
{
YR[i][j]=0.0f;
YB[i][j]=0.0f;
}
floattemp;
intii,jj,flag;
floatrr,xx,yb,yb1,yr;
for(intk=0;k{
ii=Branch[k].i;
jj=Branch[k].j;
rr=Branch[k].r;
xx=Branch[k].x;
yb1=Branch[k].yb;
flag=Branch[k].flag;
temp=rr*rr+xx*xx;
yr=rr/temp;
yb=-xx/temp;
if(flag)//line
{
YR[ii][ii]+=yr;
YR[jj][jj]+=yr;
YB[ii][ii]+=yb;
YB[jj][jj]+=yb;
YB[ii][ii]+=yb1;
YB[jj][jj]+=yb1;
YR[ii][jj]=-yr;
YR[jj][ii]=-yr;
YB[ii][jj]=-yb;
YB[jj][ii]=-yb;
}
else//transformer
{
YR[ii][jj]=0;
YR[jj][ii]=0;
YB[ii][jj]=1/(xx*yb1);
YB[jj][ii]=1/(xx*yb1);
if(ii<2||ii>4)
{
YR[ii][ii]=0;
YB[ii][ii]=-(1/xx);
}
elseif(jj<2||jj>4)
{
YR[jj][jj]=0;
YB[jj][jj]=-(1/xx);
}
if(ii%2==0)
{YB[ii][ii]+=-1/(yb1*yb1*xx);
}
elseif(jj%2==0)
{YB[jj][jj]+=-1/(yb1*yb1*xx);
}
}
}
}
/*数据输出函数*/
voiddata_output()
{FILE*fp;
fp=fopen("Ymatrix.txt","wb");
for(inti=1;i<=nNode;i++)
{
for(intj=1;j<=nNode;j++)
{
fprintf(fp,"%8.5f+j%8.5f",YR[i][j],YB[i][j]);
}
fprintf(fp,"\n");
}
fclose(fp);
}
/*主函数*/
voidmain()
{
data_read();
ComputeYmatrix();
data_output();
}
计算结果:
1.4短路实验计算条件:
(1)短路实验计算基本原理和方法:
(2)程序框图:
(3)短路实验计算的条件:
短路实验计算的条件为,三号节点故障,过渡阻抗zf为1j。
1.5短路实验相关代码:
用MATLAB计算节点阻抗矩阵:
代码:
Y=[0.00000+-9.52381j,0.00000+9.07030j,0.00000+0.00000j,0.00000+0.00000j,0.00000+0.00000j;0.00000+9.07030j,9.10855+-33.10012j,-4.99896+13.53885j,-4.10959+10.95890j,0.00000+0.00000j;0.00000+0.00000j,-4.99896+13.53885j,11.37290+-31.21523j,-6.37394+17.70538j,0.00000+0.00000j;0.00000+0.00000j,-4.10959+10.95890j,-6.37394+17.70538j,10.48353+-34.52840j,0.00000+5.66123j;0.00000+0.00000j,0.00000+0.00000j,0.00000+0.00000j,0.00000+5.66123j,0.00000+-5.43478j]
Z=inv(Y)
运行结果:
相关C语言程序代码:
#include"stdio.h"
intnNode,nBranch;
/*定义结构体*/
structBranchInfo
{
inti;
intj;
floatr;
floatx;
floatyb;
intflag;
floatIR;
floatIX;
}Branch[10];
/*读数据函数*/
voiddata_read()
{
FILE*fp;
fp=fopen("node5.txt","rb");
fscanf(fp,"%d%d\n",&nNode,&nBranch);
printf("%3d%3d\n",nNode,nBranch);
for(intk=0;k{fscanf(fp,"%d%d%f%f%f%d\n",&Branch[k].i,&Branch[k].j,&Branch[k].r,&Branch[k].x,&Branch[k].yb,&Branch[k].flag);
printf("%d%d%f%f%f%d\n",Branch[k].i,Branch[k].j,Branch[k].r,Branch[k].x,Branch[k].yb,Branch[k].flag);
}
fclose(fp);
floatYR[10][10],YB[10][10];
/*计算导纳参数矩阵*/
voidComputeYmatrix()
{
for(inti=0;i<10;i++)
for(intj=0;j<10;j++)
{
YR[i][j]=0.0f;
YB[i][j]=0.0f;
}
floattemp;
intii,jj,flag;
floatrr,xx,yb,yb1,yr;
for(intk=0;k{
ii=Branch[k].i;
jj=Branch[k].j;
rr=Branch[k].r;
xx=Branch[k].x;
yb1=Branch[k].yb;
flag=Branch[k].flag;
temp=rr*rr+xx*xx;
yr=rr/temp;
yb=-xx/temp;
if(flag)//line
{
YR[ii][ii]+=yr;
YR[jj][jj]+=yr;
YB[ii][ii]+=yb;
YB[jj][jj]+=yb;
YB[ii][ii]+=yb1;
YB[jj][jj]+=yb1;
YR[ii][jj]=-yr;
YR[jj][ii]=-yr;
YB[ii][jj]=-yb;
YB[jj][ii]=-yb;
}
else//transformer
{
YR[ii][jj]=0;
YR[jj][ii]=0;
YB[ii][jj]=1/(xx*yb1);
YB[jj][ii]=1/(xx*yb1);
if(ii<2||ii>4)
{
YR[ii][ii]=0;
YB[ii][ii]=-(1/xx);
}
elseif(jj<2||jj>4)
{
YR[jj][jj]=0;
YB[jj][jj]=-(1/xx);
}
if(ii%2==0)
{YB[ii][ii]+=-1/(yb1*yb1*xx);
}
elseif(jj%2==0)
{YB[jj][jj]+=-1/(yb1*yb1*xx);
}
}
}
}
/*计算短路电流电压函数*/
voidShortcutCurrent()
{
floatZR[10],ZX[10],vr[10],vx[10];
floatvoltageR[10],voltageX[10];
floatIFR,IFX,temp;
inti;
ZR[1]=-0.0026;
ZR[2]=-0.0027;
ZR[3]=0.0052;
ZR[4]=-0.0016;
ZR[5]=-0.0016;
ZX[1]=-9.7241;
ZX[2]=-10.2103;
ZX[3]=-10.1887;
ZX[4]=-10.2074;
ZX[5]=-10.6327;
ZX[3]+=1;
temp=ZR[3]*ZR[3]+ZX[3]*ZX[3];
IFR=1.0*ZR[3]/temp;
IFX=-1.0*ZX[3]/temp;
for(i=1;i<=nNode;i++)
{
vr[i]=ZR[i]*IFR-ZX[i]*IFX;
vx[i]=ZX[i]*IFR+ZR[i]*IFX;
voltageR[i]=1.0-vr[i];
voltageX[i]=-vx[i];
voltageR[3]=0;
voltageX[3]=0;
}
for(intk=0;k{
floattemp;
intii,jj,flag;
floatrr,xx,yb,yb1,yr;
ii=Branch[k].i;
jj=Branch[k].j;
rr=Branch[k].r;
xx=Branch[k].x;
yb1=Branch[k].yb;
flag=Branch[k].flag;
temp=rr*rr+xx*xx;
yr=rr/temp;
yb=-xx/temp;
if(flag)
{Branch[k].IR=(vr[ii]-vr[jj])*yr-(vx[ii]-vx[jj])*yb;
Branch[k].IX=(vr[ii]-vr[jj])*yb+(vx[ii]-vx[jj])*yr;
}
else
{
Branch[k].IR=(yb1*vr[ii]-vr[jj])*yr-(yb1*vx[ii]-vx[jj])*yb;
Branch[k].IX=(yb1*vr[ii]-vr[jj])*yb+(yb1*vx[ii]-vx[jj])*yr;
}
printf("I%d%d=%f%f\n",Branch[k].i,Branch[k].j,Branch[k].IR,Branch[k].IX);
}
}
/*打印输出数据函数*/
voiddata_output2()
{
FILE*fp1;
fp1=fopen("Branchcurrent.txt","wb");
for(intk=0;k<=4;k++)
{
fprintf(fp1,"%9.6f+j%9.6f",Branch[k].IR,Branch[k].IX);
fprintf(fp1,"\n");
}
fclose(fp1);
}
/*主函数*/
voidmain()
{
data_read();
ComputeYmatrix();
data_output();
ShortcutCurrent();
data_output2();
}
1.6短路实验相关计算结果:
实验二:
简单系统的牛顿法潮流计算的上机实验
2.1计算程序框图
2.2程序清单
(1)首先运用C语言程序计算已知网络参数计算节点导纳矩阵;
(2)构建函数给电压赋初值;
(3)构建函数计算迭代过程中节点不平衡量;
(4)构建函数计算雅可比矩阵元素;
(5)运用函数将雅克比矩阵变形,计算修正方程;
(6)构建函数按公式计算修正各节点的电压;
(7)在主函数中构建goto函数,进行迭代关系;
(8)结束迭代,计算平衡节点的功率和网络的功率分布;
2.3程序代码
#include"stdio.h"
/*定义节点支路结构体*/
structBranchInfo
{
inti;
intj;
floatr;
floatx;
floatyb;
intflag;
}Branch[10];
/*定义PQN结构体*/
structPQNode
{
inti;
floatp;
floatqv;
intflag;
}nodepq[10];
intpqsum,pvsum,SlackNo;
floatslackVoltage,eps;
doubleimb[10][2];
doubletempimb[10][2];
floatPP[10][1];
intnNode,nBranch;
floatYR[10][10],YB[10][10];
floate0[10],f0[10];
floatw[10][10];
floaterrorMax;
/*数据读取函数*/
voiddata_read()
{
FILE*fp;
fp=fopen("node4.txt","rb");
fscanf(fp,"%d%d%d%d%d%f%f\n",&nNode,&nBranch,&pqsum,&pvsum,&SlackNo,&slackVoltage,&eps);
printf("%3d%3d%3d%3d%3d%f%f\n",nNode,nBranch,pqsum,pvsum,SlackNo,slackVoltage,eps);
for(intk=0;k{
fscanf(fp,"%d%d%f%f%f%d\n",&Branch[k].i,&Branch[k].j,&Branch[k].r,&Branch[k].x,&Branch[k].yb,&Branch[k].flag);
printf("%d%d%f%f%f%d\n",Branch[k].i,Branch[k].j,Branch[k].r,Branch[k].x,Branch[k].yb,Branch[k].flag);
}
for(inti=0;i{
fscanf(fp,"%d%f%f%d\n",&nodepq[i].i,&nodepq[i].p,&nodepq[i].qv,&nodepq[i].flag);
printf("%d%f%f%d\n",nodepq[i].i,nodepq[i].p,nodepq[i].qv,nodepq[i].flag);
}
fclose(fp);
}
/*计算导纳参数矩阵*/
voidcomputeYmatrix()
{
for(inti=0;i<10;i++)
for(intj=0;j<10;j++)
{
YR[i][j]=0.0f;
YB[i][j]=0.0f;
}
floattemp;
intii,jj,flag;
floatrr,xx,yb,yb1,yr;
for(intk=0;k{
ii=Branch[k].i;
jj=Branch[k].j;
rr=Branch[k].r;
xx=Branch[k].x;
yb1=Branch[k].yb;
flag=Branch[k].flag;
temp=rr*rr+xx*xx;
yr=rr/temp;
yb=-xx/temp;
if(flag)//line
{
YR[ii][ii]+=yr;
YR[jj][jj]+=yr;
YB[ii][ii]+=yb;
YB[jj][jj]+=yb;
YB[ii][ii]+=yb1;
YB[jj][jj]+=yb1;
YR[ii][jj]=-yr;
YR[jj][ii]=-yr;
YB[ii][jj]=-yb;
YB[jj][ii]=-yb;
}
else//transformer
{
yb1=1/yb1;
YR[ii][jj]=0;
YR[jj][ii]=0;
YB[ii][jj]=1/(xx*yb1);
YB[jj][ii]=1/(xx*yb1);
if(ii==3)
{
YR[ii][ii]=0;
YB[ii][ii]=-(1/xx);
}
elseif(jj==3)
{
YR[jj][jj]=0;
YB[jj][jj]=-(1/xx);
}
if(ii==1)
{
YB[ii][ii]+=-1/(yb1*yb1*xx);
}
elseif(jj==1)
{
YB[jj][jj]+=-1/(yb1*yb1*xx);
}
}
}
}
/*数据输出函数,输出到Ymatrix.txt文本文档*/
voiddata_output()
{
FILE*fp;
fp=fopen("Ymatrix.txt","wb");
for(inti=1;i<=nNode;i++)
{
for(intj=1;j<=nNode;j++)
{
fprintf(fp,"%8.5f+j%8.5f",YR[i][j],YB[i][j]);
}
fprintf(fp,"\n");
}
fclose(fp);
}
/*电压初始化函数*/
voidinitializeVoltage()
{
intk,flag;
for(k=0;k{flag=nodepq[k].flag;
if(flag)
{e0[nodepq[k].i]=1.0;
f0[nodepq[k].i]=0.0;
}
else
{
e0[nodepq[k].i]=nodepq[k].qv;
f0[nod