ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:96.33KB ,
资源ID:6239499      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6239499.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(潮流计算代码c++.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

潮流计算代码c++.docx

1、潮流计算代码c+电力系统潮流上机课程设计报告 院 系:电气与电子工程学院 班 级: 电气1405 学 号: 1141180505 学生姓名: 指导教师: 孙英云 设计周数: 两周 成 绩: 日期:2017年7月5日一、课程设计的目的与要求培养学生的电力系统潮流计算机编程能力,掌握计算机潮流计算的相关知识二、 设计正文1掌握计算机潮流计算的原理:a)复习电力系统分析基础中潮流的计算机算法一章,重点掌握节点分类、潮流算法介绍b)详细阅读牛拉法部分,掌握潮流方程(极坐标、直角坐标)的写法,掌握雅可比矩阵的公式及排列顺序和潮流方程、变量顺序的关系,掌握迭代法收敛条件及迭代法的基本原理c)设计程序框图,

2、划分功能模块、并对每个模块的输入输出量进行细化。2编写计算机潮流计算程序a)学习了解IEEE标准格式数据,学习掌握C/C+读取数据的方法b)设计计算机数据存储母线、支路数据的结构,并将所读取的数据存放于所设计的结构当中c)学习节点排序、节点导纳阵计算方法,编写节点导纳阵生成模块d)编写潮流方程不平衡量计算模块e)编写雅可比矩阵生成子模块f)利用给定的pfMatrix类,编写修正量计算模块g)实现潮流计算主程序,并利用IEEE标准节点数据进行校验,要求能够输出计算结果、支路潮流等必要信息3思考题1潮流计算的方法有哪些?各有何特点?答:潮流计算分为简单电力网络的手算和复杂电力网络的机算两大类,其中

3、机算又有高斯-赛德尔法、牛顿-拉夫逊法和P-Q分解法。各方法特点如下所示:手算求解潮流一般只用于简单的网络中,计算量大,对于多节点的网络用手算一般难以解决问题。但是通过手算可以对物理概念的理解,还可以在运用计算机计算前由手算的形式求取某些原始数据。方法高斯-赛德尔法牛顿-拉夫逊法P-Q分解法初值要求不高高高迭代次数多少多收敛速度慢较快最快精度三者一样应用早期应用多,现在较少广泛应用应用较多2如果交给你一个任务,请你用已有的潮流计算软件计算北京城市电网的潮流,你应该做哪些工作?(收集哪些数据,如何整理,计算结果如何分析)答:.所需要收集的数据:A.电网中所有节点的数据:a各节点的类型,包括平衡节

4、点、PV节点、PQ节点b.对于平衡节点要了解节点的电压大小相位、及节点所能提供的最大最小有功无功功率c.PV节点要知道节点电压大小注入有功功率及节点所能提供的最大和最小无功功.率d.PQ节点要知道节点的注入有功和无功功率B电网中所有支路的数据:a.各支路类型,即是否含有变压器b.各支路的电阻、电感、电纳c.各变压器的变比。数据整理:将上述数据资料进行分类整理,并为每个节点及支路编上编号。将整理的结果写成本实验中所要求的格式(原始数据的txt文档),再用本实验所编制的程序进行求解,得到各节点电压、相位,各线路传输功率、损耗,平衡节点注入功率等数值。.计算结果分析:考虑PQ节点的电压是否过高或过低

5、;分析PV节点的电压幅值是否正常及无功功率是否超出范围;分析平衡节点有功、无功功率是否在节点所能提供的范围之内;分析给定之路的功率,看是否超出线路的最大传输容量;分析整个系统的网损是否达到标准。3设计中遇到的问题和解决的办法。c+好久没用,有些生疏。经过复习与XX,渐渐回忆起来。潮流计算机解法已经遗忘,经过复习查书,很快熟悉起来。对老师的思路不是很理解,经过与同学一起探讨,得到了正确答案。三、课程设计总结或结论2016下半年学历电力系统潮流计算,当时并没有编程实践,就背了背矩阵公式。现在真让我们上手实践,感觉还是略有难度,很有挑战性,毕竟平时没多少机会接触程序。通过这两周的摸索与交流,最终完成

