自動控制裝置課程設計--電力系統(tǒng)潮流計算的程序設計_第1頁
已閱讀1頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  《自動控制裝置語言程序設計》</p><p>  題 目: 電力系統(tǒng)潮流計算的程序設計</p><p>  系 別: 自動化學院 </p><p>  專 業(yè): 07電氣工程及其自動化</p><p>  (低壓電力智能控制方向)</p><p>

2、;<b>  前 言</b></p><p>  潮流計算是研究電力系統(tǒng)穩(wěn)態(tài)運行情況的一種基本電氣計算,常規(guī)潮流計算的任務是根據(jù)給定的運行條件和網(wǎng)路結構確定整個系統(tǒng)的運行狀態(tài),如各母線上的電壓(幅值及相角)、網(wǎng)絡中的功率分布以及功率損耗等。潮流計算的結果是電力系統(tǒng)穩(wěn)定計算和故障分析的基礎。 </p><p>  具體表現(xiàn)在以下方面: </p><p

3、>  (1)在電網(wǎng)規(guī)劃階段,通過潮流計算,合理規(guī)劃電源容量及接入點,合理規(guī)劃網(wǎng)架,選擇無功補償方案,滿足規(guī)劃水平的大、小方式下潮流交換控制、調峰、調相、調壓的要求。 </p><p>  (2)在編制年運行方式時,在預計負荷增長及新設備投運基礎上,選擇典型方式進行潮流計算,發(fā)現(xiàn)電網(wǎng)中薄弱環(huán)節(jié),供調度員日常調度控制參考,并對規(guī)劃、基建部門提出改進網(wǎng)架結構,加快基建進度的建議。 </p><

4、p>  (3)正常檢修及特殊運行方式下的潮流計算,用于日運行方式的編制,指導發(fā)電廠開機方式,有功、無功調整方案及負荷調整方案,滿足線路、變壓器熱穩(wěn)定要求及電壓質量要求。 </p><p>  (4)預想事故、設備退出運行對靜態(tài)安全的影響分析及作出預想的運行方式調整方案。 </p><p>  總結為在電力系統(tǒng)運行方式和規(guī)劃方案的研究中,都需要進行潮流計算以比較運行方式或規(guī)劃供電方案的

5、可行性、可靠性和經(jīng)濟性。同時,為了實時監(jiān)控電力系統(tǒng)的運行狀態(tài),也需要進行大量而快速的潮流計算。因此,潮流計算是電力系統(tǒng)中應用最廣泛、最基本和最重要的一種電氣運算。在系統(tǒng)規(guī)劃設計和安排系統(tǒng)的運行方式時,采用離線潮流計算;在電力系統(tǒng)運行狀態(tài)的實時監(jiān)控中,則采用在線潮流計算。</p><p>  隨著計算機技術的迅速發(fā)展和普及,電子計算機已成為分析計算復雜電力系統(tǒng)各種運行情況的主要工具。</p><

6、p><b>  目錄</b></p><p><b>  目錄1</b></p><p>  一、課程設計目的和任務2</p><p>  二、設計主要儀器設備和材料3</p><p>  三、牛頓法潮流計算的步驟及計算程序框圖4</p><p><b&g

7、t;  四、程序代碼7</b></p><p><b>  五、計算結果24</b></p><p>  六、小結與展望24</p><p><b>  七、致謝25</b></p><p>  八、主要參考文獻25</p><p>  一、課程設計目的

8、和任務</p><p>  設計目的:通過對電力系統(tǒng)分析的學習,了解電力系統(tǒng)的運行和能量管理,計算電力系統(tǒng)潮流分布以及有功和無功功率的分點,掌握電力系統(tǒng)環(huán)網(wǎng)(牛頓-拉夫遜法、P-Q分解法)的計算方法。并熟練使用計算機編程。</p><p>  設計任務:如圖所示電力系統(tǒng)節(jié)點潮流及阻抗、導納分布圖,用直角坐標牛頓拉夫遜法(極坐標牛頓-拉夫遜法、P-Q分解法)計算機編程計算各線路潮流分布。寫出

