南通大学
power[i].Q2=-bus[branch[i].NodeJ-1].NodeF*I[i].E+bus[branch[i].NodeJ-1].NodeE*I[i].F;
power[i].Q2=power[i].Q2-branch[i].Y*vj2/2; }
else//变压器支路 {
double
ee=bus[abs(branch[i].NodeI)-1].NodeE/branch[i].Y-bus[abs(branch[i].NodeJ)-1].NodeE;
double
ff=bus[abs(branch[i].NodeI)-1].NodeF/branch[i].Y-bus[abs(branch[i].NodeJ)-1].NodeF;
I[i].E=(ee*branch[i].R+ff*branch[i].X)/zz; I[i].F=(ff*branch[i].R-ee*branch[i].X)/zz;
power[i].P1=(bus[abs(branch[i].NodeI)-1].NodeE*I[i].E+bus[abs(branch[i].NodeI)-1].NodeF*I[i].F)/branch[i].Y;
power[i].Q1=(bus[abs(branch[i].NodeI)-1].NodeF*I[i].E-bus[abs(branch[i].NodeI)-1].NodeE*I[i].F)/branch[i].Y;
power[i].P2=-bus[abs(branch[i].NodeJ)-1].NodeE*I[i].E-bus[abs(branch[i].NodeJ)-1].NodeF*I[i].F;
power[i].Q2=-bus[abs(branch[i].NodeJ)-1].NodeF*I[i].E+bus[abs(branch[i].NodeJ)-1].NodeE*I[i].F; } }
for(int j=0;j groundpower[j]=-(bus[ground[j].Node-1].NodeF*bus[ground[j].Node-1].NodeF+bus[ground[j].Node-1].NodeE*bus[ground[j].Node-1].NodeE)*ground[j].B; } } void POWERFLOW::outputdata()//输出潮流结果 { output< cout<<\潮流计算结果输出(方法:牛顿法--直角坐标形式):\\n\ cout<<\============\\n\ cout<<\节点号 电压幅值 电压相角 发出有功 发出无功 负荷有功 负荷无功 节点类型\ for(int i=0;i bus[i].VoltageVal=sqrt(bus[i].NodeE*bus[i].NodeE+bus[i].NodeF*bus[i].NodeF); bus[i].VoltageAngle=180*atan(bus[i].NodeF/bus[i].NodeE)/3.14159265; 19 南通大学 if(bus[i].NodeType==0) //PQ节点 { output< cout< if(bus[i].NodeType==2) //PV节点 { double qq=bus[i].NodeF*a[OldNewNumber[i+1]]-bus[i].NodeE*b[OldNewNumber[i+1]]; output< cout< if(bus[i].NodeType==3) //平衡节点 { double p1=bus[i].NodeE*a[OldNewNumber[i+1]]+bus[i].NodeF*b[OldNewNumber[i+1]]; double q1=bus[i].NodeF*a[OldNewNumber[i+1]]-bus[i].NodeE*b[OldNewNumber[i+1]]; output< cout< output<<\输电线路功率===========================================\\n\ output<<\首节点 \末节点 \ cout< cout<<\输电线路功率=====================================\\n\ 20 南通大学 cout<<\首节点 \末节点 \ for(int j=0;j output< output<<\接地支路功率===========================================\\n\ output<<\节点号 \ cout<<\接地支路功率=====================================\\n\ cout<<\节点号 \ if(GroundNumber==0) { output<<\系统中不存在接地支路!\ cout<<\系统中不存在接地支路!\ } for(int m=0;m output< cout< cout< void main() { int i,tt=3,ttt=3; cout< cout<<\请单击回车键执行程序\ while(getch()!='\\r'); do{i=14;} while(i!=14); POWERFLOW zypowerflow; switch (i) 21 南通大学 { case 14: zypowerflow.FileName=\ zypowerflow.ResultName=\ break; } zypowerflow.InputData(); zypowerflow.Tinny2(); zypowerflow.FormY(); cout<<\迭代次数 \最大误差 \ zypowerflow.output.open(zypowerflow.ResultName,ios::out); zypowerflow.output<<\迭代次数 \最大误差 \ cout< zypowerflow.branchpower(); zypowerflow.outputdata(); cout<<\双击ESC键退出\ while(getch()!=27); } 3.程序运行结果 22 南通大学 四、个人小结 1.课程设计问答 问: (1)节点导纳矩阵内各元素的含义; (2)PV节点与PQ节点的区别。 答: (1)节点导纳矩阵表示节点电压方程为IB=YB·UB,IB是节点注入电流的列向量。在电力系统计算中,节点注入电流可理解为节点电源电流与负荷电流之和,并规定电源向网络节点注入的电流为正。UB是节点电压的列向量。网络中有接地支路时,通常以大地作参考点,节点电压就是各节点的对地电压。并规定地节点的编号为零。YB是一个n*n阶节点导纳矩阵,其阶数n就等于网络中除参考节点外的节点数。节点导纳矩阵的对角元素Yii(i=1,2,...,n)称自导纳。节点导纳矩阵的非对角元素Yji(j=1,2,...,n;i=1,2,...,n;j≠i)称互导纳。 (2)PQ节点:等值负荷功率和等值电源功率是给定的,从而注入功率也是给定的,待求的则是节点电压的大小和相位角。PV节点:等值负荷和等值电源的有功功率,从而注入有功功率是给定的。等值负荷的无功功率和节点电压的大小是给定的。待求的则是等值电源的无功功率,从而注入无功功率和节点电压的相位角。 2.个人心得体会 这次课程设计的内容与之前学习的电力系统分析课程的内容相关,同时也需 23 南通大学 要我们之前学习的VC++或MATLAB相关的课程内容,这次我采用的是C++编程。本次课程设计一开始是要求高斯-赛德尔法潮流计算程序编程,但是由于本人水平有限,编程学习不精,对电力系统分析这门课也不是学得很透彻,加上网上没有相关内容可供参考,导致初期一直无从下手。后来可以用牛顿-拉夫逊法设计程序后,我下载了网上的相关程序,虽然能运行,但是对结果的分析我还是一筹莫展。看到C++就头疼,更何况还关于复杂的电力系统潮流计算。幸好程序的编写者有较多的注释,这让我多少能理解一点,于是我修改了程序,将多余的内容,例如登录系统和计时系统删去,使之能直接运行,免除了繁杂的登录程序。我的水平也局限于此了。老实说,如果这次课程设计如果让我们完全自己动手做,不借助任何外力,说实话是完全不现实的。毕竟大多数的同学不但电力系统分析是考试前突击,而且C++也勉强通过的,做这样一项课程设计无异于云中楼阁。至于这次课程设计,算是勉强完成,最后学会了一些东西,不能说完全没用,但学到的着实有限,希望学校以后能从学生能力出发,多出一些学生力所能及的课程设计,毕竟万丈高楼平地起,基础没打好,其他都是空谈。 五、参考文献 1.《电力系统分析(第三版)》.于永源,杨绮雯.中国电力出版社.2014 2.《电力系统三种潮流计算方法的比较》.百度文库.2011 3.《C++程序设计实践教程》.刘维富,陈建平,葛建芳,王春明.清华大学出版社.2007 24