6、了潮流的编程计算。由于是在老师的工作基础上进行补充与改造,所以要读懂老师的代码。我觉得老师的注释还是太少,而且还是英文(虽然英语也能看懂,但还是觉得中文环境用中文好)。在对节点数据的处理上,我们对老师的思路并不能感到理解,因此在后面雅克比矩阵生成与不平衡量计算模块绕了些许弯路,我最后还是没采用老师的办法。除了算法的设计外,最恼人的当属开发工具了,机房是vs2010,而我电脑上是vc+6.0与vs2015,一开始用vc写,然后出了一个迷之bug,换到了vs2010才解决。但我电脑装上vs2010却因为2015的存在无法运行,vs2015也无法运行我在2010下写好的程序。不想卸掉花老长时间才装上

7、的巨大2015,为此浪费了许多时间,很令人生气。能够亲手实践电力系统潮流的计算机计算,还是学到了很多知识,对潮流计算那一部分知识又有了更深的印象。四、参考文献1.电力系统稳态分析,陈珩,中国电力出版社,2007年,第三版;2.高等电力网络分析,张伯明,陈寿孙,严正,清华大学出版社,2007年,第二版3.电力系统计算:电子数字计算机的应用,西安交通大学等合编。北京:水利电力出版社;4.现代电力系统分析,王锡凡主编,科学出版社; 二、程序Example.cpp#include #include #include #include pf.husing namespace std;void main(

8、) pf A; A.readDataFromFile(009ieee.dat); A.initPFData(); A.makeYMatrix(); A.makeJacobi(); A.solveLF(); A.outputResult(); system(pause);Pf.cpp#include pf.husing namespace std;pf:pf(void) m_Line = NULL; m_Bus = NULL; m_Bus_newIdx = NULL; m_pv_Num = 0; m_sw_Num = 0; m_pq_Num = 0;pf:pf(void) if (m_Line!