9、編程思想及流程框圖。并附錄原程序。</p><p>  圖1 IEEE 9節(jié)點電力系統(tǒng)線路圖</p><p>  IEEE9節(jié)點電力系統(tǒng)原始數(shù)據(jù):圖中GEN1節(jié)點為平衡節(jié)點,V1=1.04,GEN2和GEN3為PV節(jié)點,V2=1.025,P2=1.63,V3=1.025,P3=0.85,其他節(jié)點為PQ節(jié)點,S7=1.25+j0.5,S8=0.9+j0.3,S9=1.0+j0.35。<

10、;/p><p>  表1 系統(tǒng)基本參數(shù)數(shù)據(jù)</p><p>  表2 系統(tǒng)線路原始參數(shù)(標幺值)</p><p>  表3 節(jié)點功率、電壓數(shù)據(jù)(標幺值)</p><p>  二、設計主要儀器設備和材料</p><p>  表4 設計主要設備</p><p>  三、牛頓法潮流計算的步驟及計算

11、程序框圖</p><p>  牛頓法潮流計算的求解過程大致可以分為以下幾步:</p><p> ?。?)輸入系統(tǒng)的原始數(shù)據(jù),包括系統(tǒng)的信息,各線路和變壓器所在節(jié)點的編號和等值電路中的參數(shù);各負荷所在節(jié)點的編號及其所取用的有功功率和無功功率;作為PQ節(jié)點的發(fā)電機所在節(jié)點和編號及所給定的有功功率和無功功率,PV節(jié)點的編號和所接發(fā)電機的有功功率和電壓有效值的給定值,平衡節(jié)點的編號和給定的電壓有效

12、值。</p><p> ?。?)形成節(jié)點導納矩陣。</p><p> ?。?)給定各PQ節(jié)點的電壓初值和除平衡節(jié)點外各節(jié)點電壓相位的初值并組成待求量的初始向量和。</p><p> ?。?)置迭代次數(shù)k=0。</p><p> ?。?)應用、及PV節(jié)點和平衡節(jié)點所給定的電壓,按式1:</p><p>  計算各PQ節(jié)點

13、的有功功率誤差和無功功率誤差以及各PV節(jié)點的有功功率誤差,并組成功率誤差向量和。</p><p><b> ?。?)按式2:</b></p><p>  中的收斂判據(jù)判斷最大的功率誤差是否小于容許值,如果滿足則轉到第(11)步,否則進行下一步。</p><p> ?。?)應用、按式3和式4:</p><p>  計算雅可

14、比矩陣元素,并形成式5中的雅可比矩陣。</p><p> ?。?)解修正方程式5,得出和。</p><p><b>  (9)應用式6:</b></p><p>  計算各節(jié)點電壓和相位的修正值,即新的初值。</p><p> ?。?0)置k=k+1返回第(5)步繼續(xù)進行下一輪迭代。</p><p&g

15、t;<b>  (11)按式7:</b></p><p>  計算平衡節(jié)點的發(fā)電機(或注入)有功功率和無功功率,并按式8:</p><p>  計算各PV節(jié)點發(fā)電機(或注入)的無功功率;按式9和式10:</p><p>  計算各元件兩端的功率和損耗,最后輸出計算結果。</p><p>  與上述步驟相對應的計算程序框圖

16、如下圖所示:</p><p><b>  四、程序代碼</b></p><p>  // 文件一,NEquation.h: interface for the NEquation class.//</p><p>  ////////////////////////////////////////////////////////////////

17、//////</p><p>  #if !defined(AFX_NEQUATION_H__7D6DCBC7_B370_4F2E_A720_4FB8BA7B55D9__INCLUDED_)</p><p>  #define AFX_NEQUATION_H__7D6DCBC7_B370_4F2E_A720_4FB8BA7B55D9__INCLUDED_</p><p&

18、gt;  #if _MSC_VER > 1000</p><p>  #pragma once</p><p>  #endif// _MSC_VER > 1000</p><p>  #define CHECKERROR</p><p>  class NEquation </p><p><

19、;b>  {</b></p><p><b>  public:</b></p><p>  NEquation();</p><p>  virtual ~NEquation();</p><p><b>  public:</b></p><p>  v

20、oidSetSize(int size);</p><p>  double&Data(int lhs, int rhs);</p><p>  double&Value(int lhs);</p><p>  intRun();</p><p>  protected:</p><p&g

21、t;  intm_nNumber;</p><p>  double*m_nDataBuffer;</p><p>  double*m_nValue;</p><p>  voidFactorial();</p><p>  voidForward();</p><p>  voidBack

22、ward();</p><p>  virtual doubleZEROD();</p><p>  virtual doubleZEROV();</p><p><b>  };</b></p><p>  NEquation::NEquation()</p><p><b>

