Sunteți pe pagina 1din 45

!"#$%&'#()(% +%(%&), (- .

'/0&#1- 2)"1-
!"#$%& (")#&*+,-)&
."/0%$01"#$& 2" 3#,"#40%-0 3*5$%-)0
!"#$%&# (#)*+&,-.#/,0
!"#$%&' ' )*+'$,-'. +' /%&0'.,& 1%"2.%3*&
3&-4%''-&5 6*"770#2%& 80$$"2-
9-$+%-0: ;< 2" =">"%"-%& 2" ?@;A
6#1-& 7#8%#&- 7-&#9
4"-'"5,6%, 4$706%3,
8%0*66*6%9:'$';<='&;>6
Considere um processo qumico em que ocorre as seguintes reaes:
O balano de massa das respectivas espcies A e B rendem as seguintes equaes:
Com o volume de reao V = 1 litro e as seguintes constantes de taxas de reaes: k1 = 50 litros/h, k2
= 100 litros/h e k3 = 10 litros/h. Considere como entradas a concentrao de alimentao CAf = 10
mol/litro (distrbio) e a vazo do reator F (manipulada). Seja a sada controlada dada por CB.
Considere o tempo de amostragem T = 3.6 segundos.
a) (1,0) Ache as equaes em espao de estado para F = 20 litros e F = 50 litros atravs da
linearizao do sistema. Ache as respectivas funes de transferncia (ss2tf, tf2ss).
A implementao foi feita atravs de dois scripts do software Matlab R2013a, um para cada
ponto de operao. Segue a baixo os scripts e suas descries:
Para o ponto de operao 1:
Script matrizes_po1:
V = 1;
K1 = 50;
K2 = 100;
K3 = 10;
Caf = 10;
F = 20;


%Calculo Ca para o ponto de operacao 1:
%Elegendo Ca > 0:

raizes = roots([-K3 -K1-F/V F/V*Caf]);
if raizes(1) > 0
Ca = raizes(1);
else
Ca = raizes(2);
end


%Calculo Cb para o ponto de operacao 1:
Cb = roots([-(F/V)-K2 K1*Ca])

A1 = [-F/V-K1-2*K3*Ca, 0; K1, -F/V-K2];
B1 = [Caf/V-Ca/V, F/V; -Cb/V, 0];

C1 = [0,1];
D1 = [0 ,0];
Descrio:
Inicialmente definimos os parmetros descritos anteriormente no enunciado: V, K1, K2, K3,
Caf e F para o ponto de operao 1. Em seguida definimos Ca e Cb para este PO (ponto de
operao). Para a definio de Ca1 usamos a expresso de sua derivada no tempo. Sabemos que no
PO1 esta derivada deve ser nula, assim igualando dCa/Dt a zero, Ca no ponto de operao ser uma
de suas razes. Para encontrar as razes usamos a funo roots e em seguida selecionamos o valor de
Ca maior que zero pois no pode existir uma concentrao negativa.
Em posse de Ca podemos encontrar Cb da mesma forma, mas agora igualando a derivada de
Cb no tempo a zero e em seguida encontrando Cb tambm atravs da funo roots.
Em seguida definiu-se as matrizes A1 e B1 de acordo com o processo de linearizao de
sistemas no lineares para pequenas variaes em relao ao ponto de operao. Isto :
Primeiramente definimos Ca como varivel de estado 1 e Cb como varivel de estado 2. Em
seguida compusemos as matrizes A1,B1,C1,D1 do sistema. O primeiro termo da primeira linha de
A1 composto pela derivada da funo dCa/dt em relao a Ca. O segundo termo a derivada da
mesma funo mas agora em relao a Cb e ambos tomados no PO. Para a segunda linha fez-se o
mesmo mas agora com a funo dCb/dt e novamente substitumos seus parmetros pelos os dos
PO1.
A matriz B1 composta da mesma forma, mas agora as derivadas so feitas em relao s
entradas F e Caf.
Como definiu-se Cb como sada fica bvio que C1 = [0 1] e D1 zero pois no h
dependncia para com as entradas.
Para o segundo ponto de operao o script exatamente o mesmo mas agora F = 50. Assim,
segue:
Script matrizes_po2:
V = 1;
K1 = 50;
K2 = 100;
K3 = 10;
Caf = 10;
F = 50;


%Calculo Ca para o ponto de operacao 2:
%Elegendo Ca > 0:

raizes = roots([-K3 -K1-F/V F/V*Caf]);
if raizes(1) > 0
Ca = raizes(1);
else
Ca = raizes(2);
end


%Calculo Cb para o ponto de operacao 2:
Cb = roots([-(F/V)-K2 K1*Ca])

A2 = [-F/V-K1-2*K3*Ca, 0; K1, -F/V-K2];
B2 = [Caf/V-Ca/V, F/V; -Cb/V, 0];

C2 = [ 0,1];
D2 = [0 , 0];
Em posse das matrizes de estado dos dois pontos de operao chamamos o script
sistemas123:
Script sistemas123:
clear
matrizes_po1;
[num1,den1] = ss2tf(A1,B1,C1,D1,1);
sys1 = tf(num1,den1);


matrizes_po2;
[num2,den2] = ss2tf(A2,B2,C2,D2,1);
sys2 = tf(num2,den2);

matrizes_po3;
[num3,den3] = ss2tf(A3,B3,C3,D3,1);
sys3=tf(num3,den3);
Descrio:
O script carrega as matrizes dos pontos de operao atravs da chamada a matrizes_poX,
define os numeradores e denominadores da FT (funo de transferencia) atravs da funo ss2tf e
em seguida os usa junto a funo tf para definir cada uma das FT's dos diferentes PO's.
PS:. As referncia ao PO3 deve-se ao fato da utilizao posterior deste mesmo script para
carregamento do sistema no PO3.
Assim, seguem as funes de transferncia sys1 e sys2 dos pontos de operao 1 e 2
respectivamente:
b) (1,0) Plote as respostas ao degrau e ao impulso para funes de transferncia encontradas
no item anterior (step, impulse, grid, hold on). Compare essas respostas. Explique o
comportamento de resposta inversa obtida.
Plots realizados pelo script exerciciob.
Script exerciciob:
sistemas123;

subplot(221);
impulse(sys1);
title('Resposta ao impulso no PO1');
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
grid
subplot(222);
step(sys1);
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Resposta ao degrau no PO1');
grid
subplot(223);
impulse(sys2);
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Resposta ao impulso no PO2');
grid
subplot(224);
step(sys2);
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Resposta ao degrau no PO2');
grid
Plots:
Anlise:
Percebe-se que, enquanto as repostas ao impulso depois de subirem abruptamente tendem a
zero, as respostas ao degrau tendem a um valor constante diferente de zero. Isso pode ser explicado
pela natureza das entradas e do sistema e matematicamente pelo Teorema do Valor Final (TVF).
Como estamos em malha aberta e a vazo 'F' o nico parmetro do sistema que est mudando, est
definir sua resposta. Quando temos o impulso como entrada, este ocorre somente no instante zero,
elevando a concentrao de Cb rapidamente. Com o passar do tempo esta concentrao cai a zero.
Isto pode ser facilmente evidenciado pelo TVF, que nos diz que se multiplicarmos a transformada
de Laplace da entrada pela funo de transferncia do sistema vezes 's' e depois tomarmos o limite
desse produto quando 's' tende a 0, teremos o valor final no tempo da resposta a esta entrada. Veja
que a transformada de Laplace do impulso a constante 1. Multiplicando nossas funes de
transferencia por 1 e em seguida por 's' e tomando o limite com 's' tendendo a zero, vemos
claramente que nossa resposta no tempo tender a zero.
Se agora a entrada dos sistemas for um degrau e considerando que sua funo de
transferencia 1/s, fica claro que teremos o cancelamento de um 's' no denominador por um 's' do
produto do TVF. Assim vemos claramente que ao aplicar o limite com 's' tendendo a zero nossa
resposta no tempo tender a um valor constante diferente de zero para os dois casos.
Evidenciando:
A resposta ao degrau tender a:
Sys1: 287.9/1.363e04 = 0.0211 mol/L
Sys2: 105.7/2.598e04 = 4.068e-3 mol/L
Pode-se ver que os valores confirmam os grficos.
c) (1,0) Determine um polinmio que interpole satisfatoriamente a resposta ao impulso para F
= 20 litros/h usando a funo polyfit. Mostre a validao bem clara dos resultados do
polinmio obtido usando a funo polyval. Ache as razes desse polinmio usando a funo
roots.
A escolha do polinmio para melhor interpolao da resposta ao impulso para o PO1 e a soluo
para suas razes foi feita atravs do script exercicioc.
Script exercicioc:
%Carregando o sistema sys1 e
sistemas123

%Definindo os vetores da resposta ao impulso e o vetor tempo para sys1:
[y,t] = impulse(sys1);

%Encontrando polinomios para a resposta nos graus 5 a 10:
p5 = polyfit(t,y,5);
p6 = polyfit(t,y,6);
p7 = polyfit(t,y,7);
p8 = polyfit(t,y,8);
p9 = polyfit(t,y,9);
p10 = polyfit(t,y,10);

