Fourier

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 5

begin

var
NPto,i,j,k,m:integer;
dx:double;
wt:double;
y:double;
teta,coseno,seno:extended;
An,Bn: double;
DHT:array[1..6] of double;
tensao,corrente,fase:double;
achou:boolean;
desiq,beta,desb1,desb2:double;
Passo,tempo,val,soma:double;
aux1,aux2,base:double;
begin
Npto:=128;
// Npto:=STG_Importa.RowCount-11;
dx:=1/(60*Npto);
y:=2*PI*60*dx;
wt:=0;
if(escolha=0) then //Quando o arquivo est na linha do tempo (importando arquivo
temporal)
begin
//Realizando a DFT das tenses e corrente
for k:=1 to 6 do
begin
RMS[k]:=0;
for j:=1 to 25 do
begin
An:=0;
Bn:=0;
Cn[k,j]:=0;
Ang[k,j]:=0;
for i:=11 to 138 do
begin
Math.SinCos(j*wt,seno,coseno);
if (STG_Importa.cells[k,i]<>'')then
begin
An:= An+StrToFloat(STG_Importa.cells[k,i])*seno*y;
Bn:= Bn+strtofloat(STG_Importa.cells[k,i])*coseno*y;
end ;
wt:=wt+y
end;
Cn[k,j]:=system.sqrt(An*An+Bn*Bn)/PI;
if(An>0) then
Ang[k,j]:=arctan(bn/an)
else
Ang[k,j]:=arctan(bn/an)+PI;
RMS[k]:=RMS[k]+Cn[k,j]*Cn[k,j];
end;
RMS[k]:=system.sqrt(RMS[k]/2);
end;
//Pegando a porcentagem das harmonicas
for k:=1 to 6 do
begin
for j:=2 to 25 do
CnP[k,j]:=100*Cn[k,j]/Cn[k,1];

CnP[k,1]:=100;
end;
end
else if escolha=1 then//quando o arquivo representa as harmonicas das tensoes
e correntes
begin
for j:=1 to 6 do
begin
RMS[j]:=0;
for i:=3 to 27 do
begin
CnP[j,i-2]:=StrToFloat(Stg_importa.cells[i,60+2*j]);
Cn[j,i-2]:=StrToFloat(Stg_importa.cells[i,60+2*j])*StrToFloat(Stg_impor
ta.cells[0,60+2*j])/100;
Ang[j,i-2]:=Math.DegToRad(StrToFloat(Stg_importa.cells[i,61+2*j]));
RMS[j]:=RMS[j]+Cn[j,i-2]*Cn[j,i-2];
end;
RMS[j]:=system.sqrt(RMS[j]/2);
end;
end;
Ed_VArms.text:=formatfloat('0.00',RMS[1]);
Ed_VBrms.text:=formatfloat('0.00',RMS[2]);
Ed_VCrms.text:=formatfloat('0.00',RMS[3]);
Ed_IArms.text:=formatfloat('0.00',RMS[4]);
Ed_IBrms.text:=formatfloat('0.00',RMS[5]);
Ed_ICrms.text:=formatfloat('0.00',RMS[6]);

//Calculando a DHT
for i:=1 to 6 do
begin
DHT[i]:=0;
for j:=2 to 25 do
DHT[i]:=DHT[i]+cnP[i,j]*cnP[i,j];//usando valor em porcentagem
DHT[i]:=system.sqrt(DHT[i])/100;//usando valor em porcentagem
// DHT[i]:=DHT[i]+cn[i,j]*cn[i,j]; //usando valor RMS