23、  {</b></p><p>  m_nDataBuffer=NULL;</p><p>  m_nValue=NULL;</p><p>  m_nNumber=0;</p><p><b>  }</b></p><p>  NEquation::~NEquatio

24、n()</p><p><b>  {</b></p><p>  if(m_nDataBuffer != NULL) delete []m_nDataBuffer;</p><p>  if(m_nValue != NULL) delete []m_nValue;</p><p><b>  }</b&

25、gt;</p><p>  double NEquation::ZEROD(){return 0.0;}</p><p>  double NEquation::ZEROV(){return 0.0;}</p><p>  void NEquation::SetSize(int size)</p><p><b>  {</b

26、></p><p>  if(size < 1)return; </p><p>  if(m_nDataBuffer != NULL) delete []m_nDataBuffer;</p><p>  if(m_nValue != NULL) delete []m_nValue;</p><p>  m_nDataBuffer

27、 = new double[size * size];</p><p>  m_nValue = new double[size];</p><p>  for(int i=0; i< size*size; i++)m_nDataBuffer[i] = ZEROD();</p><p>  for(i=0; i< size; i++)m_nValue[i

28、] = ZEROV();</p><p>  m_nNumber = size;</p><p><b>  }</b></p><p>  double & NEquation::Data(int lhs, int rhs)</p><p><b>  {</b></p>&

29、lt;p>  #if defined(CHECKERROR)</p><p>  if((lhs<m_nNumber)&&(lhs>=0)&&(rhs<m_nNumber)&&(rhs>=0))</p><p><b>  #endif</b></p><p>  r

30、eturn m_nDataBuffer[lhs * m_nNumber + rhs];</p><p>  #if defined(CHECKERROR)</p><p><b>  else</b></p><p>  printf("Error");</p><p>  return m_nDat

31、aBuffer[0];</p><p><b>  #endif</b></p><p><b>  }</b></p><p>  double & NEquation::Value(int lhs)</p><p><b>  {</b></p>&l

32、t;p>  #if defined(CHECKERROR)</p><p>  if((lhs<m_nNumber)&&(lhs>=0))</p><p><b>  #endif</b></p><p>  return m_nValue[lhs];</p><p>  #if def

33、ined(CHECKERROR)</p><p><b>  else</b></p><p>  printf("Error");</p><p>  return m_nValue[0];</p><p><b>  #endif</b></p><p&g

34、t;<b>  }</b></p><p>  int NEquation::Run()</p><p><b>  {</b></p><p>  Factorial();</p><p>  Forward();</p><p>  Backward();</p&g

35、t;<p><b>  return 1;</b></p><p><b>  }</b></p><p>  double reverse( double ff){return (double)1.0/ff;};</p><p>  void NEquation::Factorial()</p>

