《电力系统潮流计算C语言程序及说明.docx》由会员分享,可在线阅读,更多相关《电力系统潮流计算C语言程序及说明.docx(16页珍藏版)》请在优知文库上搜索。
1、实验目的根据所给的电力系统,编制潮流计算程序,通过计算机进行调试,最后完成一个切实可行的电力系统计算应用程序。通过自己设计电力系统计算程序使同学对电力系统分析有进一步理解,同时加强计算机实际应用能力的训练。程序计算原理1、概述应用计算机进行电力系统计算,首先要掌握电力系统相应计算的数学模型;其次是运用合理的计算方法;第三那么是选择适宜的计算机语言编制计算程序。建立电力系统计算的相关数学模型,就是建立用于描述电力系统相应计算的有关参数间的相互关系的数学方程式。该数学模型的建立往往要突出问题的主要方面,即考虑影响问题的主要因素,而忽略些次要因素,使数学模型既能正确地反映实际问题,又使计算不过于复杂
2、。运用合理的计算方法,就是要求所选用的计算方法能快速准确地得出正确结果,同时还应要求在解算过程中占用内存少,以利提高计算机的解题规模。选择适宜的语言编写程序,就是首先确定用什么计算机语言来编制程序;其次是作出计算的流程图;第三根据流程图用选择的语言编写计算程序。然后上机调试,直到语法上无错误。本程序采用C语言进行编程。所编制的程序难免存在逻辑错误,因此先用一个结果的系统作为例题进行计算。用程序计算的结果和结果相比拟,如果结果相差甚远就要逐步分析程序的计算步骤,查出问题的出处:如果结果比拟接近,那么逐步分析误差来源;直到结果正确为止。2、电力系统潮流计算的程序算法潮流计算是电力系统分析中的一-种
3、最根本的计算,它的任务是对给定的运行条件确定系统的运行状态,如母线上的电压(幅值及相角)、网络中的功率分布及功率损耗等。目前计算机潮流计算的方法主要有牛顿拉夫逊算法和PQ分解法。牛顿拉夫逊算法是数学上求解非线形方程组的有效方法,具有较好的收敛性,曾经是潮流计算中应用比拟普遍的方法。PQ快速分解法是从牛顿拉夫逊算法演变而来的,是将纯数学的牛顿拉夫逊算法与电力系统具体特点相结合并进行简化与改良而得出的。PQ快速分解法比牛顿-拉夫逊算法大大提高了计算速度和节省了内存,故而本程序以PQ快速分解法进行潮流计算。1)形成节点导纳矩阵(1)自导纳的形成对节点i其自导纳Yii是节点i以外的所有节点都接地时节点
4、i对地的总导纳。显然,Yii应等于与节点i相接的各支路导纳之和,即1.=%+z%j式中,y为节点i与零电位节点之间的支路导纳;yu为节点i与节点j之间的支路导纳。(2)互导纳的形成对节点i与节点k之间的互导纳是节点i、k之间的支路导纳的负值,即不难理解=%。假设节点i和k没有支路直接相连时,便有Yik=O(3)含变压器支路的处理假设节点p、q间接有变压器,如以下图所示,那么可作出其n型等值电路为:图1变压n型等值电路那么p、q的自导纳和节点间的互导纳分别为2)计算不平衡功率AP、ZkQ并形成修正方程式对每一个PQ节点或每一个PV节点都可以根据以下公式计算出有功功率增量AP而对于每一个PQ节点还
5、可以根据下面的公式计算出无功功率增量AQ在有功功率增量和无功功率增量不满足如下约束条件时利用PQ分解法那么可以形成如下修正方程3)利用因子表法求解修正方程在电网计算中经常遇到这样的问题,对方程组需要反复屡次求解,而每次求解仅改变常数项F,系数矩阵保持不变。按照一般的高斯消去法,对每一改变的常数项,形成包括常数项及系数矩阵在内的增广矩阵,然后消去回代求出其解。可以看出,每次对增广矩阵中A矩阵元素的消元都是重复的,为了防止这种重复,我们把对相同的系数矩阵重复进行的消去与对不同的常数项进行的消去分开进行,因此对系数矩阵的消去只需进行一次,并在消去的过程中将对常数项进行消去运算的运算因子保存下来,形成
6、所谓因子表,这就是因子表法。因为因子表记录了高斯消去法对常数项进行消去的全部信息,利用它便可对不同常数项进行消去,形成上三角矩阵,最后求出全部未知数。在使用PQ分解法时,其系数矩阵是在迭代过程中保持不变的,所以为了节省内存和缩短运算时间我们采取了因子表法。同时由于电网的节点导纳矩阵矩阵是稀疏阵和对称阵,于是我们可以采取只保存系数矩阵的上三角阵来使运算更为简化。假设线性方程组一般形式如下:a2。13ana2223-a2n其中A=43称为系数矩阵,X=1.X2毛XZJ称为未知数向量,F=fif2f3,/称为常数项向量。将矩阵A的元素进行如下处理:得到因子表其中6=1/若D,Ujj=甯(Kj);再利
7、用因子表进行前代过程,求出每次迭代后的常数项。其前代公式是:求得向量产=工管腔打子;再由因子表与前代得到的向量F,得到方程组求解出此方程即可得到线性方程组的解向量X=x2x3xtl4)屡次迭代最终求得V和以及全线路功率利用上面所介绍的方法求解修正方程组可以求得,V=1.xAKA%-匕/和应电J。再利用W=rw+aW幻,片”二片幻+.M)求得每次迭代后的结果。屡次迭代当其满足约束条件max*vj和max%Qflkqint有功、无功迭代结束标志dP、dQfloat*有功、无功不平衡量数组3、程序流程图读取节点数据读取线路数据并形成Y矩阵形成矩阵B,及B”并求取因子表设定PQ节点电压初值及各节点电压
8、相角的初值迭代计算计算平衡节点功率及全部线路功率图3程序主流程图4、程序代码图4迭代局部流程图*FUNCTION:POWERF1.OW*/*WRITTENBY:HUANG&YANG&TONG*/*1.ASTEDITED:2008-11-24*/#include#include/*宏定义*/#defineeP0.00001#defineeQ0.00001#defineY_(i,j)(*(*(Y+i)-i+j)#defineYij(*(Yi+j)#defineYji(*(*(Y+j)-j+i)#definePjiYji.G*cos(tmp)+Yji.B*sin(tmp)#definePijYij.
9、G*cos(tmp)+Yij.B*sin(tmp)#defineQjiYji.G*sin(tmp)-Yji.B*cos(tmp)#defineQijYij.G*sin(tmp)-Yij.B*cos(tmp)/*结构体变量定义*/structNodetype*节点功率*/floatP,Q;;struct1.inetype*线路类型*/floatG,B,B0,k;);/*子函数声明*/voidin_node();*读节点功率*/voidinjine();*读线路参数*/voidB_Form();*生成BP、BQ矩阵*/voidfactor();*求因子表*/voidsolve(float*B,fl
10、oat*X,intN);*解方程组*/voidPrtNode();建打印节点参数列voidErrorMsg(intFlag);/*错误提示信息*/*全局变量声明*/intNode;/*节点数*/int*Num;/*保存原始节点序号*/intNP,NQ=0;*PV+PQsPQ节点数*/structNodetype*No;/*节点数据*/struct1.inetype*Y;线路参数*/float*BP,*BQ;/*有功、无功简化雅克比矩阵B*/float*V;/*节点电压有效值*/float*Dlta;/*节点电压相角值*/unsignedintcount=0;/*迭代计数*/intij,k,m;
11、/*通用下标值*/floattmp;/*临时数据暂存刃char*Type;/*节点类型*/FI1.E*in,*out;/*输入、输出文件指针*/*/W函*木*木*/*I*I*I*主函数*I*I*I*/intmain(void)(intkp=l,kq=h*PsQ精度判断:1不满足,O-满足精度要求*/float*dP,*dPi,*dQ,*dQi;*PsQ*/floatDltai;struct1.inetype*Yi;structNodetype*Noi;floattP,tQ;if(in=fopen(Data.txt,r)=NU1.1.)ErrorMsg(I);if(out=fopen(out.t
12、xt,w)=NU1.1.)ErrorMsg(2);in_node();*读取节点参数并统计PQ、PV节点数*/injine();*读取线路参数并形成Y矩阵*/B_Form();/*形成B(BP&BQ)矩阵*/factor();/*求B因子式(仍保存于BP&BQ)*/for(i=0;iNQ;i+)*(V+i)=l;/*对PQ节点电压V赋初值*/dP=(float*)malloc(sizeof(float)*NP);/*P*/dQ=dP;*Q*/*PsAQ不同时存在,故而可共用空间*/loop:/*开始迭代*/if(kp=O&kq=O)goto100pEnd;COUnt+;/*迭代次数加*/if(count=65535)ElTorMSg(99);/*不收敛,退出*/