%Avaliando estes polinomios em todos os pontos do vetor t:
y5 = polyval(p5,t);
y6 = polyval(p6,t);
y7 = polyval(p7,t);
y8 = polyval(p8,t);
y9 = polyval(p9,t);
y10 = polyval(p10,t);

%Analisando graficamente a aproximacao dos polinomios de diferentes graus a
%curva original da resposta ao impulso:

subplot(3,2,1)
plot(t,y5)
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Interpolacao polinomio grau 5 ');
hold on
grid
plot(t,y,'r')
subplot(3,2,2)
plot(t,y6)
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Interpolacao polinomio grau 6 ');
hold on
grid
plot(t,y,'r')
subplot(3,2,3)
plot(t,y7)
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Interpolacao polinomio grau 7 ');
hold on
grid
plot(t,y,'r')
subplot(3,2,4)
plot(t,y8)
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Interpolacao polinomio grau 8 ');
hold on
grid
plot(t,y,'r')
subplot(3,2,5)
plot(t,y9)
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Interpolacao polinomio grau 9 ');
hold on
grid
plot(t,y,'r')
subplot(3,2,6)
plot(t,y10)
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Interpolacao polinomio grau 10');
hold on
grid
plot(t,y,'r')

%Encontrando as raizes do polinomio de maior aproximacao:
raizesc = roots(p10)
Descrio:
Primeiramente carregamos o sistema relativo ao PO1 com a funo sistemas123 como visto
anteriormente. Em seguida definimos um vetor 't' de tempo e um vetor 'y' da resposta ao impulso
para este sistema sys1.
Em posse de sys1 e atravs da funo polyfit encontramos polinmios de graus 5 at o 10
que interpolam esta resposta ao impulso. Em seguida avaliamos cada um destes polinmios em
todos os instantes do vetor 't' e imprimimos na tela todos lado a lado para melhor comparao e
juntamente com a prpria resposta ao impulso.
Como ser visto a seguir, a partir do grau 8 a interpolao bastante satisfatria sendo que
no h muita diferena entre as interpolaes de grau 9 e 10. Assim achou-se por bem adotar o grau
10 como suficiente. Assim no final do script encontramos as razes deste polinmio atravs da
funo roots.
As razes ento, so:
0.0178 + 0.0365i
0.0178 - 0.0365i
0.0927 + 0.0000i
0.0861 + 0.0043i
0.0861 - 0.0043i
0.0706 + 0.0135i
0.0706 - 0.0135i
0.0488 + 0.0255i
0.0488 - 0.0255i
0.0023 + 0.0000i
E os coeficientes do polinmio so exibidos: [-2.2120e+13, 1.1978e+13, -2.8624e+12,
3.9845e+11, -3.5924e+10, 2.2047e+09, -9.3825e+07, 2.7343e+06, -5.1053e+04, 497.0716,
-0.9062]. Sendo o primeiro coeficiente o que multiplica x^10 e o ltimo o que multiplica x^0 no
polinmio P(x) de grau 10.
Grficos:
d) (1,0) Utilize a funo fsolve para calcular o valor de F que possibilita CA = 3 mol/litro.
Para encontrarmos este novo PO utilizamos o mesmo procedimento do item a), porm agora
estamos em posse de Ca e encontramos F e Cb.
Inicialmente igualamos a derivada de Ca no tempo a zero e resolvemos a equao para F.
Para isso foi utilizado o script exerciciod.
Script exerciciod:
F = fsolve(@myfun,0)
Este script implementa a resoluo da equao descrita pela funo fsolve, como solicitado,
escolhendo como valor inicial para tentativa de resposta 0. Para utilizao de fsolve foi necessrio a
construo de uma funo, chamada myfun para descrever a equao a ser resolvida
Funo myfun:
function equacaoA = myfun(F)
V = 1;
K1 = 50;
K3 = 10;
CAf = 10;
CA = 3;
equacaoA = F/V*(CAf - CA) - (K1*CA + K3*CA^2);
end
A execuo deste script nos d como resposta:
F =
34.2857
Assim, o valor da vazao para Ca = 3 de F = 34.2857.
e) (1,0) Monte um simulador para este processo para CA = 3 mol/litro no Simulink e por
meio de um script usando a funo ode45. A simulao deste script deve possibilitar a
disponibilidade de dados de sada e entrada em cada tempo de amostragem. Compare
resultados de simulao obtidos pelos mesmos.
A simulao foi feita atravs do script exercicioe2. Foram simuladas 6 situaes, nas quais
os sistemas para cada um dos 3 pontos de operao (o terceiro ponto de operao o requerido pelo
enunciado) partem dos prprios pontos de operao e tambm de uma condio inicial nula. As
concentraes Ca e Cb so exibidas.
Script exercicioe2:
% ---- loop para o ponto de operacao 1, partindo do ponto de operacao 1
------------

clear all
matrizes_po1;
[t01,y01] = ode45('dCaCb',[0 3.6/3600],[Ca Cb],[],F,Caf);
T1 = t01;
CA1 = y01(:,1);
CB1 = y01(:,2);
for k = 1:100
CAe=CA1(end);
CBe=CB1(end);
[t1,y1] = ode45('dCaCb',[3.6*k/3600 3.6*(k+1)/3600],[CAe CBe],[],F,Caf);
T1 = [T1;t1];
CA1 = [CA1;y1(:,1)];
CB1 = [CB1;y1(:,2)];

end

Y1 = [CA1 CB1];
subplot(231)
plot(T1,Y1);
grid
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Dinamica do PO1 com PO1 como condicao inicial','FontWeight','bold');

% ---- loop para o ponto de operacao 1, partindo de concetracoes nulas
------------


clear all
matrizes_po1;
[t01,y01] = ode45('dCaCb',[0 3.6/3600],[0 0],[],F,Caf);
T1 = t01;
CA1 = y01(:,1);
CB1 = y01(:,2);
for k = 1:100
CAe=CA1(end);
CBe=CB1(end);
[t1,y1] = ode45('dCaCb',[3.6*k/3600 3.6*(k+1)/3600],[CAe CBe],[],F,Caf);
T1 = [T1;t1];
CA1 = [CA1;y1(:,1)];
CB1 = [CB1;y1(:,2)];
end
Y1 = [CA1 CB1];
subplot(234)
plot(T1,Y1);
grid
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Dinamica do PO1 com condicao inicial nula','FontWeight','bold');



% ---- loop para o ponto de operacao 2, partindo do ponto de operacao
2------------

clear all
matrizes_po2;
[t01,y01] = ode45('dCaCb',[0 3.6/3600],[Ca Cb],[],F,Caf);
T1 = t01;
CA1 = y01(:,1);
CB1 = y01(:,2);
for k = 1:100
CAe=CA1(end);
CBe=CB1(end);
[t1,y1] = ode45('dCaCb',[3.6*k/3600 3.6*(k+1)/3600],[CAe CBe],[],F,Caf);
T1 = [T1;t1];
CA1 = [CA1;y1(:,1)];
CB1 = [CB1;y1(:,2)];
end
Y1 = [CA1 CB1];
subplot(232)
plot(T1,Y1);
grid
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Dinamica do PO2 com PO2 como condicao inicial','FontWeight','bold');


% ---- loop para o ponto de operacao 2, partindo de concentracoes nulas
------------

clear all
matrizes_po2;
[t01,y01] = ode45('dCaCb',[0 3.6/3600],[0 0],[],F,Caf);
T1 = t01;
CA1 = y01(:,1);
CB1 = y01(:,2);
for k = 1:100
CAe=CA1(end);
CBe=CB1(end);
[t1,y1] = ode45('dCaCb',[3.6*k/3600 3.6*(k+1)/3600],[CAe CBe],[],F,Caf);
T1 = [T1;t1];
CA1 = [CA1;y1(:,1)];
CB1 = [CB1;y1(:,2)];
end
Y1 = [CA1 CB1];
subplot(235)
plot(T1,Y1);
grid
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Dinamica do PO2 com PO2 como condicao inicial','FontWeight','bold');



% ---- loop para o ponto de operacao 3, partindo do ponto de operacao 3
------------

clear all
matrizes_po3;
[t01,y01] = ode45('dCaCb',[0 3.6/3600],[Ca Cb],[],F,Caf);
T1 = t01;
CA1 = y01(:,1);
CB1 = y01(:,2);
for k = 1:100
CAe=CA1(end);
CBe=CB1(end);
[t1,y1] = ode45('dCaCb',[3.6*k/3600 3.6*(k+1)/3600],[CAe CBe],[],F,Caf);
T1 = [T1;t1];
CA1 = [CA1;y1(:,1)];
CB1 = [CB1;y1(:,2)];
end
Y1 = [CA1 CB1];
subplot(233)
plot(T1,Y1);
grid
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Dinamica do PO3 com PO3 como condicao inicial','FontWeight','bold');


% ---- loop para o ponto de operacao 3, partindo de concetracoes nulas
------------