36、<p><b>  {</b></p><p>  int i, j, k;</p><p>  for(i=0; i<m_nNumber; i++)</p><p><b>  {</b></p><p>  //規(guī)格化format line;</p><

37、p>  Data(i, i) = reverse(Data(i, i));</p><p>  for(j = i+1; j< m_nNumber; j++) Data(i, j) = Data(i, i) * Data(i, j);</p><p><b>  //消去</b></p><p>  for(j = i+1; j&

38、lt;m_nNumber; j++)</p><p><b>  {</b></p><p>  for(k=i+1; k<m_nNumber; k++)</p><p><b>  {</b></p><p>  Data(j,k) = Data(j, k) - Data(j,i) * Da

39、ta(i, k);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void NEquation::

40、Forward()</p><p><b>  {</b></p><p><b>  int i, j;</b></p><p>  for(i=0; i< m_nNumber; i++)</p><p><b>  {</b></p><p>

41、  Value(i) = Data(i, i) * Value(i);</p><p>  for(j = i+1; j < m_nNumber; j++)</p><p>  Value(j) = Value(j) - Data(j, i) * Value(i);</p><p><b>  }</b></p><p

42、><b>  }</b></p><p>  void NEquation::Backward()</p><p><b>  {</b></p><p><b>  int i, j;</b></p><p>  for(i = 1; i < m_nNumber;

43、 i++)</p><p><b>  {</b></p><p>  for(j = 1; j < i+1; j++)</p><p>  Value(m_nNumber - i -1) -= Data(m_nNumber -i-1, m_nNumber -j) * Value(m_nNumber -j); </p>&l

44、t;p><b>  }</b></p><p><b>  }</b></p><p>  #endif// !defined(AFX_NEQUATION_H__7D6DCBC7_B370_4F2E_A720_4FB8BA7B55D9__INCLUDED_)</p><p>  //////////文件二,LF.h

45、//////////////</p><p>  #ifndef _LF_LCR_</p><p>  #define _LF_LCR_</p><p>  #include "DataDesign.h"</p><p>  int MakeY( int nB, int nL, Line* sL, double** YG,

46、 double** YB );</p><p>  int CalDeltaPQ( int npv, int npq, Bus* bus, double** YG, double** YB, int* p_Jtobus, double* deltaf );</p><p>  int FormJacobian( int npv, int npq, Bus* bus, double** YG

47、, double** YB, int* p_Jtobus, double** Jac );</p><p>  #endif//_LF_LCR_</p><p>  ////////文件三,數(shù)據(jù)設計,DataDesign.h //////////</p><p>  #ifndef _DATA_LCR_INCLUDE_</p><p>  

48、#define _DATA_LCR_INCLUDE_</p><p>  struct Line</p><p><b>  {</b></p><p>  int Num,NumI,NumJ,Type;</p><p>  double R,X,B,K;</p><p><b>  }

49、;</b></p><p>  struct Bus</p><p><b>  {</b></p><p><b>  int Num ;</b></p><p>  double Volt,Phase,GenP,GenQ,LoadP,LoadQ;</p><p&g

50、t;<b>  int Type;</b></p><p><b>  };</b></p><p>  struct Shunt</p><p><b>  {</b></p><p>  int Num,NumI;</p><p>  double

51、G,B;</p><p><b>  };</b></p><p>  #endif//_DATA_LCR_INCLUDE_</p><p>  /////文件四,F(xiàn)ormF.cpp //////////</p><p>  #include <math.h></p><p>  #

52、include <fstream.h></p><p>  #include "LF.h"</p><p>  #include "DataDesign.h"</p><p>  #include <stdio.h></p><p>  //form delta p and de

53、lta q</p><p>  int CalDeltaPQ( int npv, int npq, Bus* bus, double** YG, double** YB, int* p_Jtobus, double* deltaf )</p><p><b>  {</b></p><p>  int i,j;//循環(huán)變量</p>

54、;<p>  int k;//節(jié)點修正變量</p><p>  double i1,i2;</p><p>  double dphase;</p><p>  for(i=0;i<npv+npq+npq;i++)</p><p><b>  {</b></p><p>

55、  if(i<npv+npq) //form deltaP</p><p><b>  {</b></p><p><b>  i1=0;</b></p><p>  k=p_Jtobus[i];</p><p>  for(j=0;j<npv+npq+1;j++)<

56、;/p><p><b>  {</b></p><p>  dphase=bus[k].Phase-bus[j].Phase;</p><p>  i1+=bus[j].Volt*(YG[k][j]*cos(dphase)+YB[k][j]*sin(dphase));</p><p><b>  }</b&g

57、t;</p><p>  deltaf[i]=bus[k].GenP-bus[k].LoadP-bus[k].Volt*i1;</p><p><b>  }</b></p><p><b>  else</b></p><p>  { //form delta

58、Q</p><p><b>  i2=0;</b></p><p>  k=p_Jtobus[i];</p><p>  for(j=0;j<npv+npq+1;j++)</p><p><b>  {</b></p><p>  dphase=bus[k].Phase

59、-bus[j].Phase;</p><p>  i2+=bus[j].Volt*(YG[k][j]*sin(dphase)-YB[k][j]*cos(dphase));</p><p><b>  }</b></p><p>  deltaf[i]=bus[k].GenQ-bus[k].LoadQ-bus[k].Volt*i2;</p&

60、gt;<p><b>  }</b></p><p><b>  }</b></p><p>  for(i=0;i<npv+npq*2;i++)</p><p>  deltaf[i]*=(-1);</p><p><b>  return 1;</b>&

61、lt;/p><p><b>  }</b></p><p>  /////文件五,計算雅可比矩陣,F(xiàn)ormJ.cpp ///////////</p><p>  #include <math.h></p><p>  #include <fstream.h></p><p> 