9、=NULL) delete m_Line; if (m_Bus!=NULL) delete m_Bus; if (m_Bus_newIdx!=NULL) delete m_Bus_newIdx;int pf:readDataFromFile(string fileName) int i; string strLine,strTemp; ifstream fin; / open file to read; fin.open(fileName.c_str(); if(!fin.fail() / 1. read SBase; getline(fin,strLine); strTemp.assign(

10、strLine,31,6); m_SBase = atof(strTemp.c_str(); / 2. read Bus Data here ; / 2.1 read Bus num; getline(fin,strLine); size_t pos_begin, pos_end; pos_begin = strLine.find(FOLLOWS); pos_begin = pos_begin + size_t(10); pos_end = strLine.find(ITEM); strTemp = strLine.substr(pos_begin, pos_end - pos_begin);

11、 m_Bus_Num = atoi(strTemp.c_str(); / 2.2 read each bus data here / allocate memory for m_Bus m_Bus = new Busm_Bus_Num; m_Bus_newIdx = new intm_Bus_Num; for (int i = 0; im_Bus_Num; i+) getline(fin,strLine); strTemp = strLine.substr(0,4); / read bus num m_Busi.Num = atoi(strTemp.c_str(); / read bus Na

12、me; strTemp = strLine.substr(5,7); m_Busi.Name = strTemp; / read bus type PQ: Type = 1; PV: Type = 2; swing: Type = 3; /判断条件YY strTemp = strLine.substr(24,2); if (atoi(strTemp.c_str()=1) m_Busi.Type = 1; m_pq_Num +; else if(atoi(strTemp.c_str()=2) m_Busi.Type = 2; m_pv_Num +; else if(atoi(strTemp.c_

13、str()=3) m_Busi.Type = 3; m_sw_Num +; /read bus Voltage strTemp = strLine.substr(27,6); m_Busi.V = atof(strTemp.c_str(); /read bus angle strTemp = strLine.substr(33,7); m_Busi.theta = atof(strTemp.c_str()/180*3.1415926; /read bus Load P strTemp = strLine.substr(40,9); m_Busi.LoadP = atof(strTemp.c_s

14、tr()/m_SBase; /read bus Load Q strTemp = strLine.substr(49,10); m_Busi.LoadQ = atof(strTemp.c_str()/m_SBase; /read bus Gen P strTemp = strLine.substr(59,8); m_Busi.GenP = atof(strTemp.c_str()/m_SBase; /read bus Gen Q strTemp = strLine.substr(67,8); m_Busi.GenQ = atof(strTemp.c_str()/m_SBase; /read b

15、us Shunt conductance G strTemp = strLine.substr(106,8); /read bus Shunt susceptance B strTemp = strLine.substr(114,8); / 3. read Line Data here ; / 3.1 read Line num; getline(fin,strLine); getline(fin,strLine); pos_begin = strLine.find(FOLLOWS); pos_begin = pos_begin + size_t(10); pos_end = strLine.

16、find(ITEM); strTemp = strLine.substr(pos_begin, pos_end - pos_begin); m_Line_Num = atoi(strTemp.c_str(); / 3.2 read each line data; m_Line = new Linem_Line_Num; for (i = 0;i m_Line_Num;i+) getline(fin,strLine); /read Tap bus number strTemp = strLine.substr(0,4); m_Linei.NumI = atoi(strTemp.c_str();

17、/read Z bus number strTemp = strLine.substr(5,4); m_Linei.NumJ = atoi(strTemp.c_str(); /read line type strTemp = strLine.substr(18,1); m_Linei.Type = atoi(strTemp.c_str(); /read line resistance R strTemp = strLine.substr(19,10); m_Linei.R = atof(strTemp.c_str(); /read line reactance X strTemp = strL

18、ine.substr(29,11); m_Linei.X = atof(strTemp.c_str(); /read line charging B strTemp = strLine.substr(40,10); m_Linei.B = atof(strTemp.c_str(); /read transformer ratio strTemp = strLine.substr(76,6); m_Linei.K = atof(strTemp.c_str(); / 4. close the file; fin.close(); else coutfile open fail!endl; retu

19、rn 0;int pf:initPFData() / according to Page 132 of ref book 3, / reindex the bus num ase the sequence PQ PV SW; int iPQ,iPV,iSW; iPQ = 0; iPV = 0; iSW = 0; int i; for( i = 0; im_Bus_Num; i+)/按PQPVSW排序 switch (m_Busi.Type) case 1: m_Bus_newIdxi = iPQ; iPQ+; break; case 2: m_Bus_newIdxi = iPV + m_pq_

20、Num; iPV+; break; case 3: m_Bus_newIdxi = iSW + m_pq_Num + m_pv_Num; iSW+; break; for (i =0; im_Bus_Num; i+) coutm_Bus_newIdxiendl; / here we give the size of Jacobi matrix; m_Jacobi.setSize(2*m_pq_Num+m_pv_Num,2*m_pq_Num+m_pv_Num); m_Matrix_G.setSize(m_Bus_Num,m_Bus_Num); m_Matrix_B.setSize(m_Bus_N

21、um,m_Bus_Num); return 0;int pf:getBusIdx(int busNum) / return the index of bus from busNum int i,idx = -1; for (i = 0; im_Bus_Num; i+) if (m_Busi.Num = busNum) idx = i; return idx;int pf:makeYMatrix() / TO DO int i; float Line_G; float Line_B; for(i = 0;i m_Line_Num;i+) Line_G = m_Linei.R/(m_Linei.R

22、*m_Linei.R+m_Linei.X*m_Linei.X); Line_B = -m_Linei.X/(m_Linei.R*m_Linei.R+m_Linei.X*m_Linei.X); if(m_Linei.Type != 2) /m_Matrix_G.DumpInfo(here); m_Matrix_G(getBusIdx(m_Linei.NumI),getBusIdx(m_Linei.NumI) = m_Matrix_G(getBusIdx(m_Linei.NumI),getBusIdx(m_Linei.NumI) + Line_G; m_Matrix_G(getBusIdx(m_L

23、inei.NumI),getBusIdx(m_Linei.NumJ) += -Line_G; m_Matrix_G(getBusIdx(m_Linei.NumJ),getBusIdx(m_Linei.NumI) += -Line_G; m_Matrix_G(getBusIdx(m_Linei.NumJ),getBusIdx(m_Linei.NumJ) = m_Matrix_G(getBusIdx(m_Linei.NumJ),getBusIdx(m_Linei.NumJ) + Line_G; m_Matrix_B(getBusIdx(m_Linei.NumI),getBusIdx(m_Linei

24、.NumI) = m_Matrix_B(getBusIdx(m_Linei.NumI),getBusIdx(m_Linei.NumI) + Line_B + m_Linei.B/2; m_Matrix_B(getBusIdx(m_Linei.NumI),getBusIdx(m_Linei.NumJ) += -Line_B; m_Matrix_B(getBusIdx(m_Linei.NumJ),getBusIdx(m_Linei.NumI) += -Line_B; m_Matrix_B(getBusIdx(m_Linei.NumJ),getBusIdx(m_Linei.NumJ) = m_Mat

25、rix_B(getBusIdx(m_Linei.NumJ),getBusIdx(m_Linei.NumJ) + Line_B + m_Linei.B/2; else m_Matrix_G(getBusIdx(m_Linei.NumI),getBusIdx(m_Linei.NumI) = m_Matrix_G(getBusIdx(m_Linei.NumI),getBusIdx(m_Linei.NumI) + Line_G/(m_Linei.K*m_Linei.K); m_Matrix_G(getBusIdx(m_Linei.NumI),getBusIdx(m_Linei.NumJ) += -Li

26、ne_G/m_Linei.K; m_Matrix_G(getBusIdx(m_Linei.NumJ),getBusIdx(m_Linei.NumI) += -Line_G/m_Linei.K; m_Matrix_G(getBusIdx(m_Linei.NumJ),getBusIdx(m_Linei.NumJ) = m_Matrix_G(getBusIdx(m_Linei.NumJ),getBusIdx(m_Linei.NumJ) + Line_G; m_Matrix_B(getBusIdx(m_Linei.NumI),getBusIdx(m_Linei.NumI) = m_Matrix_B(g

27、etBusIdx(m_Linei.NumI),getBusIdx(m_Linei.NumI) + Line_B/(m_Linei.K*m_Linei.K); m_Matrix_B(getBusIdx(m_Linei.NumI),getBusIdx(m_Linei.NumJ) += -Line_B/m_Linei.K; m_Matrix_B(getBusIdx(m_Linei.NumJ),getBusIdx(m_Linei.NumI) += -Line_B/m_Linei.K; m_Matrix_B(getBusIdx(m_Linei.NumJ),getBusIdx(m_Linei.NumJ)

28、= m_Matrix_B(getBusIdx(m_Linei.NumJ),getBusIdx(m_Linei.NumJ) + Line_B; m_Matrix_G.outputMatrixtoFile(G.txt);/实部 m_Matrix_B.outputMatrixtoFile(B.txt);/虚部 return 0;int pf:makeJacobi() int equNum = 2*m_pq_Num+m_pv_Num; int i,j,k; double H,J,N,L; / init Jacobi matrix; for(i = 0;i equNum;i+) for(j = 0;j equNum;j+) m_Jacobi(i,j) = 0.0; for(i = 0; i m_Bus_Num; i+) for(j = 0; jm_Bus_Num; j+) H=0.0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1