clear all
matrizes_po3;
[t01,y01] = ode45('dCaCb',[0 3.6/3600],[0 0],[],F,Caf);
T1 = t01;
CA1 = y01(:,1);
CB1 = y01(:,2);
for k = 1:100
CAe=CA1(end);
CBe=CB1(end);
[t1,y1] = ode45('dCaCb',[3.6*k/3600 3.6*(k+1)/3600],[CAe CBe],[],F,Caf);
T1 = [T1;t1];
CA1 = [CA1;y1(:,1)];
CB1 = [CB1;y1(:,2)];
end
Y1 = [CA1 CB1];
subplot(236)
plot(T1,Y1);
grid
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Dinamica do PO3 com PO3 como condicao inicial','FontWeight','bold');
Descrio:
Cada uma das 6 simulaes seguem o mesmo processo, sendo a nica diferena o
carregamento de um ponto de operao diferente e/ou a condio inicial adotada. Assim segue a
explicao da primeira das 6 partes anlogas:
Primeiramente definamos a funo dCaCb que descreve a dinmica da planta do processo
em questo tendo como retorno as derivadas das concentraes Ca e Cb no tempo.
Funo dCaCb:
function xponto = dCaCb(t,x,option,F,Caf)
V = 1;
K1 = 50;
K2 = 100;
K3 = 10;


Ca = x(1);
Cb = x(2);



Caponto = F/V*(Caf - Ca) - (K1*Ca + K3*Ca^2);
Cbponto = F/V*(-Cb) + (K1*Ca - K2*Cb);

xponto = [Caponto Cbponto]';
end
Inicialmente so carregadas as constantes inerentes a todos os pontos de operao, a vazo
de entrada F e o distrbio Caf so passados como parmetros para futuro uso da mesma funo na
simulao em malha fechada.
Voltando ao script, primeiramente se carregam os dados do ponto de operao desejado
atravs do script j visto, matrizes_poX. Em seguida utilizamos a funo ode45 para integrar a
funo dCaCb, como esta ultima nos retorna as taxas de variao no tempo de Ca e Cb, integrando-
as obtivemos as concentraes Ca e Cb. Os parmetros da ode45 so: a funo a ser integrada,
dCaCb neste caso; os limites inferior e superior de tempo de integrao; as condies iniciais e os
parmetros externos exigidos pela funo a ser integrada, no caso F e Caf.
Como a ideia possibilitar a disponibilidade de dados de sada e entrada em cada tempo de
amostragem a integrao sempre feita em um intervalo de 3.6 em 3.6 segundos, como nosso
processo descrito em horas: de 3.6/3600 em 3.6/3600 hora.
A primeira iterao da integrao feita separadamente pois o software utilizado no
permite indexao com o nmero 0. Note que esta primeira iterao tem como condies iniciais os
pontos de operao de Ca e Cb. importante notar que nas outras 100 iteraes restantes as
condies inicias de integrao adotadas devem ser os ltimos valores obtidos pela ltima
integrao.
Assim, o vetor T1 mantm a concatenao dos vetores de tempo de todas as iteraes, e os
vetores CA1 e CB1 fazem o mesmo com as concentraes Ca e Cb respectivamente.
Em seguida so exibidas na tela as dinmica das concentraes Ca e Cb para os 3 pontos de
operao, partindo de 0 e dos prprios pontos de operao, em malha aberta:
Para a simulao do PO3 no simulink foi criado o seguinte modelo do sistema no
linearizado:
Tal modelo gerou as seguintes curvas de concentrao Cb tendo como condies iniciais o
ponto de operao e tambm o ponto zero, para melhor comparao. Em seguida mostrada a
mesma simulao feita pelo script.
0 0.02 0.04 0.06 0.08 0.1 0.12
0.8
1
1.2
1.4
1.6
1.8
2
2.2
C
o
n
c
e
n
t
r
a
c
a
o

(
l
i
t
r
o
/
h
o
r
a
)
Tempo (hora)
Dinamica do PO1 com PO1 como condicao inicial
0 0.02 0.04 0.06 0.08 0.1 0.12
0
0.5
1
1.5
2
2.5
C
o
n
c
e
n
t
r
a
c
a
o

(
l
i
t
r
o
/
h
o
r
a
)
Tempo (hora)
Dinamica do PO1 com condicao inicial nula
0 0.02 0.04 0.06 0.08 0.1 0.12
1
1.5
2
2.5
3
3.5
4
C
o
n
c
e
n
t
r
a
c
a
o

(
l
i
t
r
o
/
h
o
r
a
)
Tempo (hora)
Dinamica do PO2 com PO2 como condicao inicial
0 0.02 0.04 0.06 0.08 0.1 0.12
0
1
2
3
4
C
o
n
c
e
n
t
r
a
c
a
o

(
l
i
t
r
o
/
h
o
r
a
)
Tempo (hora)
Dinamica do PO2 com condicao inicial nula
0 0.02 0.04 0.06 0.08 0.1 0.12
1
1.5
2
2.5
3
C
o
n
c
e
n
t
r
a
c
a
o

(
l
i
t
r
o
/
h
o
r
a
)
Tempo (hora)
Dinamica do PO3 com PO3 como condicao inicial
0 0.02 0.04 0.06 0.08 0.1 0.12
0
0.5
1
1.5
2
2.5
3
C
o
n
c
e
n
t
r
a
c
a
o

(
l
i
t
r
o
/
h
o
r
a
)
Tempo (hora)
Dinamica do PO3 com condicao inicial nula
Grficos pelo Simulink:
Grficos pelo script:
0 0.02 0.04 0.06 0.08 0.1 0.12
0
0.5
1
1.5
2
2.5
C
o
n
c
e
n
t
r
a
c
a
o

(
lit
r
o
/
h
o
r
a
)
Tempo (hora)
Dinamica do PO3 com PO3 como condicao inicial
0 0.02 0.04 0.06 0.08 0.1 0.12
0
0.2
0.4
0.6
0.8
1
1.2
1.4
Dinamica do PO3 com condicao inicial nula
C
o
n
c
e
n
t
r
a
c
a
o

(
lit
r
o
/
h
o
r
a
)
Tempo (hora)
f) (0,5) Ache a funo da resposta ao degrau analtica para CA = 3 mol/litro usando a funo
residue. Plote a curva de resposta e compare com resultados usando a funo step.
Exerccio realizado pelo script exerciciof.
Script exerciciof:
%carregamento dos parametros do PO3:
sistemas123;

%Funcao de transferencia do degrau:
tfstep = tf([1],[1 0]);

%Resposta do sistema em PO3 ao degrau na frequencia;
YS = tfstep*sys3;

%Obtencao do numerador e denominador de YS
[N,D] = tfdata(YS,'v');

%Obtencao dos coeficientes da expansao por fracoes parciais por residue:
[r,p,k] = residue(N,D);

%Construcao do vetor tempo tt
tt = [0:0.001:3.6];

%Antitransformada de Laplace usando os coeficientes obtidos:
yt = r(1)*exp(p(1).*tt) + r(2)*exp(p(2).*tt) + r(3)*exp(p(3).*tt);

%Comparacao da curva obtida com o step em sys3:
step(sys3);
grid
hold on
plot(tt,yt,'o');
Descrio:
Inicialmente carregamos o sys3 atravs do script j visto, sistemas123. Em seguida achamos
a funo de transferncia do degrau. Multiplicamos sys3 pela ltima FT obtida tivemos a resposta
do sistema em PO3 ao degrau na frequncia, YS. Atravs da funo tfdata obtivemos o numerador e
o denominador desta resposta YS. Atravs da funo residue fizemos a expanso em fraes
parciais de YS e obtivemos os coeficientes da expanso.
Em posse dos coeficientes efetuamos a antitransformada de Laplace de YS que dada pelo
somatrio de todos os tempos r(n)*exp(p(n)) + k sendo r(n) e p(n) os coeficientes anteriormente
obtidos, assim como k, que no caso zero.
Assim obtivemos a resposta ao degrau do sistema em PO3 no tempo, como dito
anteriormente: yt = r(1)*exp(p(1).*tt) + r(2)*exp(p(2).*tt) + r(3)*exp(p(3).*tt).
Em seguida exibimos esta curva sobreposta com a resposta ao degrau do sistema
proporcionada pela funo step para validao da curva yt obtida, como mostrado abaixo:
Grfico:
g) (0,5) Para CA = 3 mol/litro, ache os plos, os zeros e os autovalores deste processo (pole,
zero, eig).
Script exerciciog:
%carregamento do sistema em PO3:
sistemas123;

%obtencao dos polos:
poles = pole(sys3)

%obtencao dos autovalores:
E = eig(A3)

%obtencao dos zeros:
[Z,G] = zero(sys3)
Primeiramente carregamos o sistema em PO3 atravs de sistemas123. Para
obteno dos plos poles do sistema usamos a funo poles(sys3) que tem como
argumento o prprio sistema em PO3 sys3. Em seguida obtivemos os autovalores E
do sistema atravs de eig(A3) que tem como argumento a matriz A3 retirada de
matrizes_po3 que chamada por sistemas123. Para obteno do(s) zero(s) do
sistema usamos a funo zero(sys3) que tem como parmetro o sistema sys3 e nos
retorna, alm do(s) zero(s) Z do sistema, tambm seu ganho G.
Resultado:
poles = [-144.2857 -134.2857]
E = [-134.2857 -144.2857]
Z = 169.0476
G = -1.1170
h) (1,0) Faa um script que simule um controlador PI para o processo nas trs situaes
diferentes de operao anteriores. Mostre resultados de controle de mudana de setpoint e de
rejeio a distrbios (CAf deve variar de 10 para 11). A simulao deve ser realizada no modelo
no linear.
0 0.01 0.02 0.03 0.04 0.05 0.06
2
0
2
4
6
8
10
x 10
3