62、 #include "LF.h"</p><p>  #include "DataDesign.h"</p><p>  #include <malloc.h></p><p>  #include <string.h></p><p>  //////////////生成雅可比

63、矩陣///////////////////</p><p>  int FormJacobian( int npv, int npq, Bus* bus, double** YG, double** YB, int* p_Jtobus, double** Jac )</p><p><b>  {</b></p><p><b>  

64、int i,j;</b></p><p>  int np = npv+npq;</p><p>  double dphase;</p><p>  ////////生成 H 矩陣////////////</p><p>  double** H;</p><p>  H = (double**)new

65、char[(np)*sizeof(void*)];</p><p>  for( i=0;i<np;i++ )</p><p><b>  {</b></p><p>  H[i]=new double[np];</p><p>  memset(H[i],0,sizeof(double)*(np) );//清零

66、</p><p><b>  }</b></p><p>  for(i=0;i<np;i++)</p><p><b>  {</b></p><p>  double temp=0;</p><p>  for(j=0;j<np;j++)</p>

67、<p><b>  {</b></p><p><b>  if(i!=j)</b></p><p><b>  {</b></p><p>  dphase=bus[i+1].Phase-bus[j+1].Phase;</p><p>  H[i][j]=bus[

68、i+1].Volt*bus[j+1].Volt*(YG[i+1][j+1]*sin(dphase)-YB[i+1][j+1]*cos(dphase));</p><p>  temp+=H[i][j];</p><p><b>  }</b></p><p><b>  }</b></p><p>

69、  double dphase1=bus[i].Phase-bus[0].Phase;</p><p>  H[i][i]=temp*(-1)-bus[i+1].Volt*bus[0].Volt*(YG[i+1][0]*sin(dphase1)-YB[i+1][0]*cos(dphase));</p><p><b>  }</b></p><p&

70、gt;  ofstream fout1("out.txt",ios::app);</p><p>  /////////生成 L 矩陣////////////</p><p>  double** L;</p><p>  L = (double**)new char[(np)*sizeof(void*)];</p><p&g

71、t;  for( i=0;i<np;i++ )</p><p><b>  {</b></p><p>  L[i]=new double[np];</p><p>  memset(L[i],0,sizeof(double)*(np) );</p><p><b>  }</b></p

72、><p>  for(i=npv;i<np;i++)</p><p><b>  {</b></p><p>  for(j=npv;j<np;j++)</p><p><b>  {</b></p><p><b>  if(i!=j)</b>

73、</p><p><b>  {</b></p><p>  L[i][j]=H[i][j];</p><p><b>  }</b></p><p><b>  }</b></p><p>  L[i][i]=-1*H[i][i]-2*bus[i+1]

74、.Volt*bus[i+1].Volt*YB[i+1][i+1];</p><p><b>  }</b></p><p>  /////////////生成 J 矩陣///////////////////</p><p>  double** J;</p><p>  J = (double**)new char[(n

75、p)*sizeof(void*)];</p><p>  for( i=0;i<np;i++ )</p><p><b>  {</b></p><p>  J[i]=new double[np];</p><p>  memset(J[i],0,sizeof(double)*(np) );</p>

76、<p><b>  }</b></p><p>  for(i=npv;i<np;i++)</p><p><b>  {</b></p><p>  double temp=0;</p><p>  for(j=0;j<np+1;j++)</p><p&g

77、t;<b>  {</b></p><p><b>  if(i!=j)</b></p><p><b>  {</b></p><p>  dphase=bus[i+1].Phase-bus[j+1].Phase;</p><p>  J[i][j]=-1*bus[i+1].

78、Volt*bus[j+1].Volt*(YG[i+1][j+1]*cos(dphase)+YB[i+1][j+1]*sin(dphase));</p><p>  temp+=-1*J[i][j];</p><p><b>  }</b></p><p><b>  }</b></p><p>  

79、J[i][i]=temp;</p><p><b>  }</b></p><p>  /////////////////生成 N 矩陣 /////////////////</p><p>  double** N;</p><p>  N = (double**)new char[(np)*sizeof(void*)]

