TRABALHO COMPUTACIONAL II
SLEC
SETEMBRO 02
Problema:
Dado o Sistema New England abaixo, calcule de forma grfica, os Mode
Shapes de velocidade dos modos eletromecnicos.
SLEC
Tab. 1- Tabela que mostra os modos de oscilao do New England (caso base) para
amortecimentos menores que 10%
-------+--------+--------------------------+---------------+-------------Indx | MODO |
Auto Valores
| Amortecim.(%) | frq(rad/sec)
-------+--------+--------------------------+---------------+-------------1
|
10 |
-0.4672 +
8.9644xi |
5.205 %
|
1.4267
2
|
11 |
-0.4672 + -8.9644xi |
5.205 %
|
1.4267
3
|
12 |
-0.4124 +
8.7808xi |
4.691 %
|
1.3975
4
|
13 |
-0.4124 + -8.7808xi |
4.691 %
|
1.3975
5
|
14 |
-0.3704 +
8.6113xi |
4.298 %
|
1.3705
6
|
15 |
-0.3704 + -8.6113xi |
4.298 %
|
1.3705
7
|
16 |
-0.2817 +
7.5367xi |
3.735 %
|
1.1995
8
|
17 |
-0.2817 + -7.5367xi |
3.735 %
|
1.1995
9
|
18 |
-0.1083 +
7.0951xi |
1.526 %
|
1.1292
10
|
19 |
-0.1083 + -7.0951xi |
1.526 %
|
1.1292
11
|
20 |
-0.2969 +
6.9566xi |
4.264 %
|
1.1072
12
|
21 |
-0.2969 + -6.9566xi |
4.264 %
|
1.1072
13
|
22 |
-0.2769 +
6.2759xi |
4.407 %
|
0.9988
14
|
23 |
-0.2769 + -6.2759xi |
4.407 %
|
0.9988
15
|
24 |
-0.2995 +
5.7914xi |
5.165 %
|
0.9217
16
|
25 |
-0.2995 + -5.7914xi |
5.165 %
|
0.9217
17
|
31 |
-0.1601 +
2.8562xi |
5.596 %
|
0.4546
18
|
32 |
-0.1601 + -2.8562xi |
5.596 %
|
0.4546
-------+--------+--------------------------+---------------+-------------NaoAmort =
18
Na tabela Tab. 2 apresentam a ordem dos geradores com suas respectivas barras
onde est conectados, o sistema conta com 10 geradores, mas aqui no se mostra o
gerador 3, j que este est ligado na Barra de Referncia, logo, pode-se dizer que este
sistema possui 9 modos eletromecnicos.
Tab. 2- Geradores do sistema com as barras de conexo
Ind.
1
2
3
4
5
6
7
8
9
Gerador
G1
G4
G5
G6
G7
G8
G9
G2
G10
Barra
30
31
32
33
34
35
36
37
38
SLEC
SLEC
A seguir vamos presentar os modos Shape dos modos (Tab. 3), com relao s
velocidades da maquinas (w), do primeiro ponto de operao (caso base).
SLEC
Fig. 6 Modo 10, onde se tem uma oscilao local entre Ger_8 e Ger_9.
Fig. 7 Modo 12, onde se tem uma oscilao intrearea Ger_2, Ger_1 e Ger_6.
SLEC
Fig. 8 Modo 14, tem-sea oscilao entre Ger_6 e Ger_7, Ger_9 e Ger_2
Fig. 9 Modo 16, onde se tem uma oscilao local, Ger_4 e Ger_5.
SLEC
Fig. 10 Modo 18, Modo de oscilao, Ger_1, Ger_2, contra o resto dos Geradores.
SLEC
SLEC
10
Fig. 14 Modo 31, oscilao de todos contra todos os geradores (no referencia).
SLEC
11
SLEC
12
SLEC
13
SLEC
14
Logo, deacordo tabela Tab. 7 y com as figura Fig. 21, Fig. 23, Fig. 15 e Fig. 18
aqui mostraremos de novo.
Finalmente escolhemos o gerador onde ser colocado o PSS, neste caso ser no
gerador 1.
SLEC
15
Para se projetar os PSSs para este primeiro ponto de operao, foram feitas as
seguintes consideraes:
a)
Considera-se o PSS em conjunto com o washout, onde a constante de
tempo de Tw = 10 para todos os geradores.
b)
O ngulo de compensao I ser calculado pelo blocos do Lead-Leg
(avano-atraso).
c)
A freqncia ser a obtida pelo plo autovalor do modo 18
d)
Vamos a considerar que nosso primeiro PSS tenha um ganho menor que
50 e assim aproveitar ter um menor nmero de plos no amortecidos
Podemos ver que na figura Fig. 24, para conseguir um amortecimento de >10%,
e mexendo com somente ganho se teria que colocar um ganho maior a 1150.0, agora
usando o PSS com washout e lead leg vamos a usar um ganho de 45.
>>
>>
>>
>>
>>
>>
SLEC
GerPss = 1; % gerador
id_Md = 18; % modo
Ang_Partida = Angulo_Resi(GerPss,id_Md);
Ang_Partida =
8.1632;
AngComp = 180 - Ang_Partida;
AngComp =
171.84
NoBlq = round(AngComp/60)
NoBlq =
3
AngComp/NoBlq
ans =
57.279
alfG1
ans =
11.603
w_b
ans =
7.0951
T_G1
ans =
0.0414
16
Isav
57.279q
1 D1T1s
Kd ( s )
1 T1s
Calculo de D1 :
D1 1
D1 1
sin(Isav )
D1
D1 11.603
T1
Z7 ,8
T1
0.0414
1 sin(Isav )
1 sin(Isav )
Calculo de T1 :
Z7 ,8
com:
1 D1
T1 D1
Z7 ,8
D1
D1
7.0951
SLEC
17
Fig. 25, Mapa de Plos e zeros do caso base com Pss em Ger_1
SLEC
18
Fig. 26, Mapa de Plos e zeros do caso base com PSSg1 e PSSg4
SLEC
19
SLEC
20
Fig. 27, Mapa de Plos e zeros do caso base com PSSg1, PSSg4 e PSSg5.
SLEC
21
Fig. 28, Mapa de Plos e zeros do caso base com PSSg1, PSSg4, PSSg5 e PSSg8.
SLEC
22
SLEC
23
Fig. 29, Caso base com PSSg1, PSSg4, PSSg5, PSSg8 e PSSg9.
SLEC
24
Tab. 18 Modos -amortecidos com PSSg1, PSSg4, PSSg5, PSSg8, PSSg9 e PSSg10
-------+--------+----------------------+------------Indx | Modo |
Auto Valores
| Amortecim(%)
-------+--------+----------------------+------------1
|
32
| -0.7446 + 7.3394i | 10.093 %
2
|
33
| -0.7446 + -7.3394i | 10.093 %
3
|
34
| -0.5229 + 7.0002i |
7.449 %
4
|
35
| -0.5229 + -7.0002i |
7.449 %
5
|
42
| -0.7177 + 6.0174i | 11.843 %
6
|
43
| -0.7177 + -6.0174i | 11.843 %
-------+--------+----------------------+------------Nao_Amort1 =
6
Fig. 30, Caso base com PSSg1, PSSg4, PSSg5, PSSg8, PSSg9 e PSSg10.
SLEC
25
Fig. 31, Caso base com PSSg1, PSSg4, PSSg5, PSSg8, PSSg9, PSSg10 e PSSg2.
SLEC
26
SLEC
27
Fig. 32, Caso base com PSSg1, PSSg4, PSSg5, PSSg8, PSSg9
PSSg10, PSSg2 e PSSg7.
SLEC
28
Fig. 33, Caso base com PSSg1, PSSg4, PSSg5, PSSg8, PSSg9,
PSSg10, PSSg2, PSSg7 e PSSg6.
SLEC
29
SLEC
30
SLEC
31
SLEC
32
Conclues:
O trabalho desenvolvido tomou muito tempo na qual se testaram todos os
valores de Kpss assim como o Alfa_pss, a ventaga foi que foram poucos geradores, mas
isso no quita o rduo trabalho que se tem para poder amortecer todos os modos.
Em primeira tentativa se consiguiu um mnimo amortecimento para o ponto de
operao at 10.7%, mas faltando um PSS por colocar.
Quando se tentou coloar o PSS no gerador faltante para poder aumentar o
amortecimento do modo nos dimos com a sorpresa de que na tabela de resduos o
gerador em questo tinha um valor de modulo de zero o prximo a zero, al colocar este
PSS no gerador no mudava o amortecimento, e esto lgico j que no tem muita
influencia sobre este modo.
Devido ao anterior se testaram os primeros PSS colocados, onde se procurou os
geradores com o segundo maior resduo, j que poderia pasar como nosso primero PSS
(no analise das figuras: Fig 21, Fig 23, Fig 15 e Fig 19 existencia de um zero muito
prximo ao modo de menor amortecimento.
Uma primera ventaja foi que primero testamos na obteno de Kpss_g1 e
Alfa_g1 para poder obter o menor nuemero de modos no amortecidos e logo foi que se
determinou um valor fixo de Kpss_g1 = 45.
Pode se melhorar o programa feito para uma procura dos amortecimentos
mnimos e poder maximizar o amortecimento, mas este tomaria muito tempo j que
todos os valores iniciam de Kpss_g2 at Kpss_g9 e Alfa_g2 at Alfa_g9 foram
aleatrios.
Aqui vamos a destacar que o valor mximo para o Alfa_gi foram dados pelos
propios ngulos de compensao, como dito nas consideraes da seo 2, se pode
liverar o limite superior para um valor maximo de 20 (equivalente ao ngulo de 65 limite dos lead-leg),
Um mtodo mais adeaudo seria a utilizao de algoritmos genticos onde este
procuraria o menor amortecimento para poder colocar PSS e asi poder maximizar o
amortecimento do modeo com menor amortecimento.
SLEC
33
CDIGOS EM MATLAB:
CALCULO DOS MODOS SHAPE, PLOS E ZEROS, LUGAR DAS RAIZES
%=================================================================
% COE879 - Tecnicas Avancadas de Controle de Sistemas de Potencia
% Trabalho Computacional II
% Sergio Len Escalante Crdenas
clear all
clc
% Carga de dados:
%---------------nengmat; % 4 Pontos de Operacao sist New England (NE)
% grafico no plano z (caso base)
figure(1);
pzmap(A1,B1,C1,D1)
sgrid(0.1,20)
axis([-3 0.5 -1 11]);
set(gcf, 'Color',[1 1 1]);
title('Mapa Polos e Zeros do Caso Base')
%----------------------------figure(2);
pzmap(A2,B2,C2,D2)
sgrid(0.1,20)
axis([-3 0.5 -1 11]);
set(gcf, 'Color',[1 1 1]);
title('Mapa Polos e Zeros 2do Ponto de operao')
%----------------------------figure(3);
pzmap(A3,B3,C3,D3)
sgrid(0.1,20)
axis([-3 0.5 -1 11]);
set(gcf, 'Color',[1 1 1]);
title('Mapa Polos e Zeros 3ro Ponto de operao')
%----------------------------figure(4);
pzmap(A4,B4,C4,D4)
sgrid(0.1,20)
axis([-3 0.5 -1 11]);
set(gcf, 'Color',[1 1 1]);
title('Mapa Polos e Zeros 4to Ponto de operao')
%
==================================================================
=======
% Calcuolo dos Autovalores
% calculo dos autovalores e autovetor direito
[Phia, Da] = eig(A4);
% calculo do autovetor esquerdo
Shia = inv(Phia);
% Calculo do autovalor
AutoVal = diag(Da); % autovalores
AutoVet = Phia;
% frequncia
freq
= imag(AutoVal);
FreqHz = abs(freq)/(2*pi);
% Amortecimento
Amort = cos(atan2(imag(AutoVal),-real(AutoVal)));
%
==================================================================
=======
indx = 0;
NaoAmort = 0;
for ii = 1:size(AutoVal,1)
%Damp = -real(freq(ii))/(abs(freq(ii)))*100; % Amortecimento
if((FreqHz(ii) >= 0.1) & (FreqHz(ii) <= 3.0) &
(Amort(ii)*100<10))
indx = indx + 1;
modo(indx,:) = [ii Amort(ii)*100 real(AutoVal(ii))
imag(AutoVal(ii)) FreqHz(ii) ];
NaoAmort = NaoAmort + 1;
end
end
fprintf(' -------+--------+--------------------------+--------------+-------------- \n')
Indx | MODO |
Auto Valores
|
fprintf('
Amortecim.(%%) | frq(rad/sec) \n')
fprintf(' -------+--------+--------------------------+--------------+-------------- \n')
for ip = 1:length(modo)
| %4i | %9.4f + %7.4fxi | %9.3f %%
|
fprintf('%6i
%8.4f \n',ip,...
modo(ip,1),modo(ip,3),modo(ip,4),modo(ip,2), modo(ip,5))
end
fprintf(' -------+--------+--------------------------+--------------+-------------- \n')
NaoAmort
%
==================================================================
=======
% Os modos de velocidade so: 10,12,14,16,18,20,22,24,31
% indice de modos eletromecanicos de angulos
indx = 0;
for ii = 1:4:34
indx = indx + 1;
Delta_mq(indx)=ii;
end % para o angulo da maq
% indice de modos eletromecanicos de velocidade angular
indx = 0;
for ii = 2:4:34
indx = indx + 1;
SLEC
VelAng_w(indx)=ii;
end % para a velocidade da maq
%
==================================================================
=======
ModosElet = [10 12 14 16 18 20 22 24 31];
Mod_ = AutoVet(VelAng_w,ModosElet);
Max_Mod = max(abs(Mod_));
for ii = 1:size(Mod_,2)
Norm_Mod_(:,ii) = Mod_(:,ii)./Max_Mod(ii);
end
%
==================================================================
=======
% Cores dos Geradores 1, 2, 4, 5, 6, 7, 8, 9, 10
% Para dar um cor especifico a cada maquina:
CorMaq
= ['b' 'r' 'r' 'm' 'm' 'k' 'k' 'b' 'g' ];
Ngerador = [ 1
4
5
6
7
8
9
2
10 ];
% Ordenando:
for ii = 1:size(Mod_,2)
PaOrdMod_(:,:,ii) = [Ngerador' abs(Norm_Mod_(:,ii))
(angle(Norm_Mod_(:,ii)).*180/pi) ];
end
%
==================================================================
=======
for ii = 1:size(Mod_,2)
fprintf('-----+---------+-----------+-----------\n')
fprintf(' ind | Gerador | Abs(Md_%2i)|
Ang(Md_%2i)\n',ModosElet(ii),ModosElet(ii) )
fprintf('-----+---------+-----------+-----------\n')
for ip = 1:length(Ngerador)
fprintf('%3i | Ger_%2i | %7.4f | %8.3f \n',ip,
Ngerador(ip), PaOrdMod_(ip,2,ii),PaOrdMod_(ip,3,ii))
end
fprintf('-----+---------+-----------+-----------\n')
end
%
==================================================================
=======
for ii = 1:size(Mod_,2)
[Md(:,ii) indi(:,ii)] = sort(Norm_Mod_(:,ii));
end
for jj = 1:1:size(Mod_,1)
OrdGer(:,jj) = Ngerador(indi(:,jj));
end
for ii = 1:1:size(Mod_,1)
OrdGer1(ii,:) = OrdGer(size(Mod_,1)-ii+1,:);
end
%
==================================================================
=======
for ii = 1:size(Mod_,2)
figure(9+ii);
for jj = size(Md(:,ii),1):-1:1
compass(Md(jj,ii),CorMaq(indi(jj,ii)));
hold on
end
set(gcf, 'Color',[1 1 1]);
if ii == 1
title('Modo 10, \zeta_{10} = 5.205%, Autovalor_{10} =
0.4672+8.9644i')
legend('Ger_9','Ger_8','Ger_6','Ger_2','Ger_1','Ger_5','Ger_{10}',
'Ger_4','Ger_7',1);
end
if ii == 2
title('Modo 12, \zeta_{12} = 4.691%, Autovalor_{12} = 0.4124+8.7808i')
legend('Ger_2','Ger_6','Ger_1','Ger_{10}','Ger_7','Ger_5','Ger_9',
'Ger_4','Ger_8',1);
end
if ii == 3
title('Modo 14, \zeta_{14} = 4.298%, Autovalor_{14} = 0.3704+8.6113i')
legend('Ger_6','Ger_7','Ger_9','Ger_2','Ger_8','Ger_1','Ger_5','Ge
r_{10}','Ger_4',1);
end
if ii == 4
title('Modo 16, \zeta_{16} = 3.734%, Autovalor_{16} = 0.2817+7.5367i')
legend('Ger_5','Ger_4','Ger_9','Ger_8','Ger_1','Ger_2','Ger_6','Ge
r_7','Ger_{10}',1);
end
if ii == 5
title('Modo 18, \zeta_{18} = 1.526%, Autovalor_{18} = 0.1083+7.0951i')
legend('Ger_1','Ger_2','Ger_9','Ger_8','Ger_{10}','Ger_4','Ger_7',
'Ger_5','Ger_6',1);
34
end
if ii == 6
title('Modo 20, \zeta_{20} = 4.264%, Autovalor_{20} =
0.2969+6.9566i')
legend('Ger_8','Ger_9','Ger_4','Ger_7','Ger_5','Ger_1','Ger_{10}',
'Ger_2','Ger_6',1);
end
if ii == 7
title('Modo 22, \zeta_{22} = 4.407%, Autovalor_{22} = 0.2769+6.2759i')
legend('Ger_4','Ger_5','Ger_7','Ger_{10}','Ger_1','Ger_8','Ger_9',
'Ger_2','Ger_6',1);
end
if ii == 8
title('Modo 24, \zeta_{24} = 5.165%, Autovalor_{24} = 0.2995+5.7914i')
legend('Ger_7','Ger_{10}','Ger_6','Ger_2','Ger_1','Ger_9','Ger_8',
'Ger_4','Ger_5',1);
end
if ii == 9
title('Modo 31, \zeta_{31} = 5.596%, Autovalor_{31} = 0.1601+2.8562i')
legend('Ger_7','Ger_{10}','Ger_9','Ger_6','Ger_8','Ger_5','Ger_4',
'Ger_2','Ger_1',1);
end
end
SLEC
VelAng_w(indx)=ii;
end % para a velocidade da maq
% =================================================
ModosElet = [10 12 14 16 18 20 22 24 31];
Mod_ = AutoVet(VelAng_w,ModosElet);
% Fator de participacion(somente dos modos selecionados)
Max_Mod = max(abs(Mod_));
for ii = 1:size(Mod_,2)
Norm_Mod_(:,ii) = Mod_(:,ii)./Max_Mod(ii);
end
% Ngerador = [ 1
4
5
6
7
8
9
2
10 ]; %
%
==================================================================
=======
% Calculo do Residuo
% I-> indice de entrada J-> indice do modo.
% Residuo = C1(I,:)*Phia(:,J)*Shia(J,:)*B1(:,I);
idx = 1:1:size(B1,2);
for ii = 1:size(A1,1) % para ver todos os modos
ResiduoMd(idx,:) = C1(idx,:)*Phia(:,ii)*Shia(ii,:)*B1(:,idx);
Diag_Resi = diag(ResiduoMd);
Modulo_Resi(:,ii) = abs(Diag_Resi)/max(abs(Diag_Resi));
Angulo_Resi(:,ii) = angle(Diag_Resi).*180/pi;
end
%
==================================================================
=======
gera = [ 1
2 4
5
6
7
8
9
10 ];
[Amort id_Md] = min(modo(:,2));
id_Md = modo(id_Md,1);
% Residuo do menor modo:
MODO_Residuo = [ Modulo_Resi(:,id_Md) Angulo_Resi(:,id_Md) ];
[auxMdRe inin] = sort(MODO_Residuo(:,1));
in_dx = inin(size(gera,2));
ProOp(1) = in_dx;
in_dx = inin(size(gera,2)-1);
ProOp(2) = in_dx;
in_dx = inin(size(gera,2)-2);
ProOp(3) = in_dx;
in_dx = inin(size(gera,2)-3);
ProOp(4) = in_dx;
%
==================================================================
=======
% -------------------------------------------------------fprintf('Residuo das maquinas 1,2,4-10 do modo %i\n',gera(in_dx))
fprintf(' -----+---------+----------+-----------\n');
\n');
fprintf(' ind | Gerador | Modulo | Angulo
fprintf(' -----+---------+----------+-----------\n');
for ii = 1:size(B1,2)
fprintf(' %2i | Ger_%2i | %6.4f | %8.3f \n',ii,
gera(ii), Modulo_Resi(ii,id_Md), Angulo_Resi(ii,id_Md));
end
fprintf(' -----+---------+----------+-----------\n');
[auxMdRe inin] = sort(Modulo_Resi(:,id_Md));
in_dx = inin(size(gera,2));
fprintf('
Gerador com maior residuo: Ger_%2i
\n',gera(in_dx))
in_dx = inin(size(gera,2)-1);
Gerador com maior residuo: Ger_%2i
\n',gera(in_dx))
fprintf('
in_dx = inin(size(gera,2)-2);
Gerador com maior residuo: Ger_%2i
\n',gera(in_dx))
fprintf('
in_dx = inin(size(gera,2)-3);
Gerador com maior residuo: Ger_%2i
\n',gera(in_dx))
fprintf('
%
==================================================================
=======
% CALCULO DO PSS A COLOCAR NO GERADOR 1
% gera = [ 1
4
5
6
7
8
9
2
10 ];
GerPss = ProOp(3); % se escolhe o gerador 1
Ang_Partida = Angulo_Resi(GerPss,id_Md)
AngComp = 180 - Ang_Partida
%-------------------------------------------------% limites dos compensadores de avno e atraso = 60
% Calculo do numero de blocos:
NoBlq = round(AngComp/60)
fi_max
= AngComp/NoBlq
fi_maxrd = fi_max*pi/180;
%-------------------------------------------------PoloPiorAmort = AutoVal(id_Md);
ww_p
= abs(imag(PoloPiorAmort));
Tw_G1 = 10;
Kte_G1 = 45;
%Washout_G1 = Kte_G1*(Tw_G1*s/(1+Tw_G1*s));
num_Washout = [Tw_G1 0];
den_Washout = [Tw_G1 1];
alfG1 = ( 1+sin(fi_maxrd) )/( 1-sin(fi_maxrd) )
num_WL = num_Washout;
den_WL = den_Washout;
% do diagrama de rlocus:
% w_m = 1/T1*sqrt(alf1)/alf1
T_G1 = 1/ww_p*sqrt(alfG1)/alfG1
% LeadLeg_G1 = (1+alfG1*T_G1*s)/(1+T_G1*s) ;
for jj = 1:NoBlq
num_WL = conv( num_WL, [alfG1*T_G1 1] );
den_WL = conv( den_WL, [
T_G1 1] );
end
num_WL = Kte_G1*num_WL;
%PSS_G1 = Washout_G1*( LeadLeg_G1 )^NoBlq
[ApG1,BpG1,CpG1,DpG1] = tf2ss(num_WL,den_WL);
%
==================================================================
=======
35
Amortp1 = cos(atan2(imag(Auto_Val1),-real(Auto_Val1)));
%
==================================================================
=======
% Calculo de Residuo Para o Novo sistema
Phia = Auto_Vet1;
Shia = inv(Auto_Vet1);
idx = 1:1:size(BB1,2);
for ii = 1:size(AA1,1) % para ver todos os modos
ResiduoMd(idx,:) =
CC1(idx,:)*Phia(:,ii)*Shia(ii,:)*BB1(:,idx);
Diag_Resi = diag(ResiduoMd);
Modulo_Resi(:,ii) = abs(Diag_Resi)/max(abs(Diag_Resi));
Angulo_Resi(:,ii) = angle(Diag_Resi).*180/pi;
end
gera = [ 1
2 4
5
6
7
8
9
10 ];
[minp1,ind_] = min(Amortp1);
[auxMdRe inin] = sort(Modulo_Resi(:,ind_));
in_dx = inin(size(gera,2));
in__d_ = in_dx; % gerador 1
% -------------------------------------------------------fprintf('Residuo das maquinas 1,2,4-10 do modo %i\n',ind_)
fprintf(' -----+---------+----------+-----------\n');
\n');
fprintf(' ind | Gerador | Modulo | Angulo
fprintf(' -----+---------+----------+-----------\n');
for ii = 1:size(BB1,2)
fprintf(' %2i | Ger_%2i | %6.4f | %8.3f \n',ii,...
gera(ii), Modulo_Resi(ii,ind_), Angulo_Resi(ii,ind_));
end
fprintf(' -----+---------+----------+-----------\n');
%[minp1,ind_] = min(Amortp1);
Gerador com maior residuo: Ger_%2i
\n',gera(in_dx))
fprintf('
%
==================================================================
=======
% CALCULO DO PSS A COLOCAR NO GERADOR 4
GerPss = in_dx;
Ang_Partida = Angulo_Resi(GerPss,ind_)
AngComp = 180 - Ang_Partida
% limites dos compensadores de avno e atraso = 60
% Calculo do numero de blocos:
% NoBlq = round(AngComp/60);
% fi_max = AngComp/NoBlq;
if AngComp/round(AngComp/60) > 60
NoBlq = round(AngComp/60)+1;
else
NoBlq = round(AngComp/60)
end
fi_max = AngComp/NoBlq;
NoBlq
fi_maxrd = fi_max*pi/180;
PoloPiorAmort = Auto_Val1(ind_);
ww_p = abs(imag(PoloPiorAmort));
%s = tf('s');
Tw_G1 = 10;
%Washout_G1 = Kte_G1*(Tw_G1*s/(1+Tw_G1*s));
num_Washout = [Tw_G1 0];
den_Washout = [Tw_G1 1];
alfG1Max = ( 1+sin(fi_maxrd) )/( 1-sin(fi_maxrd) )
Kte_G1 = 25; % valores que tem que variar
alfG1 = 6.1 % valores que tem que variar
clear ValorKte ValorAlfG1 ValorNAm
i_ct = 0;
for iijj = 1:1:50
alfG1 = 0.1 + rand(1)*(alfG1Max-0.1);
Kte_G1 = round(rand(1)*iijj) + rand(1)*(50 - iijj);
num_WL = num_Washout;
den_WL = den_Washout;
% do diagrama de rlocus:
% w_m = 1/T1*sqrt(alf1)/alf1
T_G1 = 1/ww_p*sqrt(alfG1)/alfG1;
%LeadLeg_G1 = (1+alfG1*T_G1*s)/(1+T_G1*s) ;
% num_LeadLeg = [alfG1*T_G1 1];
% den_LeadLeg = [
T_G1 1];
for jj = 1:NoBlq
num_WL = conv( num_WL, [alfG1*T_G1 1] );
den_WL = conv( den_WL, [
T_G1 1] );
end
num_WL = Kte_G1*num_WL;
%PSS_G1 = tf(num_WL,den_WL)
%PSS_G1 = Washout_G1*( LeadLeg_G1 )^NoBlq
% Carga de dados:
load AAgp1
load BBgp1
load CCgp1
load DDgp1
%load mode
AA1 = AAgp;
BB1 = BBgp;
CC1 = CCgp;
DD1 = DDgp;
%modeP1 = mode;
% [ApG1,BpG1,CpG1,DpG1] = tf2ss(num_WL,den_WL);
[ApG1(:,:,iijj),BpG1(:,:,iijj),CpG1(:,:,iijj),DpG1(:,:,iijj)]
= tf2ss(num_WL,den_WL);
%---------------[Auto_Vet1,Auto_Val1] = eig(AA1);
Auto_Val1 = diag(Auto_Val1);
% Amortecimento
SLEC
36
[AA_1(:,:,iijj),BB_1(:,:,iijj),CC_1(:,:,iijj),DD_1(:,:,iijj)]
= ...
feedback(AA1,BB1,CC1,DD1,ApG1(:,:,iijj),BpG1(:,:,iijj),CpG1(:,:,ii
jj),DpG1(:,:,iijj),+GerPss,GerPss);
%--------------------------------------------% Calculo de Vetores e Autovalores Resultante:
[Auto_Vet1,Auto_Val1] = eig(AA_1(:,:,iijj));
Auto_Val1 = diag(Auto_Val1);
%-------------------------------------% Amortecimento de todos os autovalores
modoP1=[];
Nao_Amort1 = 0;
i_cont = 0;
Amortp1 = cos(atan2(imag(Auto_Val1),-real(Auto_Val1)));
for ii = 1:size(Auto_Val1,1)
%Amortp1(ii) = real(Auto_Val1(ii))/(abs(Auto_Val1(ii)))*100;
if ( Amortp1(ii)*100 < 10.0 )
i_cont = i_cont + 1;
modoP1(i_cont,:) = [ii Amortp1(ii)*100
real(Auto_Val1(ii)) imag(Auto_Val1(ii)) ];
Nao_Amort1 = Nao_Amort1 + 1;
end
end
if Nao_Amort1 <= 12
i_ct = i_ct+1;
AA_p1(:,:,i_ct)
BB_p1(:,:,i_ct)
CC_p1(:,:,i_ct)
DD_p1(:,:,i_ct)
ValorKte(i_ct)
ValorAlf(i_ct)
ValorT_G1(i_ct)
ValorNAm(i_ct)
%end
%if (Nao_Amort1
=
=
=
=
AA_1(:,:,iijj);
BB_1(:,:,iijj);
CC_1(:,:,iijj);
DD_1(:,:,iijj);
=
=
=
=
Kte_G1;
alfG1;
T_G1;
Nao_Amort1;
~= 0)
fprintf(' -------+--------+----------------------+------------\n')
Auto Valores
|
fprintf(' Indx | Modo |
Amortecim(%%)\n')
fprintf(' -------+--------+----------------------+------------\n')
for ip = 1:length(modoP1)
| %3i
| %8.4f + %7.4fi | %7.3f %%
fprintf('%5i
\n',ip,...
modoP1(ip,1),modoP1(ip,3),modoP1(ip,4),modoP1(ip,2) );
end
fprintf(' -------+--------+----------------------+------------ \n')
Nao_Amort1
end
end
%
==================================================================
=======
% Parametros do PSS1:
[auxNA in_na] = min(ValorNAm)
ValorKte(in_na);
ValorKte(in_na)
ValorAlf(in_na)
ValorT_G1(in_na)
ValorNAm(in_na)
fprintf('Parametros do PSS no Ger_%2i\n',gera(in_dx));
fprintf('----------+--------+----------+-----------+---------\n')
Ganho | Blocos |
Alfa
|
Tempo
| -Amort \n')
fprintf('
fprintf('----------+--------+----------+-----------+---------\n')
| %6.3f | %6.4f
| %4i
\n',...
fprintf(' %6.3f | %3i
ValorKte(in_na), NoBlq,ValorAlf(in_na),ValorT_G1(in_na),
ValorNAm(in_na) );
fprintf('----------+--------+----------+-----------+---------\n')
figure(40+in_na);
pzmap(AA_p1(:,:,in_na),BB_p1(:,:,in_na),CC_p1(:,:,in_na),DD_p1(:,:
,in_na))
sgrid(0.1,20)
axis([-3 0.5 -1 11]);
set(gcf, 'Color',[1 1 1]);
title('Mapa Polos e Zeros do Caso Base com PSS no Ger_4');
%
==================================================================
=======
% Salvando dados para o seguinte PSS:
break
clear AAgp BBgp CCgp DDgp
clear ApG1 BpG1 CpG1 DpG1
%clear mode
AAgp = AA_p1(:,:,in_na);
BBgp = BB_p1(:,:,in_na);
CCgp = CC_p1(:,:,in_na);
DDgp = DD_p1(:,:,in_na);
save AAgp2 AAgp
save BBgp2 BBgp
save CCgp2 CCgp
save DDgp2 DDgp
clear AA_p1 BB_p1 CC_p1 DD_p1
SLEC
AQUI NAO SE MOSTRAM O CODIGO PARA O CALCULO DOS OUTROS PSS, J QUE
SIMILAR AO CDIGO DO CALCULO PARA O SEGUNDO PSS.
%
==================================================================
% COE879 - Tecnicas Avancadas de Controle de Sistemas de Potencia
% Trabalho Computacional II
% Sergio Len Escalante Crdenas
clear all
close all
clc
nengmat
% -----------+---------+--------+----------+-----------+----------------%
Gerador | Ganho | Blocos |
Alfa
|
Tempo
| -Amort
(%Amort)
% -----------+---------+--------+----------+-----------+----------------%
Ger_ 1
| 46.612 |
3
| 10.290 | 0.0439
|
14
(<10%)
%
Ger_ 1
| 45.000 |
3
| 11.603 | 0.0414
|
14
(<10%)
%
Ger_ 4
| 29.735 |
4
|
5.721 | 0.0555
|
12
(<10%)
%
Ger_ 5
| 27.411 |
4
|
3.894 | 0.0589
|
10
(<10%)
%
Ger_ 8
| 7.681 |
3
|
7.786 | 0.0509
|
8
(<10%)
%
Ger_ 9
| 86.911 |
4
|
5.867 | 0.0471
|
4
(<10%)
%
Ger_10
| 14.701 |
3
|
6.088 | 0.0694
|
6
(>10-<12%)
%
Ger_ 2
| 46.257 |
3
|
4.318 | 0.0688
|
2
(>10-<12%)
%
Ger_ 7
| 83.027 |
3
|
4.882 | 0.0614
|
2
(>10-<15%)
%
Ger_ 6
| 4.335 |
3
| 18.588 | 0.0391
|
4
(>10-<20%)
% -----------+---------+--------+----------+-----------+----------------MatrizPSS = [% Nro
Colocadas
1
1
2
7
3
2
4
3
5
9
6
8
7
4
8
5
9
6
];
% CForaGer
ComoForamColocadas
Gera
Ganho
Blocos
Alfa
Tempo
45.000
11.603
0.0414
46.257
4.318
0.0688
29.735
5.721
0.0555
27.411
3.894
0.0589
4.335
18.588
0.0391
83.027
4.882
0.0614
7.681
7.786
0.0509
86.911
5.867
0.0471
10
14.701
6.088
0.0694
= [1 4 5 8 9 10 2 7 6];
= [1 3 4 7 8 9 2 6 5];
Tw_Ggs = 10*ones(size(MatrizPSS,1),1);
Gerador = MatrizPSS(:,2);
GanhoPs = MatrizPSS(:,3);
BlocosPs = MatrizPSS(:,4);
AlfaPs
= MatrizPSS(:,5);
TempoPs = MatrizPSS(:,6);
ForamCol = MatrizPSS(:,7);
s = tf('s');
for iij = 1:size(MatrizPSS,1)
Washout_Ggs(:,:,iij) = Tw_Ggs(iij)*s/(1+Tw_Ggs(iij)*s);
LeadLeg_Ggs(:,:,iij) = (
(1+AlfaPs(iij)*TempoPs(iij)*s)/(1+TempoPs(iij)*s) )^BlocosPs(iij);
PSS_G1(:,:,iij) = GanhoPs(iij)*( Washout_Ggs(:,:,iij) )*(
LeadLeg_Ggs(:,:,iij) );
end
% SistemP1 = ss(A1,B1,C1,D1);
% SistemP2 = ss(A2,B2,C2,D2);
37
% SistemP3 = ss(A3,B3,C3,D3);
% SistemP4 = ss(A4,B4,C4,D4);
NoPOpe = 4;
for Teste_po = 1:NoPOpe
if Teste_po == 1
SistemP1 = ss(A1,B1,C1,D1);
SistemP = SistemP1;
for i_ij = 1:size(MatrizPSS,1)
iij = ComoForamColocadas(i_ij);
SistemP = feedback(SistemP,
PSS_G1(:,:,iij),+iij,iij,+1);
end
figure(20 + Teste_po);
pzmap(SistemP);
sgrid([0.1 .2 ],30)
axis([-2.5 0.2 -1 20]);
set(gcf, 'Color',[1 1 1]);
title('Mapa Polos e Zeros do Caso Base Todos os PSS''s');
[frq_Wn,Amort_Z,pols_P] = damp(SistemP);
[ Min_Amort_PO(Teste_po) in_Modo(Teste_po)]=
min(Amort_Z*100);
PoloMinAmor(Teste_po) = pols_P(in_Modo(Teste_po));
elseif Teste_po == 2
SistemP2 = ss(A2,B2,C2,D2);
SistemP = SistemP2;
for i_ij = 1:size(MatrizPSS,1)
iij = ComoForamColocadas(i_ij);
SistemP = feedback(SistemP,
PSS_G1(:,:,iij),+iij,iij,+1);
end
figure(20 + Teste_po);
pzmap(SistemP);
sgrid([0.1 .2 ],30)
axis([-2.5 0.2 -1 20]);
set(gcf, 'Color',[1 1 1]);
title('Mapa Polos e Zeros do 2ro P. Operao Todos os
PSS''s');
[frq_Wn,Amort_Z,pols_P] = damp(SistemP);
[ Min_Amort_PO(Teste_po) in_Modo(Teste_po)]=
min(Amort_Z*100);
PoloMinAmor(Teste_po) = pols_P(in_Modo(Teste_po));
elseif Teste_po == 3
SistemP3 = ss(A3,B3,C3,D3);
SistemP = SistemP3;
for i_ij = 1:size(MatrizPSS,1)
iij = ComoForamColocadas(i_ij);
SistemP = feedback(SistemP,
PSS_G1(:,:,iij),+iij,iij,+1);
end
figure(20 + Teste_po);
pzmap(SistemP);
SLEC
sgrid([0.1 .2 ],30)
axis([-2.5 0.2 -1 20]);
set(gcf, 'Color',[1 1 1]);
title('Mapa Polos e Zeros do 3ro P. Operao Todos os
PSS''s');
[frq_Wn,Amort_Z,pols_P] = damp(SistemP);
[ Min_Amort_PO(Teste_po) in_Modo(Teste_po)]=
min(Amort_Z*100);
PoloMinAmor(Teste_po) = pols_P(in_Modo(Teste_po));
elseif Teste_po == 4
SistemP4 = ss(A4,B4,C4,D4);
SistemP = SistemP4;
for i_ij = 1:size(MatrizPSS,1)
iij = ComoForamColocadas(i_ij);
SistemP = feedback(SistemP,
PSS_G1(:,:,iij),+iij,iij,+1);
end
figure(20 + Teste_po);
pzmap(SistemP);
sgrid([0.1 .2 ],30)
axis([-2.5 0.2 -1 20]);
set(gcf, 'Color',[1 1 1]);
title('Mapa Polos e Zeros do 4ro P. Operao Todos os
PSS''s');
[frq_Wn,Amort_Z,pols_P] = damp(SistemP);
[Min_Amort_PO(Teste_po) in_Modo(Teste_po)]=
min(Amort_Z*100);
PoloMinAmor(Teste_po) = pols_P(in_Modo(Teste_po));
end
end
% for i_ij = 1:size(MatrizPSS,1)
%
iij = ComoForamColocadas(i_ij);
%
SistemP = feedback(SistemP, PSS_G1(:,:,iij),+iij,iij,+1);
% end
Minimo Amortecimento para Cada Ponto de Operao \n');
fprintf('
fprintf(' -----------+-------------+--------+-----------------\n');
fprintf('
P.Opera |Amortecimento| Modo |
Autovalor
\n');
fprintf(' -----------+-------------+--------+-----------------\n');
for ii = 1:1:NoPOpe
P.Oper_%1i |
%6.3f %% | M_%2i | %6.3f +
fprintf('
%6.3fi \n',ii,...
Min_Amort_PO(ii), in_Modo(ii), real(PoloMinAmor(ii)),
imag(PoloMinAmor(ii)) );
end
fprintf(' -----------+-------------+--------+-----------------\n');
.
38