Step Response
Time (seconds)
A
m
p
lit
u
d
e
step
y(t)
Script exercicioh:
%{
======================================
Teste Rejeicao de disturbio em OP1:
%}

%Carregando parametros do ponto de operacao 1:
clear
matrizes_po1
%Calculo dos primeiros 3.6 segundos:
[t01,y01] = ode45('dCaCb',[0,3.6/3600],[Ca,Cb],[],F,Caf);
T1 = t01;
CA1 = y01(:,1);
CB1 = y01(:,2);


%Parametros do controlador PI
Kc = 3;
T = 3.6/3600;
Ti = 1000;

%Constantes do controlador PI
q0 = Kc;
q1 = -Kc*(1+T/Ti);



%Fixacao do setpoint inicial no ponto de operacao
setpoint = Cb ;
%Sinal de controle iniciado em zero
u(1) = 0;
%Vazao inicializada no ponto de operacao
Fu = F;


%Simulacao de 1 hora da planta em malha fechada
for k = 1:1000
CAe=CA1(end);
CBe=CB1(end);

%Calculo do erro: quanto Cb diverge do setpoint
e(k) = setpoint - CB1(end);

%Calculo do sinal de controle pelo controlador PI
if k > 1
u(k) = u(k-1) + q0*e(k) + q1*e(k-1);
end

%na iteracao de numero 100 (0.1 hora) Caf vai de 10 para 11:
if k == 100
Caf = 11;
end


%Nova vazao: Vazao anterior acrescida da vazao calculada pelo controlador
Fu = Fu + u(k);

%Realimenta-se a planta com a nova vazao Fu
[t,y] = ode45('dCaCb',[3.6*k/3600 3.6*(k+1)/3600],[CAe CBe],[],Fu,Caf);


%Montagem dos vetores de tempo e de concentracoes durante todo processo:
T1 = [T1;t];
CA1 = [CA1;y(:,1)];
CB1 =[CB1;y(:,2)];




end


subplot(211);
plot(T1,CB1);
grid
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Rejeicao ao degrau do disturbio Caf em PO1 ');

erro_percentual_Cb = 100*(setpoint - CB1(end))/setpoint


%{
==============================================================================
Resposta a mudanca de setpoint em 10% no PO1:
%}

%Carregando parametros do ponto de operacao 1:
clear
matrizes_po1

%Calculo dos primeiros 3.6 segundos:
[t01,y01] = ode45('dCaCb',[0,3.6/3600],[Ca,Cb],[],F,Caf);
T1 = t01;
CA1 = y01(:,1);
CB1 = y01(:,2);


%Parametros do controlador PI
Kc = 3;
T = 3.6/3600;
Ti = 1000;

%Constantes do controlador PI
q0 = Kc;
q1 = -Kc*(1+T/Ti);



%Fixacao do setpoint inicial no ponto de operacao
setpoint = Cb ;
%Sinal de controle iniciado em zero
u(1) = 0;
%Vazao inicializada no ponto de operacao
Fu = F;


%Simulacao de 1 hora da planta em malha fechada
for k = 1:1000
CAe=CA1(end);
CBe=CB1(end);

%Calculo do erro: quanto Cb diverge do setpoint
e(k) = setpoint - CB1(end);

%Calculo do sinal de controle pelo controlador PI
if k > 1
u(k) = u(k-1) + q0*e(k) + q1*e(k-1);
end

%na iteracao de numero 100 (0.1 hora) o setpoint aumenta em 10%:
if k == 100
setpoint = Cb*1.1;
end


%Nova vazao: Vazao anterior acrescida da vazao calculada pelo controlador
Fu = Fu + u(k);

%Realimenta-se a planta com a nova vazao Fu
[t,y] = ode45('dCaCb',[3.6*k/3600 3.6*(k+1)/3600],[CAe CBe],[],Fu,Caf);


%Montagem dos vetores de tempo e de concentracoes durante todo processo:
T1 = [T1;t];
CA1 = [CA1;y(:,1)];
CB1 =[CB1;y(:,2)];




end


subplot(212);
plot(T1,setpoint,'r');
hold on
plot(T1,CB1);
grid
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Resposta a mudanca de 10% do setpoint em PO1 ');


erro_percentual_Cb = 100*(setpoint - CB1(end))/setpoint


%{
======================================
Teste Rejeicao de disturbio em OP2:
%}

%Carregando parametros do ponto de operacao 2:
clear
matrizes_po2
%Calculo dos primeiros 3.6 segundos:
[t01,y01] = ode45('dCaCb',[0,3.6/3600],[Ca,Cb],[],F,Caf);
T1 = t01;
CA1 = y01(:,1);
CB1 = y01(:,2);


%Parametros do controlador PI
Kc = 3;
T = 3.6/3600;
Ti = 1000;

%Constantes do controlador PI
q0 = Kc;
q1 = -Kc*(1+T/Ti);



%Fixacao do setpoint inicial no ponto de operacao
setpoint = Cb ;
%Sinal de controle iniciado em zero
u(1) = 0;
%Vazao inicializada no ponto de operacao
Fu = F;


%Simulacao de 1 hora da planta em malha fechada
for k = 1:1000
CAe=CA1(end);
CBe=CB1(end);

%Calculo do erro: quanto Cb diverge do setpoint
e(k) = setpoint - CB1(end);

%Calculo do sinal de controle pelo controlador PI
if k > 1
u(k) = u(k-1) + q0*e(k) + q1*e(k-1);
end

%na iteracao de numero 100 (0.1 hora) Caf vai de 10 para 11:
if k == 100
Caf = 11;
end


%Nova vazao: Vazao anterior acrescida da vazao calculada pelo controlador
Fu = Fu + u(k);

%Realimenta-se a planta com a nova vazao Fu
[t,y] = ode45('dCaCb',[3.6*k/3600 3.6*(k+1)/3600],[CAe CBe],[],Fu,Caf);


%Montagem dos vetores de tempo e de concentracoes durante todo processo:
T1 = [T1;t];
CA1 = [CA1;y(:,1)];
CB1 =[CB1;y(:,2)];




end

figure(2)
subplot(211);
plot(T1,CB1);
grid
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Rejeicao ao degrau do disturbio Caf em PO2 ');

erro_percentual_Cb = 100*(setpoint - CB1(end))/setpoint


%{
==============================================================================
Resposta a mudanca de setpoint em 10% no PO2:
%}

%Carregando parametros do ponto de operacao 2:
clear
matrizes_po2

%Calculo dos primeiros 3.6 segundos:
[t01,y01] = ode45('dCaCb',[0,3.6/3600],[Ca,Cb],[],F,Caf);
T1 = t01;
CA1 = y01(:,1);
CB1 = y01(:,2);


%Parametros do controlador PI
Kc = 0.3;
T = 3.6/3600;
Ti = 1000;

%Constantes do controlador PI
q0 = Kc;
q1 = -Kc*(1+T/Ti);



%Fixacao do setpoint inicial no ponto de operacao
setpoint = Cb ;
%Sinal de controle iniciado em zero
u(1) = 0;
%Vazao inicializada no ponto de operacao
Fu = F;


%Simulacao de 1 hora da planta em malha fechada
for k = 1:1000
CAe=CA1(end);
CBe=CB1(end);

%Calculo do erro: quanto Cb diverge do setpoint
e(k) = setpoint - CB1(end);

%Calculo do sinal de controle pelo controlador PI
if k > 1
u(k) = u(k-1) + q0*e(k) + q1*e(k-1);
end

%na iteracao de numero 100 (0.1 hora) o setpoint aumenta em 10%:
if k == 100
setpoint = Cb*1.1;
end


%Nova vazao: Vazao anterior acrescida da vazao calculada pelo controlador
Fu = Fu + u(k);

%Realimenta-se a planta com a nova vazao Fu
[t,y] = ode45('dCaCb',[3.6*k/3600 3.6*(k+1)/3600],[CAe CBe],[],Fu,Caf);


%Montagem dos vetores de tempo e de concentracoes durante todo processo:
T1 = [T1;t];
CA1 = [CA1;y(:,1)];
CB1 =[CB1;y(:,2)];




end


subplot(212);
plot(T1,setpoint,'r');
hold on
plot(T1,CB1);
grid
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Resposta a mudanca de 10% do setpoint em PO2 ');


erro_percentual_Cb = 100*(setpoint - CB1(end))/setpoint

%{
======================================
Teste Rejeicao de disturbio em OP3:
%}

%Carregando parametros do ponto de operacao 3:
clear
matrizes_po3
%Calculo dos primeiros 3.6 segundos:
[t01,y01] = ode45('dCaCb',[0,3.6/3600],[Ca,Cb],[],F,Caf);
T1 = t01;
CA1 = y01(:,1);
CB1 = y01(:,2);


%Parametros do controlador PI
Kc = 3;
T = 3.6/3600;
Ti = 1000;

%Constantes do controlador PI
q0 = Kc;
q1 = -Kc*(1+T/Ti);