80、;</p><p>  for( i=0;i<np;i++ )</p><p><b>  {</b></p><p>  N[i]=new double[np];</p><p>  memset(N[i],0,sizeof(double)*(np) );</p><p><b>

81、;  }</b></p><p>  for(i=0;i<np;i++)</p><p><b>  {</b></p><p>  for(j=npv;j<np;j++)</p><p><b>  {</b></p><p><b>  

82、if(i!=j)</b></p><p><b>  {</b></p><p>  N[i][j]=-1*J[i][j];</p><p><b>  }</b></p><p><b>  }</b></p><p>  N[i][i]=

83、J[i][i]+2*bus[i+1].Volt*bus[i+1].Volt*YG[i+1][i+1];</p><p><b>  }</b></p><p>  for(i=0;i<np;i++)</p><p>  for(j=0;j<np;j++)</p><p>  Jac[i][j]=H[i][j]

84、;</p><p>  for(i=np;i<np+npq;i++)</p><p>  for(j=0;j<np;j++)</p><p>  Jac[i][j]=J[i-np+2][j];</p><p>  for(i=0;i<np;i++)</p><p>  for(j=np;j<np

85、+npq;j++)</p><p>  Jac[i][j]=N[i][j-np+2];</p><p>  for(i=np;i<np+npq;i++)</p><p>  for(j=np;j<np+npq;j++)</p><p>  Jac[i][j]=L[i-np+2][j-np+2];</p><p&

86、gt;  //////////////////輸出雅可比矩陣///////////////////////</p><p>  ofstream fout("out.txt",ios::app);</p><p>  static int dd=0; dd++;</p><p>  fout << "----------

87、----"<<"第"<<dd<<"次迭代后的"<<"雅可比矩陣--------------------" << endl;</p><p>  for(i=0; i<np+npq; i++)</p><p><b>  {</b>&l

88、t;/p><p>  for(j=0; j<np+npq; j++ )</p><p>  fout << Jac[i][j] << "\t";</p><p>  fout << endl;</p><p><b>  }</b></p><

89、p>  fout.close();</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  /////////////文件六,節(jié)點導納矩陣的計算,MakeY.cpp /////////////</p><p>  #include &

90、lt;math.h></p><p>  #include <fstream.h></p><p>  #include "LF.h"</p><p>  #include <stdio.h></p><p>  #include<iomanip.h></p><

91、;p>  int MakeY( int nB, int nL, Line* sL, double** YG, double** YB )</p><p><b>  {</b></p><p><b>  int i,j;</b></p><p>  for(i=0;i<nB;i++)</p>&

92、lt;p>  for(j=0;j<nB;j++)</p><p><b>  {</b></p><p>  YG[i][j]=0.0;</p><p>  YB[i][j]=0.0;</p><p><b>  };</b></p><p>  for(i=0;

93、i<nL;i++)</p><p><b>  {</b></p><p>  int start,end;</p><p>  double r,x,b,k,g,b1;</p><p>  start=sL[i].NumI;</p><p>  end=sL[i].NumJ;</p&

94、gt;<p>  r=sL[i].R;</p><p>  x=sL[i].X;</p><p>  b=sL[i].B;</p><p>  k=sL[i].K;</p><p>  g=r/(r*r+x*x);</p><p>  b1=-x/(r*r+x*x);</p><p&g

95、t;  if(sL[i].Type==2)//線路中含有變壓器</p><p><b>  {</b></p><p>  YG[start][end]=-1*g/k;</p><p>  YG[end][start]=-1*g/k;</p><p>  YB[start][end]=-1*b1/k;</p>

96、;<p>  YB[end][start]=-1*b1/k;</p><p>  YG[start][start]+=g/k/k;</p><p>  YG[end][end]+=g;</p><p>  YB[start][start]+=0.5*b+b1/k/k;</p><p>  YB[end][end]+=0.5*b+

97、b1;</p><p><b>  continue;</b></p><p><b>  }</b></p><p>  if(sL[i].Type==1)//線路中不含變壓器</p><p><b>  {</b></p><p>  YG[sta

98、rt][end]=-1*g;</p><p>  YG[end][start]=-1*g;</p><p>  YB[start][end]=-1*b1;</p><p>  YB[end][start]=-1*b1;</p><p>  YG[start][start]+=g;</p><p>  YG[end][e

99、nd]+=g;</p><p>  YB[start][start]+=0.5*b+b1;</p><p>  YB[end][end]+=0.5*b+b1;</p><p><b>  continue;</b></p><p><b>  }</b></p><p>  

