欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    潮流计算代码c++(共37页).docx

    • 资源ID:13397687       资源大小:116.22KB        全文页数:37页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    潮流计算代码c++(共37页).docx

    精选优质文档-倾情为你奉上电力系统潮流上机课程设计报告 院 系:电气与电子工程学院 班 级: 电气1405 学 号: 学生姓名: 指导教师: 孙英云 设计周数: 两周 成 绩: 日期:2017年7月5日专心-专注-专业一、课程设计的目的与要求培养学生的电力系统潮流计算机编程能力,掌握计算机潮流计算的相关知识二、 设计正文1 掌握计算机潮流计算的原理:a) 复习电力系统分析基础中潮流的计算机算法一章,重点掌握节点分类、潮流算法介绍b) 详细阅读牛拉法部分,掌握潮流方程(极坐标、直角坐标)的写法,掌握雅可比矩阵的公式及排列顺序和潮流方程、变量顺序的关系,掌握迭代法收敛条件及迭代法的基本原理c) 设计程序框图,划分功能模块、并对每个模块的输入输出量进行细化。2 编写计算机潮流计算程序a) 学习了解IEEE标准格式数据,学习掌握C/C+读取数据的方法b) 设计计算机数据存储母线、支路数据的结构,并将所读取的数据存放于所设计的结构当中c) 学习节点排序、节点导纳阵计算方法,编写节点导纳阵生成模块d) 编写潮流方程不平衡量计算模块e) 编写雅可比矩阵生成子模块f) 利用给定的pfMatrix类,编写修正量计算模块g) 实现潮流计算主程序,并利用IEEE标准节点数据进行校验,要求能够输出计算结果、支路潮流等必要信息3 思考题 1潮流计算的方法有哪些?各有何特点?    答:潮流计算分为简单电力网络的手算和复杂电力网络的机算两大类,其中机算又有高斯-赛德尔法、牛顿-拉夫逊法和P-Q分解法。各方法特点如下所示:手算求解潮流一般只用于简单的网络中,计算量大,对于多节点的网络用手算一般难以解决问题。但是通过手算可以对物理概念的理解,还可以在运用计算机计算前由手算的形式求取某些原始数据。方法高斯-赛德尔法牛顿-拉夫逊法P-Q分解法初值要求不高高高迭代次数多少多收敛速度慢较快最快精度三者一样应用早期应用多,现在较少广泛应用应用较多2如果交给你一个任务,请你用已有的潮流计算软件计算北京城市电网的潮流,你应该做哪些工作?(收集哪些数据,如何整理,计算结果如何分析)答:.所需要收集的数据: A.电网中所有节点的数据: a各节点的类型,包括平衡节点、PV 节点、PQ 节点 b. 对于平衡节点要了解节点的电压大小相位、及节点所能提供的最大最小有功无功功率 c. PV节点要知道节点电压大小注入有功功率及节点所能提供的最大和最小无功功.率 d. PQ节点要知道节点的注入有功和无功功率 B电网中所有支路的数据: a.各支路类型,即是否含有变压器 b.各支路的电阻、电感、电纳 c.各变压器的变比。 数据整理:将上述数据资料进行分类整理,并为每个节点及支路编上编号。将整理的结果写成本实验中所要求的格式(原始数据的txt文档),再用本实验所编制的程序进行求解,得到各节点电压、相位,各线路传输功率、损耗,平衡节点注入功率等数值。.计算结果分析:考虑PQ节点的电压是否过高或过低;分析PV节点的电压幅值是否正常及无功功率是否超出范围;分析平衡节点有功、无功功率是否在节点所能提供的范围之内;分析给定之路的功率,看是否超出线路的最大传输容量;分析整个系统的网损是否达到标准。3设计中遇到的问题和解决的办法。 c+好久没用,有些生疏。经过复习与百度,渐渐回忆起来。潮流计算机解法已经遗忘,经过复习查书,很快熟悉起来。对老师的思路不是很理解,经过与同学一起探讨,得到了正确答案。三、 课程设计总结或结论2016下半年学历电力系统潮流计算,当时并没有编程实践,就背了背矩阵公式。现在真让我们上手实践,感觉还是略有难度,很有挑战性,毕竟平时没多少机会接触程序。通过这两周的摸索与交流,最终完成了潮流的编程计算。由于是在老师的工作基础上进行补充与改造,所以要读懂老师的代码。我觉得老师的注释还是太少,而且还是英文(虽然英语也能看懂,但还是觉得中文环境用中文好)。在对节点数据的处理上,我们对老师的思路并不能感到理解,因此在后面雅克比矩阵生成与不平衡量计算模块绕了些许弯路,我最后还是没采用老师的办法。除了算法的设计外,最恼人的当属开发工具了,机房是vs2010,而我电脑上是vc+6.0与vs2015,一开始用vc写,然后出了一个迷之bug,换到了vs2010才解决。但我电脑装上vs2010却因为2015的存在无法运行,vs2015也无法运行我在2010下写好的程序。不想卸掉花老长时间才装上的巨大2015,为此浪费了许多时间,很令人生气。能够亲手实践电力系统潮流的计算机计算,还是学到了很多知识,对潮流计算那一部分知识又有了更深的印象。四、参考文献1. 电力系统稳态分析,陈珩,中国电力出版社,2007年,第三版;2. 高等电力网络分析,张伯明,陈寿孙,严正,清华大学出版社,2007年,第二版3. 电力系统计算:电子数字计算机的应用,西安交通大学等合编。北京:水利电力出版社;4. 现代电力系统分析,王锡凡主编,科学出版社; 二、 程序Example.cpp#include <string> #include <iostream>#include <fstream>#include "pf.h"using namespace std;void main()pf A;A.readDataFromFile("009ieee.dat");A.initPFData(); A.makeYMatrix();A.makeJacobi();A.solveLF();A.outputResult();system("pause");Pf.cpp#include "pf.h"using 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!=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(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);m_Bus_Num = atoi(strTemp.c_str(); / 2.2 read each bus data here/ allocate memory for m_Busm_Bus = new Busm_Bus_Num;m_Bus_newIdx = new intm_Bus_Num;for (int i = 0; i<m_Bus_Num; i+)getline(fin,strLine);strTemp = strLine.substr(0,4);/ read bus numm_Busi.Num = atoi(strTemp.c_str();/ read bus Name;strTemp = strLine.substr(5,7);m_Busi.Name = strTemp;/ read bus type PQ: Type = 1; PV: Type = 2; swing: Type = 3;/判断条件YYstrTemp = 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_str()=3)m_Busi.Type = 3;m_sw_Num +;/read bus VoltagestrTemp = strLine.substr(27,6);m_Busi.V = atof(strTemp.c_str();/read bus anglestrTemp = strLine.substr(33,7);m_Busi.theta = atof(strTemp.c_str()/180*3.;/read bus Load PstrTemp = strLine.substr(40,9);m_Busi.LoadP = atof(strTemp.c_str()/m_SBase;/read bus Load QstrTemp = strLine.substr(49,10);m_Busi.LoadQ = atof(strTemp.c_str()/m_SBase;/read bus Gen PstrTemp = 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 bus 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.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 numberstrTemp = strLine.substr(0,4);m_Linei.NumI = atoi(strTemp.c_str();/read Z bus numberstrTemp = strLine.substr(5,4);m_Linei.NumJ = atoi(strTemp.c_str();/read line typestrTemp = strLine.substr(18,1);m_Linei.Type = atoi(strTemp.c_str();/read line resistance RstrTemp = strLine.substr(19,10);m_Linei.R = atof(strTemp.c_str();/read line reactance XstrTemp = strLine.substr(29,11);m_Linei.X = atof(strTemp.c_str();/read line charging BstrTemp = strLine.substr(40,10);m_Linei.B = atof(strTemp.c_str();/read transformer ratiostrTemp = strLine.substr(76,6);m_Linei.K = atof(strTemp.c_str(); / 4. close the file;fin.close();elsecout<<"file open fail!"<<endl;return 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; i<m_Bus_Num; i+)/按PQPVSW排序switch (m_Busi.Type)case 1:m_Bus_newIdxi = iPQ;iPQ+;break;case 2:m_Bus_newIdxi = iPV + m_pq_Num;iPV+;break;case 3:m_Bus_newIdxi = iSW + m_pq_Num + m_pv_Num;iSW+;break;for (i =0; i<m_Bus_Num; i+)cout<<m_Bus_newIdxi<<endl;/ 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_Num,m_Bus_Num);return 0;int pf:getBusIdx(int busNum)/ return the index of bus from busNumint i,idx = -1;for (i = 0; i<m_Bus_Num; i+)if (m_Busi.Num = busNum)idx = i;return idx;int pf:makeYMatrix()/ TO DOint i;float Line_G;float Line_B;for(i = 0;i <m_Line_Num;i+)Line_G = m_Linei.R/(m_Linei.R*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_Linei.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.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_Matrix_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) += -Line_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(getBusIdx(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) = 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; j<m_Bus_Num; j+)H=0.0;J=0.0;L=0.0;N=0.0;if(i=j)for(int k=0;k<m_Bus_Num;k+)if(i!=k)/H+=-m_Busi.V*m_Busk.V*(m_Matrix_G(getBusIdx(m_Busi.Num),getBusIdx(m_Busk.Num)*sin(m_Busi.theta-m_Busk.theta)-m_Matrix_B(getBusIdx(m_Busi.Num),getBusIdx(m_Busk.Num)*cos(m_Busi.theta-m_Busk.theta);/J+= m_Busi.V*m_Busk.V*(m_Matrix_G(getBusIdx(m_Busi.Num),getBusIdx(m_Busk.Num)*cos(m_Busi.theta-m_Busk.theta)+m_Matrix_B(getBusIdx(m_Busi.Num),getBusIdx(m_Busk.Num)*sin(m_Busi.theta-m_Busk.theta);/N+= m_Busi.V*m_Busk.V*(m_Matrix_G(getBusIdx(m_Busi.Num),getBusIdx(m_Busk.Num)*cos(m_Busi.theta-m_Busk.theta)+m_Matrix_B(getBusIdx(m_Busi.Num),getBusIdx(m_Busk.Num)*sin(m_Busi.theta-m_Busk.theta);/L+=m_Busi.V*m_Busk.V*(m_Matrix_G(getBusIdx(m_Busi.Num),getBusIdx(m_Busk.Num)*sin(m_Busi.theta-m_Busk.theta)-m_Matrix_B(getBusIdx(m_Busi.Num),getBusIdx(m_Busk.Num)*cos(m_Busi.theta-m_Busk.theta);H+=-m_Busi.V*m_Busk.V*(m_Matrix_G(i,k)*sin(m_Busi.theta-m_Busk.theta)-m_Matrix_B(i,k)*cos(m_Busi.theta-m_Busk.theta);J+= m_Busi.V*m_Busk.V*(m_Matrix_G(i,k)*cos(m_Busi.theta-m_Busk.theta)+m_Matrix_B(i,k)*sin(m_Busi.theta-m_Busk.theta);N+= m_Busi.V*m_Busk.V*(m_Matrix_G(i,k)*cos(m_Busi.theta-m_Busk.theta)+m_Matrix_B(i,k)*sin(m_Busi.theta-m_Busk.theta);L+=m_Busi.V*m_Busk.V*(m_Matrix_G(i,k)*sin(m_Busi.theta-m_Busk.theta)-m_Matrix_B(i,k)*cos(m_Busi.theta-m_Busk.theta);/N+=2*m_Busi.V*m_Busi.V*m_Matrix_G(getBusIdx(m_Busi.Num),getBusIdx(m_Busi.Num);/L+=-2*m_Busi.V*m_Busi.V*m_Matrix_B(getBusIdx(m_Busi.Num),getBusIdx(m_Busi.Num);N+=2*m_Busi.V*m_Busi.V*m_Matrix_G(i,i);L+=-2*m_Busi.V*m_Busi.V*m_Matrix_B(i,i);else/H = m_Busi.V*m_Busj.V*(m_Matrix_G(getBusIdx(m_Busi.Num),getBusIdx(m_Busj.Num)*sin(m_Busi.theta-m_Busj.theta)-m_Matrix_B(getBusIdx(m_Busi.Num),getBusIdx(m_Busj.Num)*cos(m_Busi.theta-m_Busj.theta);/J= -m_Busi.V*m_Busj.V*(m_Matrix_G(getBusIdx(m_Busi.Num),getBusIdx(m_Busj.Num)*cos(m_Busi.theta-m_Busj.theta)+m_Matrix_B(getBusIdx(m_Busi.Num),getBusIdx(m_Busj.Num)*sin(m_Busi.theta-m_Busj.theta);/N=-J;/L=H;H = m_Busi.V*m_Busj.V*(m_Matrix_G(i,j)*sin(m_Busi.theta-m_Busj.theta)-m_Matrix_B(i,j)*cos(m_Busi.theta-m_Busj.theta);J= -m_Busi.V*m_Busj.V*(m_Matrix_G(i,j)*cos(m_Busi.theta-m_Busj.theta)+m_Matrix_B(i,j)*sin(m_Busi.theta-m_Busj.theta);N=-J;L=H;/雅可比矩阵int a,b;switch(m_Busi.Type)case 1: / PQ bus;switch(m_Busj.Type)case 1: / PQ bus/ H N J L four elementsm_Jacobi(2*m_Bus_newIdxi,2*m_Bus_newIdxj) = H;m_Jacobi(2*m_Bus_newIdxi,2*m_Bus_newIdxj+1) = N;m_Jacobi(2*m_Bus_newIdxi+1,2*m_Bus_newIdxj) = J;m_Jacobi(2*m_Bus_newIdxi+1,2*m_Bus_newIdxj+1) = L;break;case 2: / PV bus/ H J two elementsm_Jacobi(2*m_Bus_newIdxi,m_Bus_newIdxj+m_pq_Num) = H;m_Jacobi(2*m_Bus_newIdxi+1,m_Bus_newIdxj+m_pq_Num) = J;break;case 3: / SW busbreak;break;case 2: / PV bus;switch(m_Busj.Type)case 1: / PQ bus/ H N two elementsm_Jacobi(m_Bus_newIdxi+m_pq_Num,2*m_Bus_newIdxj) = H;m_Jacobi(m_Bus_newIdxi+m_pq_Num,2*m_Bus_newIdxj+1) = N;break;case 2: / PV bus/ H, one elementm_Jacobi(m_Bus_newIdxi+m_pq_Num,m_Bus_newIdxj+m_pq_Num) = H;break;case 3: / SW busbreak;break;case 3: / SW bus;break;ofstream fout("J.txt");for(int i=0;i<equNum;i+)for(int j=0;j<equNum;j+)fout<<setw(12)<<m_Jacobi(i,j)<<" "fout<<endl;fout.close();return 0;int pf:solveLF()/ TODOint i;int equNum = 2*m_pq_Num + m_pv_Num;double * bph = new doubleequNum;/ 1. initializefor ( i = 0; i<m_Bus_Num; i+)switch (m_Busi.Type)case 1: /PQ nodem_Busi.V = 1;m_Busi.theta = 0;break;case 2: /PV nodem_Busi.theta = 0;break;case 3: /SW nodebreak; / 2. iterateint maxIter = 20;int p,k;for (i = 0; i<maxIter; i+)/ 2.1 calDeltaSif(calcDeltaS(bph)=1) /判断是否收敛cout<<"一共迭代"<<i+1<

    注意事项

    本文(潮流计算代码c++(共37页).docx)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开