%Fixacao do setpoint inicial no ponto de operacao
setpoint = Cb ;
%Sinal de controle iniciado em zero
u(1) = 0;
%Vazao inicializada no ponto de operacao
Fu = F;


%Simulacao de 1 hora da planta em malha fechada
for k = 1:1000
CAe=CA1(end);
CBe=CB1(end);

%Calculo do erro: quanto Cb diverge do setpoint
e(k) = setpoint - CB1(end);

%Calculo do sinal de controle pelo controlador PI
if k > 1
u(k) = u(k-1) + q0*e(k) + q1*e(k-1);
end

%na iteracao de numero 100 (0.1 hora) Caf vai de 10 para 11:
if k == 100
Caf = 11;
end


%Nova vazao: Vazao anterior acrescida da vazao calculada pelo controlador
Fu = Fu + u(k);

%Realimenta-se a planta com a nova vazao Fu
[t,y] = ode45('dCaCb',[3.6*k/3600 3.6*(k+1)/3600],[CAe CBe],[],Fu,Caf);


%Montagem dos vetores de tempo e de concentracoes durante todo processo:
T1 = [T1;t];
CA1 = [CA1;y(:,1)];
CB1 =[CB1;y(:,2)];




end

figure(3);
subplot(211);
plot(T1,CB1);
grid
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Rejeicao ao degrau do disturbio Caf em PO3 ');

erro_percentual_Cb = 100*(setpoint - CB1(end))/setpoint


%{
==============================================================================
Resposta a mudanca de setpoint em 10% no PO3:
%}

%Carregando parametros do ponto de operacao 3:
clear
matrizes_po3

%Calculo dos primeiros 3.6 segundos:
[t01,y01] = ode45('dCaCb',[0,3.6/3600],[Ca,Cb],[],F,Caf);
T1 = t01;
CA1 = y01(:,1);
CB1 = y01(:,2);


%Parametros do controlador PI
Kc = 3;
T = 3.6/3600;
Ti = 1000;

%Constantes do controlador PI
q0 = Kc;
q1 = -Kc*(1+T/Ti);



%Fixacao do setpoint inicial no ponto de operacao
setpoint = Cb ;
%Sinal de controle iniciado em zero
u(1) = 0;
%Vazao inicializada no ponto de operacao
Fu = F;


%Simulacao de 1 hora da planta em malha fechada
for k = 1:1000
CAe=CA1(end);
CBe=CB1(end);

%Calculo do erro: quanto Cb diverge do setpoint
e(k) = setpoint - CB1(end);

%Calculo do sinal de controle pelo controlador PI
if k > 1
u(k) = u(k-1) + q0*e(k) + q1*e(k-1);
end

%na iteracao de numero 100 (0.1 hora) o setpoint aumenta em 10%:
if k == 100
setpoint = Cb*1.1;
end


%Nova vazao: Vazao anterior acrescida da vazao calculada pelo controlador
Fu = Fu + u(k);

%Realimenta-se a planta com a nova vazao Fu
[t,y] = ode45('dCaCb',[3.6*k/3600 3.6*(k+1)/3600],[CAe CBe],[],Fu,Caf);


%Montagem dos vetores de tempo e de concentracoes durante todo processo:
T1 = [T1;t];
CA1 = [CA1;y(:,1)];
CB1 =[CB1;y(:,2)];




end


subplot(212);
plot(T1,setpoint,'r');
hold on
plot(T1,CB1);
grid
ylabel('Concentracao (litro/hora)');
xlabel('Tempo (hora)');
title('Resposta a mudanca de 10% do setpoint em PO3 ');


erro_percentual_Cb = 100*(setpoint - CB1(end))/setpoint
Descrio:
Neste scrpit so executadas 6 simulaes: as dinmicas de malha fechada do sistema com
correo de um degrau do distrbio Caf e as dinmicas de malha fechada do sistema com mudana
do valor de setpoint em 10% para cada um dos 3 pontos de operao. As 6 partes so anlogas, s
mudando as constantes dos PO's carregadas, os parmetros de sintonia do controlador e a ativao
do degrau no distrbio Caf ou da variao do setpoint para cada simulao. Segue a explicao da
primeira das 6 partes:
Seu funcionamento praticamente idntico ao da parte e) j explicada, utilizando-se da
mesma forma a funo que descreve a dinmica do sistema dCaCb, que nos retorna as taxas de
variao de Ca e Cb no tempo e da funo ode45 que ao integrar dCaCb nos retorna as
concentraes Ca e Cb em cada instante de tempo e tendo como parmetros extras, alm dos
inerentes j explicados, o distrbio Caf e a vazo F.
A grande diferena deste item para o anterior que agora nosso sistema est em malha
fechada e assim a entrada manipulada F no mais fixa mas sim determinada pelo controlador.
Vejamos:
Carregou-se os dados do sistema do POx em questo atravs de matrizes_pox. Calculou-se a
primeira iterao da dinmica, de 0 a 3.6 segundos, pois no permitida a indexao com 0.
Utilizou-se Caf e F do PO e obteve-se CA1 e CB1, as concentraes Ca e Cb neste intervalo de
tempo. Em seguida carregou-se os parmetros de sintonia do controlador PI, Ti e Kc, e o tempo T
do intervalo de integrao de cada iterao, permitindo a realimentao das entradas Caf e F na
ode45 e portanto na planta do sistema. A seguir definiu-se as constantes de discretizao do
controlador PI, q0 e q1, que so funo de T, Ti e Kc:
q0 = Kc;
q1 = -Kc*(1+T/Ti);
Depois definiu-se o setpoint inicial como a concentrao Cb no ponto de operao, o sinal
inicial u(1) de controle como zero e inicializou-se a vazo Fu da planta com o valor F, do ponto de
operao. Assim iniciou-se um processo de 100 iteraes da seguinte forma: Foi calculado o erro
e(k) que o quanto o ultimo valor de concentrao diferente do valor setado como setpoint:
e(k) = setpoint CB1(end);
Em seguida foi calculado o valor do sinal de controle u(k), com as constantes q0 e q1
anteriormente obtidas, da seguinte forma:
u(k) = u(k-1) + q0*e(k) + q1*e(k-1);
Sendo u(k-1) o sinal de controle na iterao anterior, e(k) o erro da iterao atual j calculado, e
e(k-1) o erro da ultima iterao. Esta expresso modela o controlador PI discreto.
A seguir programou-se um eventual teste que modifica o valor do setpoint em 10% a mais
do valor anterior, que era o do ponto de operao. Nas simulaes de correo de distrbio Caf, no
lugar deste linha h uma que define o novo Caf = 11 e no mais 10. Enfim, definiu-se que a nova
vazo corrigida Fu corrigida do sistema ser a vazo anterior acrescida do sinal u(k) de controle
calculado pela expresso do controlador PI, como visto anteriormente. Em posse da nossa nova
vazo Fu a planta realimentada com este novo valor e, eventualmente, com um novo valor de Caf
atravs da ode45. Assim so obtidos novos valores para as concentraes Ca e Cb neste intervalo
atual de integrao, de 3.6*k/3600 a 3.6*(k+1)/3600 horas, sendo k a iterao atual.
Finalmente concatenou-se os pontos do intervalo de tempo e das concentraes Ca e Cb
durante este intervalo, obtendo ao final das 1000 iteraes o comportamento do sistema em malha
fechada do sistema durante 1 hora, j que cada intervalo de integrao dura 3.6/3600 = 0.001 hora.
Tambm calculado um erro percentual no final do processo dado por erro_percentual_Cb =
100*(setpoint CB1(end))/setpoint. Assim, depois so exibidos as curvas da concentrao
Cb para cada uma das 6 simulaes, veja a seguir:
Grficos:
0 0.2 0.4 0.6 0.8 1 1.2 1.4
0.86
0.88
0.9
0.92
0.94
0.96
C
o
n
c
e
n
t
r
a
c
a
o

(
lit
r
o
/
h
o
r
a
)
Tempo (hora)
Rejeicao ao degrau do disturbio Caf em PO1
0 0.2 0.4 0.6 0.8 1 1.2 1.4
0.9
0.92
0.94
0.96
0.98
1
1.02
1.04
C
o
n
c
e
n
t
r
a
c
a
o

(
lit
r
o
/
h
o
r
a
)
Tempo (hora)
Resposta a mudanca de 10% do setpoint em PO1
0 0.2 0.4 0.6 0.8 1 1.2 1.4
1.2
1.22
1.24
1.26
1.28
1.3
1.32
C
o
n
c
e
n
t
r
a
c
a
o

(
lit
r
o
/
h
o
r
a
)
Tempo (hora)
Rejeicao ao degrau do disturbio Caf em PO2
0 0.2 0.4 0.6 0.8 1 1.2 1.4
1.22
1.24
1.26
1.28
1.3
1.32
1.34
C
o
n
c
e
n
t
r
a
c
a
o

(
lit
r
o
/
h
o
r
a
)
Tempo (hora)
Resposta a mudanca de 10% do setpoint em PO2
Nota:
Perceba que a nica situao em que o controlador no consegue fazer Cb chegar ao setpoint
na variao de 10% do valor de setpoint para o PO2. Nota-se que o PO2 o que apresenta maior
valor de concentrao Cb para o ponto de operao, quando aumenta-se este valor ainda mais (10%)
o controlador simplesmente no consegue elevar Cb alm disso, mesmo aumentando a vazo F.
Tentou-se sintonizar os ganhos integral e proporcional mas ainda assim a diferena foi muito
pequena mesmo beirando a estabilidade com o aumento de Kc.