100、printf("Error Input !\n");</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  /////////////輸出節(jié)點導納矩陣/////////////////</p><p>  ofstre

101、am fout("out.txt");</p><p>  fout << "--------------節(jié)點導納矩陣--------------------" << endl;</p><p>  for(i=0;i<nB;i++)</p><p><b>  {</b>&

102、lt;/p><p>  for(j=0;j<nB;j++)</p><p>  fout <<setw(2)<< YG[i][j] << "+j" << YB[i][j] <<" ";</p><p>  fout << endl;<

103、/p><p><b>  }</b></p><p>  fout.close();</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  //////////////文件七,基于牛頓法的潮流計算

104、程序,LF.cpp ///////////////</p><p>  #include <stdio.h></p><p>  #include <malloc.h></p><p>  #include <string.h></p><p>  #include <math.h></p

105、><p>  #include <fstream.h></p><p>  #include "NEquation.h"</p><p>  #include "LF.h"</p><p>  int main( int argc, char* argv[] )</p><p

106、><b>  {</b></p><p>  ///////////////////讀入數(shù)據(jù)///////////////////////</p><p>  int nB, nL, nSH;</p><p>  char filename[64];</p><p>  printf("請輸入原始數(shù)據(jù)的文

107、件名:(0 for default value)\n");</p><p>  scanf("%s", filename);</p><p>  if( strcmp(filename,"0")==0 )</p><p><b>  {</b></p><p>  str

108、cpy( filename, "in.txt" );</p><p><b>  }</b></p><p>  ifstream fin;</p><p>  fin.open(filename);</p><p>  char buffer[128];</p><p>  

109、fin.getline(buffer,128);</p><p>  fin >> nB >> nL >> nSH;//讀入系統(tǒng)的節(jié)點數(shù)、線路數(shù)和分支數(shù)</p><p>  double** YG, **YB;</p><p>  YG = (double**)new char[(nB)*sizeof(void*)];<

110、/p><p>  for( int i=0;i<nB;i++ )</p><p><b>  {</b></p><p>  YG[i]=new double[nB];</p><p>  memset(YG[i],0,sizeof(double)*(nB) );</p><p><b&g

111、t;  }</b></p><p>  YB = (double**)new char[(nB)*sizeof(void*)];</p><p>  for( i=0;i<nB;i++ )</p><p><b>  {</b></p><p>  YB[i]=new double[nB];</p

112、><p>  memset(YB[i],0,sizeof(double)*(nB) );</p><p><b>  }</b></p><p>  Line* line;</p><p>  line = new Line[nL];</p><p><b>  Bus* bus;</

113、b></p><p>  bus = new Bus[nB];</p><p>  Shunt* shunt;</p><p>  shunt = new Shunt[nSH];</p><p>  fin.getline(buffer,128);</p><p>  fin.getline(buffer,128

114、);</p><p>  int npv=0, npq=0;</p><p>  for( i=0; i<nB; i++ )</p><p><b>  {</b></p><p>  ///讀入系統(tǒng)的節(jié)點號、節(jié)點類型、節(jié)點電壓、相角、節(jié)點負載有功功率、節(jié)點負載無功率、節(jié)點輸入有功功率、節(jié)點輸入無功功率///<

115、;/p><p>  fin >> bus[i].Num >> bus[i].Type >> bus[i].Volt >> bus[i].Phase >> bus[i].LoadP >> bus[i].LoadQ >> bus[i].GenP >> bus[i].GenQ;</p><p>  bus

116、[i].Phase =bus[i].Phase*3.141592/180.0;</p><p>  bus[i].Num -=1;</p><p>  if( bus[i].Type==2)</p><p><b>  npv++;</b></p><p>  if( bus[i].Type==1)</p>

117、<p><b>  npq++;</b></p><p><b>  };</b></p><p>  fin.getline(buffer,128);</p><p>  fin.getline(buffer,128);</p><p>  for( i=0; i<nL; i++

118、 )</p><p><b>  {</b></p><p>  /////////////讀入系統(tǒng)線路標號、線路起始節(jié)點、線路終止節(jié)點、線路類型、線路電阻、線路電抗、線路對地導納///////////////</p><p>  fin >> line[i].Num >> line[i].NumI>> li

119、ne[i].NumJ >> line[i].Type >> line[i].R >> line[i].X >> line[i].B>> line[i].K;</p><p>  line[i].NumI--;</p><p>  line[i].NumJ--;</p><p><b>  }<

