1.3MATLAB概述
目前,電子計算機已廣泛應用於電力系統分析計算,潮流計算是其基礎應用軟件之壹。有許多潮流計算方法。潮流計算方法有五個要求:(1)計算速度快;(2)更少存儲器需求;(3)計算結果具有良好的可靠性和可信度;(4)適應性好,即能處理變比的調整,系統組件的不同描述,與其他程序的配合能力強;(5)簡單。
MATLAB是壹種交互式面向對象的編程語言,在工業界和學術界應用廣泛,主要用於矩陣運算,在數值分析、自動控制仿真、數字信號處理、動態分析、繪圖等方面也有強大的功能。
MATLAB編程語言具有完整的結構和優秀的可移植性,其基本數據元素是不需要定義的數組。它可以有效地解決工業計算問題,尤其是矩陣和向量的計算。MATLAB比C語言和FORTRAN語言更容易掌握。通過M語言,可以用類似數學公式的方式編寫算法,大大降低了程序所需的難度,節省了時間,使主要精力可以集中在算法的思路上而不是編程上。
此外,MATLAB提供了壹個特殊的工具:工具箱,主要包括:信號處理、控制系統、神經網絡、模糊邏輯、小波、仿真等。不同領域、不同層次的用戶通過對相應工具的學習和應用,可以方便地進行計算、分析和設計工作。
在MATLAB設計中,原始數據的填充格式是壹個關鍵環節,直接關系到程序使用的方便性和靈活性。
原始數據輸入格式的設計應主要從使用的角度出發,原則簡單明了,便於修改。
2.1電力系統的基本概念
2.1.1動力系統
(1)電力系統:發電機將機械能轉化為電能,通過變壓器、電力線輸送,分配給用戶,在用戶處通過電機、電爐、電燈轉化為機械能、熱能、光能。這些發電機、變壓器、轉換器、電力線和各種產生、轉換、輸送、分配和消耗電能的電氣設備連接在壹起,形成壹個統壹的整體,稱為電力系統。
(2)電網:電力系統中除發電機和電氣設備以外的部分。
(3)動力系統:動力系統和“動力部分”的總和。
“動力部分”:包括火力發電廠的鍋爐、汽輪機、熱網和電氣設備,水電廠的水庫和汽輪機,核電廠的反應堆等。
2.1.2電力系統負荷及負荷曲線
(1)電力系統負荷:系統中數千萬個電氣設備所消耗的功率之和,包括異步電動機、同步電動機、電加熱器、整流設備、照明設備等類別。
(2)電力系統供電負荷:綜合電力負荷加上電網中的電能損耗。
(3)電力系統發電負荷:供電負荷加電廠自身用電量。
(4)各用電設備的有功功率和無功功率隨受電電壓和系統頻率的變化而變化,其變化規律不同。綜合用電負荷隨電壓和頻率的變化規律是各用電負荷變化規律的綜合。
(5)負荷曲線:在壹定時間內,負荷隨時間變化的規律。
(6)按負荷類型可分為有功負荷和無功負荷;按時間長短,可分為日負荷曲線和年負荷曲線;按計量位置可分為單個用戶、電力線路、變電站、電廠乃至整個系統的負荷曲線。通過結合上述三種分類,確定特定的負荷曲線。不同行業的有功功率日負荷曲線差異很大。負荷曲線對電力系統運行具有重要意義,是安排日發電計劃、確定電廠發電任務和確定系統運行方式的重要依據。
2.2電力系統的基本組成
2.2.1發電機
在現代電力工業中,同步發電機幾乎全部用於火力發電、水力發電或核能發電。電機的電樞安裝在定子上,勵磁繞組作為旋轉磁極安裝在轉子上。同步發電機的轉速(rpm)與系統頻率f(HZ)有嚴格的關系,即其中n=60f/p為電機的極對數。
根據轉子結構類型的不同,可分為隱極發電機和凸極發電機。前者無外露磁極,後者有。
轉子的勵磁方式包括DC勵磁系統和可控矽勵磁系統。後者利用同軸交流勵磁機或同步發電機自身產生的交流電,經整流後供給轉子。DC勵磁機存在換向問題,因此其生產能力有限。因此,可控矽勵磁系統可用於大容量發電機。
電力變壓器
電力變壓器是電力系統中廣泛使用的升壓和降壓裝置。據統計,電力系統中變壓器的總裝機容量約為發電機的6-8倍。根據用途,電力變壓器可分為升壓變壓器、降壓變壓器、配電變壓器和接線變壓器。根據相數,變壓器可分為單相和三相兩種。根據每相的線圈,有兩個繞組和三個繞組。按照線圈耦合的方式,可分為普通變壓器和自耦變壓器。
電源線
(1)架空線:由導線、避雷針、桿塔、絕緣子和金具組成。
(2)電纜線路:由導體、絕緣層和護套組成。
2.2.4無功補償設備
主要無功補償設備包括同步相機、電力電容器和靜止補償器。
2.3電力系統元件的數學模型
2.3.1電力線等效電路
在電力系統分析中,壹般只考慮電力線兩側端口的電壓和電流,將電力線作為無源二端口網絡處理。
傳輸線的二端口網絡方程;
Z=B=*L*
變壓器的等效電路
(1)雙繞組變壓器的等效電路
(2)三繞組變壓器的等效電路
2.3.3同步發電機的數學模型
2.3.4電力系統負荷
2.3.5多電平電壓電力系統的等效電路
2.4電力系統穩態運行分析
2.4.1電源線路電壓損失和功率損失
2.4.2變壓器中的功率損失和電壓損失
2.4.3輻射狀網絡的分析與計算
輻射狀電網的特點是每條線路都有明確的起點和終點。輻射狀電網的分析計算是利用已知的負荷和節點電壓,計算未知的節點電壓、線路功率分布、功率損耗和初始輸出功率。
根據已知條件的不同,輻射狀電網的分析計算可分為兩類。
1已知終端功率和電壓:即從終端開始壹步步計算,直到得到每壹個需要的量。
2已知終端功率和終端電壓:終端可以理解為負荷點,起始終端為電源點或電壓中心點。采用叠代法。
(1)假設終端電壓為線路額定電壓,用第壹種方法得到初始終端功率和全網功率分布。
(2)利用得到的線路終端功率和已知的線路終端電壓,計算線路終端電壓和全網功率分布。
(3)用第(2)步得到的線路末端電壓計算線路始端功率和全網功率分布。如果每條線路的計算功率與之前相同的計算結果之差小於允許值,則可以認為該步驟得到的線路電壓和全網功率分布就是最終的計算結果。否則,返回第二步重新計算。
2.4.4復雜電力系統潮流計算
電力系統潮流計算是從計算復雜電力系統在正常和故障情況下的穩態運行狀態開始的。潮流計算的目標是獲得電力系統在給定運行方式下的節點電壓和功率分布,從而校核系統各元件是否過載,各點電壓是否滿足要求,功率分配和分配是否合理,功率損耗如何。現有電力系統的運行和擴建、新電力系統的規劃和設計以及電力系統的靜態和暫態穩定分析都是以潮流計算為基礎的。因此,潮流計算是電力系統分析計算中最基本的計算之壹。
電力系統穩定性研究、安全評估或最優潮流等潮流計算結果的應用,也直接影響著潮流計算的模型和方法。
2.5電力系統潮流計算機算法
2.5.1電力系統潮流計算機算法概述
2.5.1.1導納矩陣的形成
2.5.1.2節點類型
(1)PV節點:列的有功功率p為給定值,電壓也保持在給定值。
(2)PQ節點:如有功功率、無功功率給定。
(3)平衡節點:用於平衡整個電網的功率。選擇容量足夠大的發電機來平衡整個電網的功率。
平衡節點的電壓幅值和相位給定,通常以其相角為基準,即其電壓相角取0。獨立電力網絡只有壹個平衡點。
2.5.1.3高斯叠代法
牛頓-拉夫遜法
1原則
2.5.2.2基本步驟
基本步驟:
(1)形成節點導納矩陣。
(2)將每個節點的電壓設置為初始值u,
(3)將節點初值代入相關表達式,求出修正方程的常數項向量。
(4)將節點電壓的初始值代入解中,求雅可比矩陣元素。
(5)求解校正方程,求出校正向量。
(6)找到節點電壓的新值
(7)檢查是否收斂。如果沒有,從步驟3重新開始窄叠代,用每個節點電壓的新值作為初始值。否則,繼續下壹步。
(8)計算光伏節點的支路功率分布、無功功率和平衡節點的後進入功率。
2.5.2.3註意事項
2.5.2.4計劃流程圖
2.6軟件設計
2.6.1方案選擇及說明
方案解決方案
2.6.3 MATLAB編程描述和組件描述
程序
# include & ltstdio.h & gt
結構電源節點
{
浮點圓周率;
浮氣;
int I;
浮動六;
};
struct power node WG[20];
struct power node wl[20];
結構線數據
{
int I;
int j;
浮動r;
浮動x;
浮動y;/*包括變壓比*/
浮動k;/*只用於分析變壓器,變比還是用Y */
};
struct line data ZL[20];
結構行數據T3;/*臨時數組*/
靜態雙y[][3];/* matrix form中的應用*/
int t = 0;
int t2,ti,TJ;/*臨時計數單元*/
浮動溫度;
浮動tx,tr,YK;/*中間工作單元(應用於matrixform) */
雙GIJ,BIJ;/*中間工作單元(應用於matrixform) */
int N;/*節點總數*/
int zls
int Q,V,PVS,PVS
int GS
int LS
float vo
浮動Eps
靜態雙精度GII[]={0},BII[]={0},YDS[]={0},YDZ[]={0},B[]= { 0 };/*添加數組*/
/*形成因子表時定義的數據*/
結構物理數據
{
浮動vis
int I;
};
靜態結構pvdata PV[]= { 0 };
數據輸入()
{
clr SCR();
printf("程序運行");
printf(" n ");
printf("請將聚合輸入到系統註釋");/*節點總數*/
scanf("%d ",& ampn);
printf(" n ");
printf(" PQ註共?");/*節點總數*/
scanf("%d ",& ampq);
PVS =(N-Q)-1;
printf(" n ");
printf(" them input the aggregate to system power line ");
scanf("%d ",& ampzls);/*輸電線路數量和變壓器總數*/
printf(" n ");
printf("所有電動機節點:");/*生成器節點總數*/
scanf("%d ",& ampGS);
printf(" n ");
printf("載入所有節點:");/*負載節點總數*/
scanf("%d ",& ampLS);
printf(" n ");
printf(“平均電壓”);/*平均電壓*/
scanf("%f ",VO);
printf(" n ");
printf(" n ");
printf("請輸入日期消息");
printf("遵循喜歡的格式:I,j,r,x,y,kn ");
做{
t++;
scanf("%d,%d,%f,%f ",& ampzl[t]。我& ampzl[t]。j & amp;zl[t]。r & amp;zl[t]。x & amp;zl[t]。y & amp;zl[t]。k);
printf("處理....n”);
if(zl[t])。我& gtzl[t]。j)
{
temp=zl[t]。我;
zl[t]。i=zl[t]。j;
zl[t]。j =溫度;
/* if(zl[t])。k!= 1) */*要不要考慮歸約問題*/
}
printf("妳輸入的數據是:n ");
printf("%d,%d,%f,%f ",zl[t]。我,zl[t]。j,zl[t]。r,zl[t]。x,zl[t]。y,zl[t]。k);
}while(zl[t].我!= 0 & amp& ampzl[t]。j = = 0);
for(T2 = t;t & gt0;T-)/*冒泡排序*/
{
for(;t2 & gt0;t2 -)
{
if(zl[t2]。我& ltzl[t2-1]。我)
{
t3.i=zl[t2]。我;t3.j=zl[t2]。j;t3.r=zl[t2]。r;t3.x=zl[t2]。x;t3.y=zl[t2]。y;t3.k=zl[t2]。k;
zl[t2]。i=zl[t2-1]。我;zl[t2]。j=zl[t2-1]。j;zl[t2]。r=zl[t2-1]。r;zl[t2]。x=zl[t2-1]。x;zl[t2]。y=zl[t2-1]。y;zl[t2]。k=zl[t2-1]。k;
zl[t2-1]。i = t3.izl[t2-1]。j = t3.jzl[t2-1]。r = t3.rzl[t2-1]。x = t3.xzl[t2-1]。y = t3.yzl[t2-1]。k = t3.k
}
else if(zl[t2]。i==zl[t2-1]。我)
{if(zl[t2])。j & ltzl[t2-1]。j)
{
t3.i=zl[t2]。我;t3.j=zl[t2]。j;t3.r=zl[t2]。r;t3.x=zl[t2]。x;t3.y=zl[t2]。y;t3.k=zl[t2]。k;
zl[t2]。i=zl[t2-1]。我;zl[t2]。j=zl[t2-1]。j;zl[t2]。r=zl[t2-1]。r;zl[t2]。x=zl[t2-1]。x;zl[t2]。y=zl[t2-1]。y;zl[t2]。k=zl[t2-1]。k;
zl[t2-1]。i = t3.izl[t2-1]。j = t3.jzl[t2-1]。r = t3.rzl[t2-1]。x = t3.xzl[t2-1]。y = t3.yzl[t2-1]。k = t3.k
}
}
}
}
printf(" n ");
t = 0;
printf("請輸入wg~!n”);
做
{
scanf("%f,%f,%d,%f ",& ampwg[t]。圓周率和。wg[t]。齊& ampwg[t]。我& ampwg[t]。VI);
t++;
}while(t!= GS);ti = 0;
for(t = 0;t & ltGS;t++){if(wg[t]。vi & lto){pv[ti]。vis =實驗室(wg[t]。VI);pv[ti]。i=wg[t]。我;ti++;}}
T2 = 0;
printf("請輸入WL~!n”);
做
{
scanf("%f,%f,%d,%f ",& ampwl[t2]。圓周率和。wl[t2]。齊& ampwl[t2]。我& ampwl[t2]。VI);
t2++;
}while(t2!= LS);
for(t = 0;t & ltLS;t++){if(wl[t]。vi & lto){pv[ti]。vis=labs(wl[t]。VI);pv[ti]。i=wl[t]。我;ti++;}}
}
矩陣形式()
{
for(t = 1;t & ltn;t++)
{
GII[t]= 0;
BII[t]= 0;
YDS[t]= 0;
}
for(T2 = 1;t & ltzlst2++)
{
ti=labs(zl[t2]。I);
tj=labs(zl[t2]。j);
tr=zl[t2]。r;
tx=zl[t2]。x;
temp=ldexp(tr,1)+ldexp(tx,1);
GIJ = tr/temp;BIJ = tx/temp;
y[T2][1]=-GIJ;
y[T2][2]=-BIJ;
y[T2][3]= TJ;
GII[ti]= GII[ti]+GIJ;BII[ti]= BII[ti]+BIJ;
GII[TJ]= GII[TJ]+GIJ;BII[TJ]= BII[TJ]+BIJ;
YDS[ti]= YDS[ti]+1;
}
YDZ[1]= 1;
for(t = 1;t & ltn-1;t++)
{
YDZ[t+1]= YDZ[t]+YDS[t];
}/*矩陣形成的第壹部分完成*/
/*矩陣形成從第二部分開始*/
for(T2 = 1;t & ltzlst2++)
{/*.k僅用於變壓器校準,變比仍為y */
ti=zl[t2]。我;tj=zl[t2]。j;YK=zl[t2]。y;
if(ti & lt;0 | | tj & lt0)
{ if(ti & lt;0)
ti =實驗室(ti);
其他
ti =實驗室(TJ);
GIJ = y[T2][1];BIJ = y[T2][2];
GII[T2]= GII[T2]+(1-1/YK/YK)* GIJ;
BII[T2]= BII[T2]+(1-1/YK/YK)* BIJ;
y[T2][1]= GIJ/YK;
y[T2][2]= BIJ/YK;
}
其他
GIJ = 0;
BIJ = YK/2;
SY(tr);/*這個東西需要調用來實現節點的累積自引導*/
SY(TJ);/*SY的過程是將對應的自導的實部和虛部累加到壹個節點*/
}
}
int sign,ld,k2,x,im,ai;/*k2控制臺開關,負載靜態特性開關*/
靜態浮點FD[]= { 0 };
無符號AF[1];
static int u[]= { 0 };/*?如何實現?從那裏?*/
除數形式()
{
/*暫時不知道LD PVD的角色...善良*/
PVD=pv[0]。我;
ld=wl[0]。我;
t = 0;
做{
t2++;
if(sign = = 1 & amp;& ampt2==PVD)
{ t = t+1;pvd=pv[t]。我;FD[T2]= 0;di[T2]= 0;
if(k2 = = 0 & amp;& ampt2==ld)
{ T2 = T2+1;ld=wl[t2]。我;}
}繼續;
其他
b[T2]= BII[T2];
if(k2 = = 0 & amp;& ampsing = = 1 & amp;& ampt2==ld)
{
B[t2]=B[t2]+AF[1]*wl[t2]。qi/wl[t2]。vi/wl[t2]。六;T2 = T2+1;ld=wl[t2]。我;
}
for(temp = YDZ[T2];temp & ltYDZ[T2+1]-1;temp++)
{
TJ = Y[temp][3];b[TJ]= Y[temp][2];
}
if(sign=1)
{ for(temp = 1;temp & ltPVStemp++)
TJ = PV[temp][2];
b[TJ]= 0;
}
x = 2;im = 1;
do { im++;
如果(im & gtt2-1)
打破;
其他
temp = 1;
for(;臨時工!& gtFD[im];){if(u[x+1]!= 1){ temp = temp+1;x = x+2;}else ai=u[x]/} /*u[]不完整*/
繼續;
}
}while(t2!= N-1);
}
數據輸出()
{
clr SCR();
printf("註1 voltagen ");
printf("(. 639696730300784)+j(1.832939)= 1.94136001255537∠70.7609880529659n ");
printf(" 87u & amp;嗯[1]u?孢子u
-
C & amp8u bun n ");
}
主()
{
datain();/*數據輸入和處理*/
matrix form();/*矩陣的形成*/
/* divisor form();*//*因子表的形成*/
matrix solve();/*矩陣線性方程的解*/
/* node power();*//*叠代過程中節點功率的計算*/
/*叠代();*//*叠代*/
data out();/*數據輸出和支路功率計算*/