0 0.2 0.4 0.6 0.8 1 1.2 1.4
1.05
1.1
1.15
1.2
C
o
n
c
e
n
t
r
a
c
a
o

(
l
i
t
r
o
/
h
o
r
a
)
Tempo (hora)
Rejeicao ao degrau do disturbio Caf em PO3
0 0.2 0.4 0.6 0.8 1 1.2 1.4
1.1
1.15
1.2
1.25
C
o
n
c
e
n
t
r
a
c
a
o

(
l
i
t
r
o
/
h
o
r
a
)
Tempo (hora)
Resposta a mudanca de 10% do setpoint em PO3
i) (1,0) Refaa o item [h] usando o Simulink.
Diagrama:
Grficos:
Rejeio de degrau de 10% no distrbio Caf para o PO1:
Variao do ponto de operao em 10% para o PO1:
Rejeio de degrau de 10% no distrbio Caf para o PO2:
Variao do ponto de operao em 10% para o PO2:
Nota:
Veja, novamente, que a correo do controlador em PO2 para variao de 10% tambm no
foi bem sucedida, neste caso chegando estabilidade.
Rejeio de degrau de 10% no distrbio Caf para o PO3:
Variao do ponto de operao em 10% para o PO2:
j) (1,0) Determine as funes de transferncia discreta do processo (discretizao por ZOH) e
dos controladores PI (por matriz de transio de estados).
Inicialmente pensou-se no seguinte script para encontrar a FT discreta do controlador PI por
matriz de transio de estados:
%{
===================================================================
Discretizacao do controlador PI por matriz de transicao de estados:
%}

%Parametros de discretizacao e do sistema:
Ts = 3.6/3600;
Ti = 100;
Kc = 3;
%{
Representando a expressao do controlador em variaveis de estado:

Funcao de transferencia do controlador -> G(s) = Kc*Ti*s + Kc
-------------
Ti*s
Entao, em variaveis de estado:
%}

[Ac,Bc,Cc,Dc] = tf2ss([Kc*Ti Kc],[Ti 0]);

%Discretizacao:

FI = expm(Ac*Ts);

%PSI = inv(Ac)*(FI - eye(1))*Bc;
%Como FI = 1 pois Ac = 0, FI - eye(1) = 0 e PSI = 0;
PSI = [0];


controld = ss(FI,PSI,Cc,Dc,Ts);

%{
===============================================
Teste da discretizacao:
%}

controlc = ss(Ac,Bc,Cc,Dc);

step(controlc);
hold on;
step(controld,'r');
Acontece que para a FT descrita pela expresso G(s) acima a matriz de estado Ac nula.
Isso nos geraria FI = 1, pois: FI = expm(Ac*Ts). Veja ainda que PSI = inv(Ac)*(FI
eye(1))*Bc. Como Ac nula sua inversa seria, para o Matlab, um nmero Inf, que a
representao do software para infinito. Ainda em PSI, veja que o segundo termo do produto FI-
eye(1), como FI = 1 teramos um segundo termo nulo. Assim FI seria indeterminado pois teramos
uma multiplicao de um termo infinito por zero, o que o Matlab interpreta como NaN (not-a-
number). Assim este mtodo mostrou-se ineficiente para esta situao. Portanto a FT discreta do
controlador foi obtida pelo mtodo ZOH. Como o enunciado pedia soluo por matriz de transio
de estado, achou-se as FT's dos 3 pontos de operao do sistema, alm de por ZOH, tambm por
matriz de transio de estado. Abaixo segue a discretizao por ZOH do controlador:
Script controladorzoh:
Ts = 3.6/3600;
Ti = 100;
Kc = 3;
%{ Representando a expressao do controlador em variaveis de estado:

Funcao de transferencia do controlador -> G(s) = Kc*Ti*s + Kc
-------------
Ti*s
Entao, sua FT:
%}
syscc = tf([Kc*Ti Kc],[Ti 0]);
syscd = c2d(syscc,Ts,'zoh')
%Teste validacao da FT discreta do controlador:
%Diminui-se o tempo de amostrage
step(syscc,0.03);
hold on
step(syscd,0.03,'k');
grid
Inicialmente carregou-se os parmetros de sintonia do controlador e o tempo de
amostragem. Como sabemos o numerador e o denominador da FT continua do controlador pode-se
usar o comando tf() para obt-la. Em seguida foi utilizada a funo c2d que transforma uma FT
continua em discreta e tem como argumentos a FT continua do sistema, o tempo de amostragem e o
mtodo de discretizao, que no caso foi o ZOH. Em seguida foi exibido o step da FT continua
sobreposto ao step da FT discreta para verificaao da validade da FT.
A FT obtida foi, para Ts = 3.6/3600, Ti = 100 e Kc = 3:
FT = 3z 3 / z-1
Grfico:
0 0.005 0.01 0.015 0.02 0.025 0.03
3
3.0001
3.0002
3.0003
3.0004
3.0005
3.0006
3.0007
3.0008
3.0009
3.001
Step Response
Time (seconds)
A
m
p
l
i
t
u
d
e
A seguir o script para encontrar as FT's dos 3 pontos de operaao, tanto por ZOH quanto por
matriz de transio de estados:
Script sistema123d:
%{

==========================================
Discretizando os sistemas 1 2 e 3 por ZOH:
%}

%Carregando sistemas continuos
sistemas123;

%Tempo de amostragem
Ts = 3.6/3600;

%Discretizacao:

sys1d = c2d(sys1,Ts,'zoh');
sys2d = c2d(sys2,Ts,'zoh');
sys3d = c2d(sys3,Ts,'zoh');


%Teste grafico das discretizacoes:

%{
figure(1)
step(sys1);
hold on
step(sys1d,'k');
grid

figure(2)
step(sys2);
hold on
step(sys2d,'k');
grid

figure(3)
step(sys3);
hold on
step(sys3d,'k');
grid
%}


% =============================================
% Discretizacao dos sistemas por matriz de transicao:

%carregando sistemas continuos:
sistemas123;

%Discretizacao:

FI1 = expm(A1*Ts);
FI2 = expm(A2*Ts);
FI3 = expm(A3*Ts);

PSI1 = inv(A1)*(FI1 - eye(2))*B1;
PSI2 = inv(A2)*(FI2 - eye(2))*B2;
PSI3 = inv(A3)*(FI3 - eye(2))*B3;



sys1d_mt = ss(FI1,PSI1,C1,D1,Ts);
sys2d_mt = ss(FI2,PSI2,C2,D2,Ts);
sys3d_mt = ss(FI3,PSI3,C3,D3,Ts);

[a1,b1,c1,d1] = ssdata(sys1d_mt);
[n1,d1] = ss2tf(a1,b1,c1,d1,1);
sys1dmt = tf(n1,d1,Ts);

[a2,b2,c2,d2] = ssdata(sys2d_mt);
[n2,d2] = ss2tf(a2,b2,c2,d2,1);
sys2dmt = tf(n2,d2,Ts);

[a3,b3,c3,d3] = ssdata(sys3d_mt);
[n3,d3] = ss2tf(a3,b3,c3,d3,1);
sys3dmt = tf(n3,d3,Ts);




%{
===============================================
Teste da discretizacao:



figure(1);
step(sys1d);
hold on
step(sys1dmt,'o');
grid

figure(2);
step(sys2d);
hold on
step(sys2dmt,'o');
grid

figure(3);
step(sys3d);
hold on
step(sys3dmt,'o');
grid

%}
Descrio:
A discretizao por ZOH idntica anterior descrita. Ento seguiremos para a explicao
da discretizao por matriz de transio de estados.
Inicialmente carregou-se os sistemas contnuos dos 3 PO's pelo script j visto sistemas123.
Este ltimo chama os scripts matrizes_pox, que carregam as matrizes de representao por variveis
de estado Ax, Bx, Cx, Dx dos 3 PO's. Depois carregou-se o tempo de amostragem Ts. Em posse
destas matrizes podemos calcular o termo FI, dado por FI = expm(A*Ts). Em seguida foi calculado
o termo PSI, dado por PSI = inv(A)*(FI eye(2))*B. Onde eye(2) uma matriz identidade 2x2, j
que nossas matrizes A e B so 2x2. Finalmente foi possvel calcular a FT discreta em variveis de
estado pela funo ss(), que tem como parmetros FI e PSI calculados, as matrizes C e D do sistema
e o tempo de amostragem Ts. Depois, com a funo ssdata() obteve-se as 4 matrizes a,b,c,d de
representao discreta de variveis de estado. Em posse destas matrizes usou-se ss2tf para se obter o
numerador e denominador da FT no plano Z do sistema. Com este numerador e denominador e
conhecendo o tempo de amostragem Ts, usou-se a funo tf() com Ts como terceiro parmetro para
finalmente encontrar a FT no plano Z do sistema. O procedimento foi realizado para todos os 3 PO's
. Seguem as FT's encontradas:
sys1dmt =