120、;/b></p><p>  fin.getline(buffer,128);</p><p>  fin.getline(buffer,128);</p><p>  for( i=0; i<nSH; i++ )</p><p><b>  {</b></p><p><b&g

121、t;  }</b></p><p>  fin.close();</p><p>  ////////////組成節(jié)點導納矩陣////////////////</p><p>  MakeY( nB, nL, line, YG, YB );</p><p>  /////////////////內存分配//////////////

122、/////</p><p>  double* deltaf = new double[npv+npq*2];</p><p>  int* p_Jtobus = new int[npv+npq+npq];</p><p><b>  int nJ=0;</b></p><p>  for( i=0; i<npv+

123、npq+1; i++ )</p><p><b>  {</b></p><p>  if( bus[i].Type==2 )//PV 節(jié)點</p><p><b>  {</b></p><p>  p_Jtobus[nJ]=i;</p><p><b>  n

124、J++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  for( i=0; i<npv+npq+1; i++ )</p><p><b>  {</b></p><p>  

125、if( bus[i].Type==1 )//PQ 節(jié)點</p><p><b>  {</b></p><p>  p_Jtobus[nJ]=i;</p><p><b>  nJ++;</b></p><p><b>  }</b></p><p>

126、<b>  }</b></p><p>  for( i=0; i<npv+npq+1; i++ )</p><p><b>  {</b></p><p>  if( bus[i].Type==1 )//PQ 節(jié)點</p><p><b>  {</b></p&

127、gt;<p>  p_Jtobus[nJ]=i;</p><p><b>  nJ++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  double** Jac;</p><p>

128、;  Jac = (double**)new char[(nJ)*sizeof(void*)];</p><p>  for( i=0;i<nJ;i++ )</p><p><b>  {</b></p><p>  Jac[i]=new double[nJ];</p><p>  memset(Jac[i],0,

129、sizeof(double)*(nJ) );</p><p><b>  }</b></p><p>  double* deltaX;</p><p>  deltaX = new double[nJ];</p><p>  double mdelta=0;</p><p><b> 

130、 int it=0;</b></p><p><b>  do</b></p><p><b>  {</b></p><p><b>  it++;</b></p><p>  mdelta = 0.0;</p><p>  //form

131、delta p and delta q</p><p>  CalDeltaPQ( npv, npq, bus, YG, YB, p_Jtobus, deltaf );</p><p>  /////////////形成雅可比矩陣////////////////</p><p>  FormJacobian( npv, npq, bus, YG, YB, p_Jto

132、bus, Jac );</p><p>  //////////////計算負載潮流/////////////////</p><p>  NEquation equ;</p><p>  equ.SetSize(nJ);</p><p>  for( i=0; i<nJ; i++ )</p><p><b

133、>  {</b></p><p>  equ.Value(i) = deltaf[i];</p><p>  for( int j=0; j<nJ; j++ )</p><p>  equ.Data(i,j) = Jac[i][j];</p><p><b>  }</b></p>

134、<p>  equ.Run();</p><p>  /////////////修正電壓幅值和電壓相角///////////</p><p>  for( i=0; i<nJ; i++ )</p><p><b>  {</b></p><p>  deltaX[i] = equ.Value(i);<

135、;/p><p>  int busi = p_Jtobus[i];</p><p>  if( i<npv+npq )</p><p>  bus[busi].Phase -= equ.Value(i);</p><p><b>  else</b></p><p>  bus[busi].Vo

136、lt -= equ.Value(i)*bus[busi].Volt;</p><p>  if( fabs(equ.Value(i))>fabs(mdelta) )</p><p>  mdelta = equ.Value(i);</p><p><b>  }</b></p><p>  }while( fabs

137、(mdelta)>1e-5 );//精度控制</p><p>  //////////////////系統(tǒng)潮流計算///////////////// </p><p>  /////////////////各線路潮流計算////////////////</p><p>  double* p_Pij, *p_Qij, *p_Pji, *p_Qji;<

138、/p><p>  p_Pij = new double[nL];</p><p>  p_Qij = new double[nL];</p><p>  p_Pji = new double[nL];</p><p>  p_Qji = new double[nL];</p><p>  for( i=0; i<nL

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論