(dentro do somatori

o)
// DHT[i]:=system.sqrt(DHT[i]/(cn[i,1]*cn[i,1]+DHT[i]));////usando valor RMS
end;
Ed_DHTVA.text:=formatfloat('0.00',dHT[1]*100);
Ed_DHTVB.text:=formatfloat('0.00',dHT[2]*100);
Ed_DHTVC.text:=formatfloat('0.00',dHT[3]*100);
Ed_DHTIA.text:=formatfloat('0.00',dHT[4]*100);
Ed_DHTIB.text:=formatfloat('0.00',dHT[5]*100);
Ed_DHTIC.text:=formatfloat('0.00',dHT[6]*100);
//Calculando as componentes Harmonicas Fase-Fase da tenso
{ RMSFF[1]:=0; //VAB
RMSFF[2]:=0; //VBC

RMSFF[3]:=0; //VCA
for j:=1 to 25 do
begin
CnFF[1][j]:=system.sqrt(Math.power(Cn[1][j]*system.cos(Ang[1][j])-Cn[2][j]
*system.cos(Ang[2][j]),2)+Math.Power(Cn[1][j]*system.sin(Ang[1][j])-Cn[2][j]*sys
tem.sin(Ang[2][j]),2));
RMSFF[1]:=RMSFF[1]+CNFF[1][j]*CNFF[1][j];
CnFF[2][j]:=system.sqrt(Math.power(Cn[2][j]*system.cos(Ang[2][j])-Cn[3][j]
*system.cos(Ang[3][j]),2)+Math.Power(Cn[2][j]*system.sin(Ang[2][j])-Cn[3][j]*sys
tem.sin(Ang[3][j]),2));
RMSFF[2]:=RMSFF[2]+CNFF[2][j]*CNFF[2][j];
CnFF[3][j]:=system.sqrt(Math.power(Cn[3][j]*system.cos(Ang[3][j])-Cn[1][j]
*system.cos(Ang[1][j]),2)+Math.Power(Cn[3][j]*system.sin(Ang[3][j])-Cn[1][j]*sys
tem.sin(Ang[1][j]),2));
RMSFF[3]:=RMSFF[3]+CNFF[3][j]*CNFF[3][j];
end;
RMSFF[1]:=system.sqrt(RMSFF[1]/2);
RMSFF[2]:=system.sqrt(RMSFF[2]/2);
RMSFF[3]:=system.sqrt(RMSFF[3]/2);

RMSFF[1]:=system.sqrt(3)*(RMS[1]+RMS[2])/2; //VAB
RMSFF[2]:=system.sqrt(3)*(RMS[2]+RMS[3])/2; //VBC
RMSFF[3]:=system.sqrt(3)*(RMS[3]+RMS[1])/2; //VCA
RMSFF[4]:=system.sqrt(3)*(RMS[4]+RMS[5])/2; //IAB
RMSFF[5]:=system.sqrt(3)*(RMS[5]+RMS[6])/2; //IBC
RMSFF[6]:=system.sqrt(3)*(RMS[6]+RMS[4])/2; //ICA
Ed_VABrms.Text:=formatfloat('0.00',RMSFF[1]);
Ed_VBCrms.Text:=formatfloat('0.00',RMSFF[2]);
Ed_VCArms.Text:=formatfloat('0.00',RMSFF[3]);
//calculo do desbalano
if (RMS[4]>RMS[5]) and (RMS[4]>RMS[6]) then
base:=RMS[4]
else if (RMS[5]>RMS[4]) and (RMS[5]>RMS[6]) then
base:=RMS[5]
else if (RMS[6]>RMS[4]) and (RMS[6]>RMS[5]) then
base:=RMS[6]
else
base:=RMS[4];
Ed_desbA.text:=formatfloat('0.00',(100*RMS[4]/base));
Ed_desbB.text:=formatfloat('0.00',(100*RMS[5]/base));
Ed_desbC.text:=formatfloat('0.00',(100*RMS[6]/base));
//Calculando o desiquilibrio
beta:=(Math.Power(RMSFF[1],4)+Math.Power(RMSFF[2],4)+Math.Power(RMSFF[3],4))
/Math.power((Math.Power(RMSFF[1],2)+Math.Power(RMSFF[2],2)+Math.Power(RMSFF[3],2
)),2);
desiq:=100*system.sqrt(abs(1-system.sqrt(3-6*beta))/abs(1+system.sqrt(3-6*be
ta)));
Ed_desiq.text:=formatfloat('0.00',desiq);
//Calculando o desiquilibrio Corrente
beta:=(Math.Power(RMSFF[4],4)+Math.Power(RMSFF[5],4)+Math.Power(RMSFF[6],4))

/Math.power((Math.Power(RMSFF[4],2)+Math.Power(RMSFF[5],2)+Math.Power(RMSFF[6],2
)),2);
desiq:=100*system.sqrt(abs(1-system.sqrt(3-6*beta))/abs(1+system.sqrt(3-6*be
ta)));
Ed_idesb.text:=formatfloat('0.00',desiq);
//Fase A
aux1:=procuraZero(1,0.01,0);
aux2:=procuraZero(4,0.01,aux1) ;
fase:=aux2-aux1;
if fase>PI then fase:=-(PI-fase);
ed_faseA.text:=formatfloat('0.00',fase);
//Fase B
aux1:=procuraZero(2,0.01,0);
aux2:=procuraZero(5,0.01,aux1) ;
fase:=aux2-aux1;
if fase>PI then fase:=-(PI-fase);
ed_faseB.text:=formatfloat('0.00',fase);
//Fase C
aux1:=procuraZero(3,0.01,0);
aux2:=procuraZero(6,0.01,aux1) ;
fase:=aux2-aux1;
if fase>PI then fase:=-(PI-fase);
ed_faseC.text:=formatfloat('0.00',fase);
//Vab
aux1:=procuraZero(1,0.01,0);
aux2:=procuraZero(2,0.01,aux1) ;
fase:=aux2-aux1;
if fase>PI then fase:=-(PI-fase);
ed_vab.text:=formatfloat('0.00',fase);
//Vac
aux1:=procuraZero(1,0.01,0);
aux2:=procuraZero(3,0.01,aux1) ;
fase:=aux2-aux1;
if fase>PI then fase:=-(PI-fase);
ed_vac.text:=formatfloat('0.00',fase+PI);
//Iab
aux1:=procuraZero(4,0.01,0);
aux2:=procuraZero(5,0.01,aux1) ;
fase:=aux2-aux1;
if fase>PI then fase:=-(PI-fase);
ed_iab.text:=formatfloat('0.00',fase);
//Iac
aux1:=procuraZero(4,0.01,0);
aux2:=procuraZero(6,0.01,aux1) ;
fase:=aux2-aux1;
if fase>PI then fase:=-(PI-fase);
ed_iac.text:=formatfloat('0.00',fase+PI);
//Calculando as mdias
ed_medDHTV.Text:=formatfloat('0.00', (strtofloat(Ed_DHTVA.Text)+strtofloat(E
d_DHTVB.Text)+strtofloat(Ed_DHTVC.Text))/3);
ed_medDHTI.Text:=formatfloat('0.00', (strtofloat(Ed_DHTIA.Text)+strtofloat(E

d_DHTIB.Text)+strtofloat(Ed_DHTIC.Text))/3);
end;

You might also like