-0.0006746 z + 0.0009311
------------------------
z^2 - 1.78 z + 0.7917

Sample time: 0.001 seconds
Discrete-time transfer function.
>> sys2dmt
sys2dmt =

-0.0009906 z + 0.001081
-----------------------
z^2 - 1.702 z + 0.7238

Sample time: 0.001 seconds
Discrete-time transfer function.
>> sys3dmt
sys3dmt =

-0.0008857 z + 0.00105
----------------------
z^2 - 1.74 z + 0.7569

Sample time: 0.001 seconds
Discrete-time transfer function.
Como pedido pelo enunciado e descrito anteriormente, tambm calculou-se as 3 FT's pelo
mtodo ZOH j evidenciado e assim seguem os grficos comparando as FT's para os 3 PO's pelas
diferentes abordagens:
PO1:
PO2:
0 0.02 0.04 0.06 0.08 0.1 0.12
0.005
0
0.005
0.01
0.015
0.02
0.025
Step Response
Time (seconds)
A
m
p
lit
u
d
e
0 0.01 0.02 0.03 0.04 0.05 0.06
3
2
1
0
1
2
3
4
5
x 10
3
Step Response
Time (seconds)
A
m
p
l
i
t
u
d
e
PO3:
0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08
2
0
2
4
6
8
10
x 10
3
Step Response
Time (seconds)
A
m
p
l
i
t
u
d
e
k) (1,0) Faa a simulao da malha de controle linear discreta para o PI simulado nos trs
pontos de operao para as FTs do item [j).
Foram feitas 6 simulaes da malha discreta fechada com o controlador PI: para cada um
dos 3 PO's mostrou-se qual o comportamento do sistema sem variao de setpoint e com uma
variao de setpoint de 10% a partir de 0.3 hora. As simulaes tem 1 hora de durao total.
Script exerciciok:
% ====================================================
% Simulacao da malha de controle discreta em PO1 sem variacao de setpoint:

%carregamento das FTs em Z do sistemas 1 2 e 3 discretos:
sistema123d;
%carregamento dos parametros do PO1
matrizes_po1;

%Parametros do controlador PI
Kc = 3;
T = 3.6/3600;
Ti = 1000;

%Constantes do controlador PI discreto
q0 = Kc;
q1 = -Kc*(1+T/Ti);


%matrizes de coeficientes da funcao de transferencia da planta discreta
[a,b] = tfdata(sys1d,'v');



Y(2) = Cb;
Y(1) = Cb;
u(2) = 0;
e(2) = 0;
X(2) = F;
X(1) = F;

tempo = [0 T 2*T];
Cbd = [Cb Cb Cb];
setpoint = Cb;
for k=3:1000

%variacao do setpoint em 0.3 hora
if k == 300
% setpoint = Cb*1.1;
end
%calculo do erro
e(k) = setpoint - Y(k-1);

%controlador discreto
u(k) = u(k-1) + q0*e(k) + q1*e(k-1);

%definicao da entrada de vazao da planta

X(k) = X(k-1) + u(k);

%discretizacao da planta
Y(k) = (-b(3)/b(1))*Y(k-2) + (-b(2)/b(1))*Y(k-1) + (a(1)/b(1))*X(k) +
(a(2)/b(1))*X(k-1) + (a(3)/b(1))*X(k-2);

tempok(k) = k*T;

tempo = [tempo k*T];
Cbd = [Cbd Y(k)];
end

subplot(321);
plot(tempo,Cb,'r');
hold on;
plot(tempo,Cbd);
grid;
ylabel('Concentracao Cb (litro/hora)');
xlabel('Tempo (hora)');
title('Malha discreta fechada em PO1');


% ====================================================
% Simulacao da malha de controle discreta em PO1 com variacao de setpoint de 10%
em 0.3 hora:

%carregamento das FTs em Z do sistemas 1 2 e 3 discretos:
sistema123d;
%carregamento dos parametros do PO1
matrizes_po1;

%Parametros do controlador PI
Kc = 3;
T = 3.6/3600;
Ti = 1000;

%Constantes do controlador PI discreto
q0 = Kc;
q1 = -Kc*(1+T/Ti);


%matrizes de coeficientes da funcao de transferencia da planta discreta
[a,b] = tfdata(sys1d,'v');



Y(2) = Cb;
Y(1) = Cb;
u(2) = 0;
e(2) = 0;
X(2) = F;
X(1) = F;

tempo = [0 T 2*T];
Cbd = [Cb Cb Cb];
setpoint = Cb;
for k=3:1000

%variacao do setpoint em 0.3 hora
if k == 300
setpoint = Cb*1.1;
end
%calculo do erro
e(k) = setpoint - Y(k-1);

%controlador discreto
u(k) = u(k-1) + q0*e(k) + q1*e(k-1);

%definicao da entrada de vazao da planta

X(k) = X(k-1) + u(k);

%discretizacao da planta
Y(k) = (-b(3)/b(1))*Y(k-2) + (-b(2)/b(1))*Y(k-1) + (a(1)/b(1))*X(k) +
(a(2)/b(1))*X(k-1) + (a(3)/b(1))*X(k-2);

tempok(k) = k*T;

tempo = [tempo k*T];
Cbd = [Cbd Y(k)];
end

subplot(322);
plot(tempo(1,1:301),Cb, 'r');
hold on;
plot(tempo(1,301:1001),Cb*1.1,'r');
hold on;
plot(tempo,Cbd);
grid;
ylabel('Concentracao Cb (litro/hora)');
xlabel('Tempo (hora)');
title('Malha discreta fechada em PO1 com variacao de setpoint em 0.3 hora');

% ====================================================
% Simulacao da malha de controle discreta em PO2 sem variacao de setpoint:

%carregamento das FTs em Z do sistemas 1 2 e 3 discretos:
sistema123d;
%carregamento dos parametros do PO2
matrizes_po2;

%Parametros do controlador PI
Kc = 3;
T = 3.6/3600;
Ti = 1000;

%Constantes do controlador PI discreto
q0 = Kc;
q1 = -Kc*(1+T/Ti);


%matrizes de coeficientes da funcao de transferencia da planta discreta
[a,b] = tfdata(sys2d,'v');



Y(2) = Cb;
Y(1) = Cb;
u(2) = 0;
e(2) = 0;
X(2) = F;
X(1) = F;

tempo = [0 T 2*T];
Cbd = [Cb Cb Cb];
setpoint = Cb;
for k=3:1000

%variacao do setpoint em 0.3 hora
if k == 300
% setpoint = Cb*1.1;
end
%calculo do erro
e(k) = setpoint - Y(k-1);

%controlador discreto
u(k) = u(k-1) + q0*e(k) + q1*e(k-1);

%definicao da entrada de vazao da planta

X(k) = X(k-1) + u(k);

%discretizacao da planta
Y(k) = (-b(3)/b(1))*Y(k-2) + (-b(2)/b(1))*Y(k-1) + (a(1)/b(1))*X(k) +
(a(2)/b(1))*X(k-1) + (a(3)/b(1))*X(k-2);

tempok(k) = k*T;

tempo = [tempo k*T];
Cbd = [Cbd Y(k)];
end

subplot(323);
plot(tempo,Cb,'r');
hold on;
plot(tempo,Cbd);
grid;
ylabel('Concentracao Cb(litro/hora)');
xlabel('Tempo (hora)');
title('Malha discreta fechada em PO2');

% ====================================================
% Simulacao da malha de controle discreta em PO2 com variacao de setpoint:

%carregamento das FTs em Z do sistemas 1 2 e 3 discretos:
sistema123d;
%carregamento dos parametros do PO2
matrizes_po2;

%Parametros do controlador PI
Kc = 3;
T = 3.6/3600;
Ti = 1000;

%Constantes do controlador PI discreto
q0 = Kc;
q1 = -Kc*(1+T/Ti);


%matrizes de coeficientes da funcao de transferencia da planta discreta
[a,b] = tfdata(sys2d,'v');



Y(2) = Cb;
Y(1) = Cb;
u(2) = 0;
e(2) = 0;
X(2) = F;
X(1) = F;

tempo = [0 T 2*T];
Cbd = [Cb Cb Cb];
setpoint = Cb;
for k=3:1000

%variacao do setpoint em 0.3 hora
if k == 300
setpoint = Cb*1.1;
end
%calculo do erro
e(k) = setpoint - Y(k-1);

%controlador discreto
u(k) = u(k-1) + q0*e(k) + q1*e(k-1);

%definicao da entrada de vazao da planta

X(k) = X(k-1) + u(k);

%discretizacao da planta
Y(k) = (-b(3)/b(1))*Y(k-2) + (-b(2)/b(1))*Y(k-1) + (a(1)/b(1))*X(k) +
(a(2)/b(1))*X(k-1) + (a(3)/b(1))*X(k-2);

tempok(k) = k*T;

tempo = [tempo k*T];
Cbd = [Cbd Y(k)];
end

subplot(324);
plot(tempo(1,1:301),Cb, 'r');
hold on;
plot(tempo(1,301:1001),Cb*1.1,'r');
hold on;
plot(tempo,Cbd);
grid;
ylabel('Concentracao Cb (litro/hora)');
xlabel('Tempo (hora)');
title('Malha discreta fechada em PO2 com variacao de setpoint em 0.3 hora');


% ====================================================
% Simulacao da malha de controle discreta em PO3 sem variacao de setpoint:

%carregamento das FTs em Z do sistemas 1 2 e 3 discretos:
sistema123d;
%carregamento dos parametros do PO1
matrizes_po3;

%Parametros do controlador PI
Kc = 3;
T = 3.6/3600;
Ti = 1000;

%Constantes do controlador PI discreto
q0 = Kc;
q1 = -Kc*(1+T/Ti);


%matrizes de coeficientes da funcao de transferencia da planta discreta
[a,b] = tfdata(sys3d,'v');



Y(2) = Cb;
Y(1) = Cb;
u(2) = 0;
e(2) = 0;
X(2) = F;
X(1) = F;

tempo = [0 T 2*T];
Cbd = [Cb Cb Cb];
setpoint = Cb;
for k=3:1000

%variacao do setpoint em 0.3 hora
if k == 300
% setpoint = Cb*1.1;
end
%calculo do erro
e(k) = setpoint - Y(k-1);

%controlador discreto
u(k) = u(k-1) + q0*e(k) + q1*e(k-1);

%definicao da entrada de vazao da planta

X(k) = X(k-1) + u(k);

%discretizacao da planta
Y(k) = (-b(3)/b(1))*Y(k-2) + (-b(2)/b(1))*Y(k-1) + (a(1)/b(1))*X(k) +
(a(2)/b(1))*X(k-1) + (a(3)/b(1))*X(k-2);

tempok(k) = k*T;

tempo = [tempo k*T];
Cbd = [Cbd Y(k)];
end

subplot(325);
plot(tempo,Cb,'r');
hold on;
plot(tempo,Cbd);
grid;
ylabel('Concentracao Cb (litro/hora)');
xlabel('Tempo (hora)');
title('Malha discreta fechada em PO3');


% ====================================================
% Simulacao da malha de controle discreta em PO3 com variacao de setpoint:

%carregamento das FTs em Z do sistemas 1 2 e 3 discretos:
sistema123d;
%carregamento dos parametros do PO3
matrizes_po3;

%Parametros do controlador PI
Kc = 3;
T = 3.6/3600;
Ti = 1000;

%Constantes do controlador PI discreto
q0 = Kc;
q1 = -Kc*(1+T/Ti);


%matrizes de coeficientes da funcao de transferencia da planta discreta
[a,b] = tfdata(sys3d,'v');



Y(2) = Cb;
Y(1) = Cb;
u(2) = 0;
e(2) = 0;
X(2) = F;
X(1) = F;

tempo = [0 T 2*T];
Cbd = [Cb Cb Cb];
setpoint = Cb;
for k=3:1000

%variacao do setpoint em 0.3 hora
if k == 300
setpoint = Cb*1.1;
end
%calculo do erro
e(k) = setpoint - Y(k-1);

%controlador discreto
u(k) = u(k-1) + q0*e(k) + q1*e(k-1);

%definicao da entrada de vazao da planta

X(k) = X(k-1) + u(k);

%discretizacao da planta
Y(k) = (-b(3)/b(1))*Y(k-2) + (-b(2)/b(1))*Y(k-1) + (a(1)/b(1))*X(k) +
(a(2)/b(1))*X(k-1) + (a(3)/b(1))*X(k-2);

tempok(k) = k*T;

tempo = [tempo k*T];
Cbd = [Cbd Y(k)];
end

subplot(326);
plot(tempo(1,1:301),Cb, 'r');
hold on;
plot(tempo(1,301:1001),Cb*1.1,'r');
hold on;
plot(tempo,Cbd);
grid;
ylabel('Concentracao Cb (litro/hora)');
xlabel('Tempo (hora)');
title('Malha discreta fechada em PO3 com variacao de setpoint em 0.3 hora');
Descrio:
As 6 simulaes so exatamente iguais, s mudando as constantes dos PO's. E a mudana ou
no do setpoint em +10% no instante 0.3 hora. Assim segue a explicao da primeira das 6
simulaes:
Inicialmente carregou-se os 3 sistemas discretos no tempo com o script j visto sistema123d.
Em seguida carregou-se os parmetros do PO conveniente. Depois definiu-se os parmetros de
sintonia do controlador PI, Kc e Ti e tambm o tempo de amostragem T. Em seguida definiu-se, as
constantes q0 e q1 para a expresso do controlador PI. Sendo:
q0 = Kc;
q1 = -Kc*(1+T/Ti);
A seguir utilizou-se a funo tfdata() para se obter o numerador e o denominador da FT
discreta do PO. Com estes dois vetores sabemos quem so os coeficientes do numerador e
denominador e assim, posteriormente descreveremos a dinmica da planta em tempo discreto
atravs de uma equao de diferenas e destes coeficientes.
Inicializou-se Y(2) e Y(1), a concentrao de Cb nos instantes k = 1 e k = 2 no ponto de
operao, o sinal de controle u(2) em zero, o erro e(2) em zero e a vazo, que a entrada da
equao discreta da planta, nos instantes k = 1 e k = 2 em F, a vazo no ponto de operao. O
setpoint inicial definido como a concentrao no PO, Cb. Estas tiveram que ser inicializadas fora
do loop de iterao porque o clculo do erro e(k), do sinal de controle u(k) e da concentrao de
sada Y(k) da planta, depende destas em instantes anteriores a k.
Em seguida iniciou-se as iteraes de numero 3 a 1000, totalizando 1 hora de simulao. Em
primeiro lugar h a possibilidade de mudar o setpoint em 10% do PO para testes futuros. Em
seguida calcula-se o erro e(k) no instante k que o valor do setpoint menos a concentraao no
instante k-1:
e(k) = setpoint Y(k-1);
Em posse das constantes q0 e q1, do erro no instante k e no instante k-1 e do sinal de controle no
instante k -1 podemos calcular o sinal de controle u(k) no instante k:
u(k) = u(k-1) + q0*e(k) + q1*e(k-1);
Com o sinal de controle, definiremos uma nova vazo X(k) no instante k que ser a vazo no estado
anterior, k-1, corrigida pelo sinal de controle calculado, isto :
X(k) = X(k-1) + u(k);
Com esta nova vazo podemos realimentar o sistema discreto descrito da seguinte forma:
Como visto anteriormente, nossas TF's dos 3 PO's no domnio Z tem o seguinte formato:
a1*z^2 + a2*z + a3
H(z) = ------------------------ = Y(z) / X(z)
b1*z^2 - b2*z + b3
Multiplicando X(z) pelo numerador e Y(z) pelo denominador, em seguida multiplicando os
dois lados da equao por z^-2 e em seguida usando a propriedade de atraso no tempo, podemos
fazer facilmente a antitransformada Z e resolver para Y(k), obtendo assim a expresso da planta
discreta:
Y(k) = (-b(3)/b(1))*Y(k-2) + (-b(2)/b(1))*Y(k-1) + (a(1)/b(1))*X(k) +
(a(2)/b(1))*X(k-1) + (a(3)/b(1))*X(k-2);
Note que os coeficientes b(3), b(2), b(1), a(3), a(2) e a(1) foram obtidos no comeo do
script, como j dito, com: [a,b] = tfdata(sysxd,'v'). Sendo sysxd o a FT no dominio Z no
Pox obtida no exerccio anterior.
Por fim, como essa planta receber foi realimentada com um novo valor de X(k), aps todas as
iteraes temos finalmente a resposta em um vetor que concatenou os valores de Y(k) em todos os
instantes k, chamado de Cbd.
Assim, finalmente seguem os grficos de Y(k) do tempo k = 0 at o tempo k = 1000, com e
sem variao do valor do setpoint para os 3 pontos de operao:
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0.4
0.6
0.8
1
1.2
C
o
n
c
e
n
t
r
a
c
a
o

C
b

(
l
i
t
r
o
/
h
o
r
a
)
Tempo (hora)
Malha discreta fechada em PO1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0.4
0.6
0.8
1
1.2
C
o
n
c
e
n
t
r
a
c
a
o

C
b

(
l
i
t
r
o
/
h
o
r
a
)
Tempo (hora)
Malha discreta fechada em PO1 com variacao de setpoint em 0.3 hora
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0
0.5
1
1.5
C
o
n
c
e
n
t
r
a
c
a
o

C
b
(
l
i
t
r
o
/
h
o
r
a
)
Tempo (hora)
Malha discreta fechada em PO2
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0
0.5
1
1.5
C
o
n
c
e
n
t
r
a
c
a
o

C
b

(
l
i
t
r
o
/
h
o
r
a
)
Tempo (hora)
Malha discreta fechada em PO2 com variacao de setpoint em 0.3 hora
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0.4
0.6
0.8
1
1.2
1.4
C
o
n
c
e
n
t
r
a
c
a
o

C
b

(
l
i
t
r
o
/
h
o
r
a
)
Tempo (hora)
Malha discreta fechada em PO3
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
0.4
0.6
0.8
1
1.2
1.4
C
o
n
c
e
n
t
r
a
c
a
o

C
b

(
l
i
t
r
o
/
h
o
r
a
)
Tempo (hora)
Malha discreta fechada em PO3 com variacao de setpoint em 0.3 hora

S-ar putea să vă placă și